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

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

  • 课程内容
    • 1.URDF建模方法
    • 2.机器人建模功能包创建
    • 3.检查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模型文件如下:


<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>
                
            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>
                
            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>
                
            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>
                
            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>
                
            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" />

	
	<param name="use_gui" value="true"/>
	
	
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	
	<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

《ROS理论与实践》学习笔记(四)URDF机器人建模_第1张图片


结语

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

你可能感兴趣的:(ROS,linux)