iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
自我挑戰組

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

【AMR_Day25】來用URDF刻一台車—Plugin

  • 分享至 

  • xImage
  •  

Plugin

Gazebo雖然是獨立的機器人模擬軟體,非為ROS2而生,不過Gazebo能透過Gazebo_ros_pkgs這個package 來和ROS或ROS2的任何一個版本做話題與服務的傳遞。

sudo apt install ros-foxy-gazebo-ros-pkgs

細節可以到Gazebo Tutorials查看
,另外Gazebo不同的版本就有不同的教學網站!個人目前使用Gazebo-classic,所以試看這一份~
https://ithelp.ithome.com.tw/upload/images/20231010/20140433RG9DVOG3Z5.png
https://ithelp.ithome.com.tw/upload/images/20231010/20140433XkmxKjqS7d.png
沒有影片,不過上面那張途中右邊的小車是不斷在接收ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 0.5}}'也就是一直往前走~

實際操作

在URDF的最後加上<gazebo><plugin>...

<?xml version="1.0"?>
<robot name="ej_robot">       
   ...
   
   <gazebo>
        <plugin name="diff_drive_controller" filename="libgazebo_ros_diff_drive.so">
            <!-- Update rate in Hz -->
            <update_rate>50</update_rate>
            <!-- wheels -->
            <left_joint>left_wheel_joint</left_joint>
            <right_joint>right_wheel_joint</right_joint>
            <!-- kinematics -->
            <wheel_separation>0.45</wheel_separation>
            <wheel_diameter>0.2</wheel_diameter>
            <!-- output -->
            <publish_odom>true</publish_odom>
            <publish_odom_tf>true</publish_odom_tf>
            <publish_wheel_tf>true</publish_wheel_tf>
            <odometry_topic>odom</odometry_topic>
            <odometry_frame>odom</odometry_frame>
            <robot_base_frame>base_link</robot_base_frame>
        </plugin>
    </gazebo>
</robot>

<plugin>的種類

不論是差速小車或是阿克曼小車,都有相對應的<plugin>可以使用,就連桿測器等等都有,附上Plugin Types,常用可分成

  1. ModelPlugins,提供對物理模型的API
  2. SensorPlugins,提供對感測器的API
  3. VisualPlugins,提供對視覺渲染的API

xacro

XML Macros,中文翻譯為XML巨集,簡單來說就是一個讓xml檔的撰寫能更簡短且方便讀取之功能。

指令

xacro ej_robot.urdf.xacro > ej_robot.urdf

撰寫

拿我們的差速小車舉例,左右後輪的尺寸重量是一樣的,這樣URDF寫起來有很的重複的地方,今天突然要改尺寸的話,就要每的地方都改一次,還有可能會漏掉...xacro方便之處就是可以設置變數!

    <xacro:property name="base_length" value="0.6" />
    <xacro:property name="base_width" value="0.4" />
    <xacro:property name="base_height" value="0.2" />
    <xacro:property name="wheel_radius" value="0.1" />
    <xacro:property name="wheel_length" value="0.05" />

替代成

        <link name="right_wheel_link">
            <visual>
                <geometry>
                    <cylinder radius="${wheel_radius}" length="${wheel_length}" />
                </geometry>
                <origin xyz="0 0 0" rpy="${pi / 2.0} 0 0" />
                <material name="grey" />
            </visual>
            <collision>
                <geometry>
                    <cylinder radius="${wheel_radius}" length="${wheel_length}" />
                </geometry>
                <origin xyz="0 0 0" rpy="${pi / 2.0} 0 0" />
            </collision>

        </link>       

也可以寫函式或include檔案~

    <xacro:macro name="cylinder_inertia" params="m r h xyz rpy">
        <inertial>
            <origin xyz="${xyz}" rpy="${rpy}" />
            <mass value="${m}" />
            <inertia ixx="${(m/12) * (3*r*r + h*h)}" ixy="0" ixz="0"
                     iyy="${(m/12) * (3*r*r + h*h)}" iyz="0"
                     izz="${(m/2) * (r*r)}" />
        </inertial>
    </xacro:macro>
<xacro:include filename="parameter.xacro" />

URDF之旅完

大致上介紹到這裡,差速小車比較不容易失敗,可以自己做一台來玩玩~


上一篇
【AMR_Day24】來用URDF刻一台車—物理特性
下一篇
【AMR_Day26】Gazebo雜談
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言