iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

一個營建系學生的韌體之路-自走車篇系列 第 26

【AMR_Day26】Gazebo雜談

  • 分享至 

  • xImage
  •  

汽車模擬

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

https://ithelp.ithome.com.tw/upload/images/20231011/201404333lUZNfFpgQ.png
Gazebo Tutorials

動圖來源:Gazebo Tutorials

以此類推,可以看到/opt/ros/foxy/share/gazebo_plugins/worlds/中還有很多可以用的範例~包含了我想測試的阿克曼(汽車轉向)車,雖然尺寸不符合我實際的機器人,但以模擬來說就很夠用了!
https://ithelp.ithome.com.tw/upload/images/20231011/201404331ro0zSj21U.png
https://ithelp.ithome.com.tw/upload/images/20231011/20140433EWpjNSyI1Q.png

也可以新增隧道與光達感測器,模擬實際環境~
https://ithelp.ithome.com.tw/upload/images/20231011/20140433mJgZUJNClj.png

World

可以看到這些範例都是.world,前幾天有稍微介紹到.world就是好多份SDF組合而成。
gazebo_ros_camera_triggered_demo.world 來看,從xml檔案看出是由3個<model>組合而成
https://ithelp.ithome.com.tw/upload/images/20231011/20140433tOBGarVl3g.png
https://ithelp.ithome.com.tw/upload/images/20231011/201404330gMcNeDlcS.png

SDF

可以單拿出這個<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>

https://ithelp.ithome.com.tw/upload/images/20231011/20140433LvDqL6X052.png
https://ithelp.ithome.com.tw/upload/images/20231011/20140433OWTRd6zlv5.png
https://ithelp.ithome.com.tw/upload/images/20231011/20140433CAZ4VCLCFB.png
詳細的步驟在Gazebo-classic

慘痛實紀

能不自己造輪子就不要自己造...

下圖是我實際自己刻的阿克曼小車
https://ithelp.ithome.com.tw/upload/images/20231011/20140433osNngd5qdr.png
是按照上面的gazebo_ros_ackermann_drive_demo.world去修改尺寸和重量。
結果...一旦要接收ros2 topic pub控制,就爆炸了!!!
https://ithelp.ithome.com.tw/upload/images/20231011/20140433QQadgY59Ka.png

Gazebo之旅大概到這

明天來介紹一些比較輕鬆的~


上一篇
【AMR_Day25】來用URDF刻一台車—Plugin
下一篇
【AMR_Day27】F1TENTH & Wall following
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言