AMR_Day25提到了ros-foxy-gazebo-ros-pkgs
,也用它提供的<plugin>
刻出了一台可以被控制的URDF差速車,但差速車的格式是相對容易,加上網路上蠻多教學資源,真的要從0開始弄出整台車型到寫出<plugin>
的內容對我來說還是蠻困難的,慣性的設定在某個層面來說也造成很大的影響...這些事我個人在做四輪阿克曼(汽車轉向)時的種種挫折
ros-foxy-gazebo-ros-pkgs
內已經提供了很多SDF模型可以用了!例如差速小車# 長的稍微不一樣,但都是差速車
gazebo --verbose /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
# 同樣也可以用ros2 topic 控制
ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 1.0}}' -1
動圖來源:Gazebo Tutorials
以此類推,可以看到/opt/ros/foxy/share/gazebo_plugins/worlds/
中還有很多可以用的範例~包含了我想測試的阿克曼(汽車轉向)車,雖然尺寸不符合我實際的機器人,但以模擬來說就很夠用了!
也可以新增隧道與光達感測器,模擬實際環境~
可以看到這些範例都是.world,前幾天有稍微介紹到.world就是好多份SDF組合而成。
以gazebo_ros_camera_triggered_demo.world
來看,從xml檔案看出是由3個<model>
組合而成
可以單拿出這個<model name="ball">
另外儲存為一個.sdf放在models資料夾中作為一個可以被Gazebo載入的模型。
<model name="ball">
<allow_auto_disable>false</allow_auto_disable>
<pose>-1 0 1 0 0 0</pose>
<static>false</static>
<link name="link">
<inertial>
<mass>0.026</mass>
<!-- inertia based on solid sphere 2/5 mr^2 -->
<inertia>
<ixx>1.664e-5</ixx>
<iyy>1.664e-5</iyy>
<izz>1.664e-5</izz>
<ixy>0</ixy>
<ixz>0</ixz>
<iyz>0</iyz>
</inertia>
</inertial>
<collision name="collision">
<geometry>
<sphere>
<radius>0.04</radius>
</sphere>
</geometry>
<surface>
<bounce>
<restitution_coefficient>1.0</restitution_coefficient>
<threshold>0</threshold>
</bounce>
<contact>
<ode>
<max_vel>10000</max_vel>
<min_depth>0.001</min_depth>
</ode>
</contact>
</surface>
</collision>
<visual name="visual">
<geometry>
<sphere>
<radius>0.04</radius>
</sphere>
</geometry>
</visual>
</link>
</model>
詳細的步驟在Gazebo-classic
能不自己造輪子就不要自己造...
下圖是我實際自己刻的阿克曼小車
是按照上面的gazebo_ros_ackermann_drive_demo.world
去修改尺寸和重量。
結果...一旦要接收ros2 topic pub控制,就爆炸了!!!
明天來介紹一些比較輕鬆的~