《ROS理论与实践》学习笔记URDF机器人建模

Posted Sakurazzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《ROS理论与实践》学习笔记URDF机器人建模相关的知识,希望对你有一定的参考价值。

在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第五讲:URDF机器人建模 。主要学习了ROS的URDF建模方法。


课程内容

1.URDF建模方法

  1. < link >
    描述机器人某个刚体部分的外观和物理属性
  2. < joint >
    描述两个link之间的关系,包括关节运动的位置和速度限制
关节类型描述
continuous旋转关节 ,可绕单轴无限旋转
rebolute旋转关节,有旋转角度极限
prismatic滑动关节,右位置极限
planar平面关节,允许在平面正交方向上平移或旋转
floating浮动关节,允许平移、旋转运动
fixed固定关节
  1. < robot >
    机器人模型顶层标签
    <robot name="xxx">
    	<link>  ... </link>
    	<link>  ... </link>
    	<joint> ... </joint>
    	<joint> ... </joint>
    </robot>
    

2.机器人建模功能包创建

$ catkin_create_pkg mybot_description urdf xacro
文件夹名称功能
urdf存放机器人模型的urdf或xacro文件
meshes放置urdf中引用的模型渲染文件
launch保存相关启动文件
config保存rviz的配置文件

3.检查urdf模型结构

$ urdf_to_graphiz mybot_base.urdf

本讲作业

创建一个自己的机器人模型

urdf模型文件如下:

<?xml version="1.0" ?>
<robot name="mybot">

    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.05" radius="0.20"/>
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>

    <joint name="left_motor_joint" type="fixed">
        <origin xyz="-0.1 0.11 0" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_motor_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_motor_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.04" length = "0.18"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.1025 0" rpy="0 0 0"/>
        <parent link="left_motor_link"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.06" length = "0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

        <joint name="right_motor_joint" type="fixed">
        <origin xyz="-0.1 -0.11 0" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_motor_link"/>
        <axis xyz="0 1 0"/>
    </joint>

        <link name="right_motor_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.04" length = "0.18"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.1025 0" rpy="0 0 0"/>
        <parent link="right_motor_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="right_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.06" length = "0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0 -0.025" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 -0.025" rpy="1.5707 0 0"/>
            <geometry>
                <cylinder radius="0.025" length = "0.01"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <link name="camera_link">
        <visual>
            <origin xyz=" 0 0 0 " rpy="0 0 0" />
            <geometry>
                <box size="0.03 0.04 0.04" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="camera_joint" type="fixed">
        <origin xyz="0.17 0 0.025" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="camera_link"/>
    </joint>

        <link name="kinect_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 1.5708"/>
            <geometry>
                <mesh filename="package://mybot_description/meshes/kinect.dae" />
            </geometry>
        </visual>
    </link>

    <joint name="kinect_joint" type="fixed">
        <origin xyz="0.11 0 0.06" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="kinect_link"/>
    </joint>
</robot>

launch文件代码如下:

<launch>
	<param name="robot_description" textfile="$(find mybot_description)/urdf/mybot_all.urdf" />

	<!-- 设置GUI参数,显示关节控制插件 -->
	<param name="use_gui" value="true"/>
	
	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mybot_description)/config/mybot_urdf.rviz" required="true" />
</launch>

运行效果:

$ roslaunch mybot_description display_mybot_all_urdf.launch

在这里插入图片描述


结语

本讲主要学习了urdf的建模方法,并完成了自己的机器人模型的建模。

以上是关于《ROS理论与实践》学习笔记URDF机器人建模的主要内容,如果未能解决你的问题,请参考以下文章

《ROS理论与实践》学习笔记机器人语音交互

《ROS理论与实践》学习笔记机器人语音交互

《ROS理论与实践》学习笔记机器人自主导航

《ROS理论与实践》学习笔记机器人自主导航

《ROS理论与实践》学习笔记机器人SLAM建图

《ROS理论与实践》学习笔记机器人SLAM建图