模擬器在機器人領域非常重要,可以把昂貴的機器人放在虛擬世界中,進行測試,也可以在虛擬世界中進行演算法的開發,減少實體機器人的損耗。還有不同感測器的相對位置和遮擋也都可以在模擬器中進行測試,減少在實體機器人上的調整時間。
模擬器有很多種,有些事針對特定情境的模擬器像是自駕車或是無人機,而有些則是通用型的模擬器,可以用來模擬各種不同的機器人。而這些給機器人用的模擬器大多也支援ROS,不論事原生支援還是透過ROS Bridge的方式來支援,都可以在ROS中使用。
這裡就介紹幾個比較有名的模擬器,不過具體使用方式超出太多就不講解了,僅介紹一下各自的特色和使用情境。基本上這邊每一個模擬器都可以出一篇鐵人
Gazebo是ROS本身自帶的模擬器,可以在ROS中直接使用,也可以單獨使用。Gazebo的模擬器是基於OGRE的引擎,是一個很古老的開源的3D圖形引擎。
其中裡面有很多官方預設的模型,也有很多第三方的模型,可以直接使用,也可以自己建立模型。Gazebo主要是由SDF來描述模型,SDF是XML的格式,可以用文字編輯器來編輯,也可以用GUI的方式來編輯,Gazebo也有提供GUI的編輯器,可以直接在Gazebo中編輯模型。
由於Gazebo比較簡單,這邊會介紹比較詳細一些。
這邊提供Ubuntu 20.04 + ROS Foxy的安裝連結,其他版本請參考Ignition Gazebo的官方文件。
啟動Gazebo world visualize_lidar.sdf
:
ign gazebo -v 4 -r visualize_lidar.sdf
應該可以看到下面的視窗,有遊樂園和一個藍色的車子。
檢查Ignition Gazebo的Topics:
ign topic -l
⚠️ 注意:這邊的
ign topic
和ros2 topic
不同,ign topic
是Ignition Gazebo的指令,ros2 topic
是ROS2的指令。
要把ROS2
的Topic和Ignition Gazebo
的Topic連接起來,可以使用ros_ign_bridge
的package。首先安裝:
sudo apt-get install ros-foxy-ros-ign-bridge
接著啟動ros_ign_bridge
:
source /opt/ros/foxy/setup.bash
ros2 run ros_ign_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist
更多ros_ign_bridge
的使用方式可以參考官方文件。
接著我們可以控制車子的速度,有以下幾種方法
ros2 topic pub
的方式
ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/Twist "linear: { x: 0.1 }"
teleop_twist_keyboard
的方式,記得要remap /cmd_vel
到/model/vehicle_blue/cmd_vel
# 如果還沒安裝的話
sudo apt-get install ros-foxy-teleop-twist-keyboard
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/model/vehicle_blue/cmd_vel
不只指令可以從gazebo bridge到ROS2
,Sensor的資料也可以。上述的範例中帶有LiDAR,可以將LiDAR的資料bridge到ROS2
,並且使用rviz2
來顯示。首先開啟lidar bridge:
ros2 run ros_ign_bridge parameter_bridge /lidar2@sensor_msgs/msg/LaserScan[ignition.msgs.LaserScan --ros-args -r /lidar2:=/laser_scan
接著開啟rviz2
:
rviz2
Fixed Frame選擇vehicle_blue/lidar_link/gpu_lidar
。Add
->By Topic
->/laser_scan/LaserScan
,就可以看到LiDAR的資料了。
這也是ROS2
官方建議的模擬器,也是一個開源的模擬器,可以用來模擬各種不同的機器人,也可以用來模擬各種不同的感測器。操作相較於Gazebo
更直覺,模擬器的引擎也比較新,看起來會比Gazebo更真實。
可以選擇使用Distributio安裝或Source Code安裝。這邊使用Ubuntu Distribution安裝,其他方式、作業系統請參考官網說明。
sudo apt-get install ros-foxy-webots-ros2
要測試是否安裝成功,啟動webots_ros2_universal_robot
source /opt/ros/foxy/setup.bash
export WEBOTS_HOME=/usr/local/webots # 設定Webots的安裝路徑
ros2 launch webots_ros2_universal_robot multirobot_launch.py
要測試簡單範例的話可以參考這邊的教學,做出一個圓柱體小車的機器人。
Carla模擬器是一種開放源碼的自動駕駛模擬器,是基於Unreal Engine所開發的。它可以生成逼真的城市環境和交通情況。Carla模擬器可以用於開發和測試自動駕駛系統,以及進行交通研究。
Carla模擬器的功能包括:
Carla模擬器已經被廣泛用於自動駕駛研究。它被用來開發和測試自動駕駛系統的各種技術,包括感知、規劃和控制。Carla模擬器還被用來進行交通研究,例如研究交通流量和交通事故。
Carla模擬器是一種強大的工具,可用於開發和測試自動駕駛系統。它提供了一個逼真的環境來測試自動駕駛系統的性能,並且可以用來進行交通研究。
以下是Carla模擬器的一些具體應用:
AWSIM是由Tier IV所開發的模擬器,主要是針對自駕車的模擬器,可以模擬自駕車在不同的環境中的行為,也可以模擬不同的感測器在不同的環境中的表現。AWSIM是基於Unreal Engine所開發的,Unreal Engine是一個商業的3D圖形引擎,可以用來開發遊戲,也可以用來開發模擬器。
Tier IV本身是做車用相機的,不過最有名的還是全開源的自駕車軟體Autoware。Autoware是一個完整的自駕車軟體,包含了感測器的蒐集、感測器的融合、路徑規劃、控制等等,AWSIM就是為了Autoware所開發的模擬器,可以用來測試Autoware的各種功能。而且Autoware本身就是建立在ROS2
之上,而AWSIM又是專門給Autoware使用的,因此強烈推薦要玩自駕車的人可以嘗試。
不過比較麻煩的是,目前Autoware是採用最新的ROS2 Humble
,而最新的Nvidia AGX Orin邊緣運算電腦還還在Ubuntu 20.04僅能安裝ROS2 Foxy
,所以得要用Docker。
ISAAC Sim是由Nvidia所開發的模擬器,基於Omniver渲染器所開發的機器人互動平台。這個模擬器最大的優勢就是善用了Nvidia官方的Ray Tracing功能,相較於其他的模擬器,ISAAC Sim的畫面更加逼真,也更加真實。
其中一個很強大的功能就是Gym的支援,可以同時模擬上百組機器人用來做強化學習的訓練。另外Semantics的支援也很好,可以用來做Semantic Segmentation標註的訓練。不過因為這些過於豐富的功能和可以寫程式擴充的特性,ISAAC Sim的學習曲線也是這些模擬器中最高的。