V-REP


vrep文檔


一、V-REP編程

1. 編程方式

V-REP支持六種編程方式。
嵌入式腳本、add on、ros node、bluezuro node、plugin、remote api等。

1. 嵌入式腳本

嵌入式腳本包括一個main腳本,多個子腳本。
子腳本包括線程和非線程腳本。
主腳本包含以下幾個函數。
init、actuation、sensing、cleanup

注意
盡量不要修改子腳本,主腳本一旦打開,便改變為自定義腳本,不再能夠自動更新。

V-REP內部腳本只支持Lua語言。
主腳本結構

function sysCall_init()         // 初始化
function sysCall_actuation()    // 執行器
function sysCall_sensing()      // 傳感器
function sysCall_cleanup()      // 清除

2. API 架構

  1. 常規API
  2. 遠程API
  3. ROS接口
  4. BlueZero接口
  5. 輔助API
  6. 其他接口

二、遠程控制

V-REP內部腳本只支持Lua語言,而遠程API支持C/C++、Python、Java、Matlab/Octave以及Lua等多種語言。

1. 遠程連接

  1. 實現遠程連接,需要動態庫remoteApi.so文件,將其存放於V-REP軟件的根目錄。
  2. 查看remoteApiConnections.txt文件,獲取其遠程連接默認端口號。
  3. 以Python語言為例,測試遠程連接。
clientID=vrep.simxStart('127.0.0.1',19999,True,True,5000,5) # Connect to V-REP
vrep.simxGetPingTime(clientID)
vrep.simxFinish(clientID)   # Close

眾多遠程連接示例保存在programming文件夾下。

2. 遠程API

V-REP提供了眾多遠程API與常規API相對應,以便外部使用V-REP的各種功能。
遠程API通過套接字或者共享內存等方式與V-REP通信。

遠程API有兩個獨立的實體,通過套接字進行交互。
比如導入場景、添加模型、啟動仿真等。

vrep.simxLoadScene()    
vrep.simxGetObjectHandle()

另外,還可以直接調用常規API實現遠程調用。

simxCallScriptFunction()

該API支持直接使用內部常規API,在制定object handle和client ID的前提下,實現遠程控制。
函數調用類型有

  • 阻塞調用 simx_opmode_blocking
    在調用結果返回之前,當前線程會被掛起。函數只有在得到結果之后才會返回。
  • 非阻塞調用 sim_opmode_oneshot
    在不能立刻得到結果之前,該函數不會阻塞當前線程,而回立刻返回。
    該調用不適合於不需要服務端應答的場合。
  • 數據流模式 simx_opmode_streaming simx_opmode_buffer
    等類型

三、物體相關

V-REP的仿真涉及眾多數量、眾多類型的模型。V-REP提供了Shape、八叉樹,以及點雲等多種類型。
可以直接在圖形界面中添加生成,也可以通過Lua腳本調用常規API,以及外部腳本調用遠程API添加生成。

1. 句柄

V-REP場景中的每個物體都有句柄,無論是可見還是不可見的物體,以至於其他動作比如碰撞等,皆有句柄。
每個生成或者檢測物體或動作的API皆可返回對應的句柄。
比如

sim.getObjectHandle()
sim.getCollisionHandle()

另外還可以通過物體相對應的腳本返回自身的句柄

sim.getObjectAssociatedWithScript(sim.handle_self)

該API返回所在子腳本對應的物體的句柄。

2. 物體生成

在V-REP場景中添加物體可以直接右鍵添加,
或者通過API比如sim.createPureShape()等。

進一步可以通過sim.setObjectPosition()或``sim.設置其位置。
達到對模型的充分設置。

sim.createPureShape(0,43,{0.1,0.1,0.1},0.1,nil)

關於shape的屬性,43表示
object

隨機位置,生成隨機形狀的物體。
可以利用隨機數,控制物體的位置。

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))
print(math.random())

另外物體的位置設置,應該選用相對位置,否則會出現新產生的物體被擠出去的現象。

sim.setObjectPosition()

即物體的相關物體的句柄不應是-1。

2. 模型導入

V-REP可以將現有的外部模型導入,支持URDF、點雲等多種類型。
可以直接將ttm文件導入至V-REP。

V-REP的點雲導入方式為,建立一個初始點雲,然后逐漸向點雲中添加點。

點雲導入

導入機器人,以ER7為例
導入機器人時,機器人無法保持正常的狀態,會發生抖動或者散架的情況。

dummy是為了運動學反解而准備的,需要成對出現

3. 碰撞檢測

V-REP可以檢測兩個碰撞實體,碰撞過程中可以注冊碰撞對象,既可以檢測具體的兩個物體之間的碰撞,也可以檢測一個物體與其他所有物體之間產生的碰撞。碰撞對象之間的碰撞狀態可以由不同的顏色可視化顯示,也可以通過Graph與數據流對其進行記錄。

另外,對於一個復雜的模型,其內部由多個子結構構成,注冊碰撞對象時,會在其內部檢測到碰撞,需要將整個復雜結構體注冊為一個Group,忽略其內部碰撞,以免影響正常的仿真驗證。

4. 物體抓取

物體抓取有兩種方式,一種是仿真實際的抓取過程,但是涉及眾多物理參數的調節,較為復雜;另外還有偽抓取的方式,可以建立一個Link,實現有效地抓取。
關於實際仿真抓取,其反應如同真實場景。

關於偽抓取,通過建立連接,可以保證抓取穩定。

sim.setObjectParent(attachedShape,connector,true)   # 建立連接
sim.setObjectParent(attachedShape,-1,true)  # 斷開連接

四、視覺相關

視覺傳感器和相機都可以顯示場景中的圖像,但是一般用於不同的用途,一個側重於視覺檢測和處理,一個側重於場景顯示。

1. 相機

可以在場景中添加多個相機,並實現多個視角的切換。
相機

2. 視覺傳感器

視覺傳感器有正交投影和透視投影兩種類型。
傳感
視覺傳感器有近端切平面和遠端切平面。
使用剪切平面可以排除場景眾多一些幾何體,只查看或渲染場景中的某些部分。
比近端切平面近和比遠端切平面遠的對象是不可見的。遠近端切平面可以在屬性對話框中加以設置。
透視模式下的視場角等屬性也可以設置。
視覺傳感器可以選擇性的忽略RGB信息和深度信息以及其他信息以提高速度。
視覺傳感器的Z軸沿着視線方向,Y軸代表上方,X軸指向左側。
視覺傳感器還可以通過設置濾波器進行進一步設置。

視覺傳感器獲得的深度值是歸一化的數值,並非真正的數值,需要根據遠近端切平面的位置進一步運算得出真實的深度值。

獲取深度值以及RGB值

sim.getVisionSensorDepthBuffer()
sim.getVisionSensorImage()

五、ROS接口

v-REP與ROS的連接有三種接口,包括ROS Interface、ROS Plugin和諸如ROS Bridge等其他接口。

1. ROS Interface

ROS Interface為V-REP官方支持的連接方式。
RosInterface以高保真度復制C/C++ ROS API。
該功能通過libv_repRosInterface.so插件啟用。
在V-REP的腳本中,以simROS為前綴的API為RosInterface支持的API。

通過RosInterface,V-REP可以充當ROS節點,其他節點通過ROS服務,ROS發布者和訂閱者進行通信。

pub=simROS.advertise('/image', 'sensor_msgs/Image')
simROS.publisherTreatUInt8ArrayAsString(pub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)
sub=simROS.subscribe('/image', 'sensor_msgs/Image', 'imageMessage_callback')
simROS.subscriberTreatUInt8ArrayAsString(sub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)

操作於ROS類似。

2. ROS Plugin

主要包括三部分

v_repStart()
v_repEnd()
v_repMessage()

關於libv_reoRosControl,
由vrep_ros_control_example,依賴於
vrep_commom、
vrep_plugin_skeleton、
vrep_skeleton_msg_and_srv編譯生成。

但是插件僅支持單機器人。

可以自己制作ROS的相關插件,實現ROS

3. 其他接口

V-REP還支持通過ROS Bridge等接口實現。

ROS Bridge

六、性能優化

1. headless模式

V-REP支持headless模式啟動,在headless模式下啟動,可以省去圖形界面消耗的資源,提高運行速度。

./vrep.sh -h -s5000 -q myScene.ttt

經過實驗,headless模式可以將啟動速度提升近十倍。

2. ghost

ghost

ghost

V-REP中有兩個ttm文件

另外仿真場景中,還有加速選項。

\(\cdots \cdots\)
未完待續

參考資源
冬木遠景
User Manual
V-REP Forum
GitHub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM