ROS学习——URDF机器人建模

ROS学习——URDF机器人建模

  • 什么是URDF
  • URDF机器人模型的内容
  • URDF机器人模型的标签
  • 一、创建URDF功能包
    • 创建URDF模型
      • step 1 使用圆柱体创建一个车体模型
      • step 2 创建左侧车轮
      • step 3 创建右侧车轮
      • step 4 创建前后支撑轮
      • step 5 添加传感器摄像头
      • step 6 添加传感器激光雷达
      • step 7 加入Kinect

什么是URDF

  • Unified Robot Description Format,统一机器人描述格式
  • ROS中一个非常重要的机器人模型描述格式
  • 可以解析URDF文件中使用XML格式描述的机器人模型
  • ROS同时也提供URDF文件的C++解析器

URDF机器人模型的内容

连杆 link

关节 joint

运动学参数 axis

动力学参数 dynamics

可视化模型 visual

碰撞检测模型 collision

URDF机器人模型的标签

①link标签

描述机器人某个刚体部分的外观和物理属性;

尺寸、颜色、形状、惯性矩阵、碰撞参数等

xml格式的描述

<link name="">
<!-- 描述机器人link部分的外观参数, 尺寸、颜色、形状等的外观信息 -->
	<inertial>......</inertial>
	<!-- 描述link的惯性参数,主要用到机器人动力学的运算部分 -->
	<visual>......</visual>
	<!-- 描述link的碰撞属性 -->
	<collision>......</collision>
</link>

②joint标签

描述机器人关节的运动学和动力学属性;

包括关节运动的位置和速度限制;

根据关节运动形式,可以将起分为六种类型。

关节类型 描述
continuous 旋转关节,可以围绕单轴无限旋转
revolute 旋转关节,类似于continuous,但是有旋转的角度极限
prismatic 滑动关节,沿某一轴线移动的关节,带有位置极限
planar 平面关节,允许在平面正交方向上平移或者旋转
floating 浮动关节,允许进行平移、旋转运动
fixed 固定关节,不允许运动的特殊关节

xml描述格式

<joint name="" type="">
	<parent link="parent_link"/>
	<child link="child_link"/>
	<!--关节的参考位置,用来校准关节的绝对位置-->
	<calibration ....../>
	<!--描述关节的物理属性,例如物理静摩擦力-->
	<dynamics damping ....../>
	<!--描述运动的一些极限值,包括关节运动的上下限位置,速度限制-->
	<limit effort ....../>
	......
</joint>

③robot标签

完整机器人模型的最顶层标签

link和joint标签都必须包含在robot标签内

xml格式描述

<robot name="name of the robot">
	<link>......</link>
	<link>......</link>
	<joint>......</joint>
	<joint>......</joint>
</robot>

一、创建URDF功能包

1、创建一个机器人建模的功能包

cd ~/catkin_ws/src
catkin_create_pkg mbot_description urdf xacro

2、创建机器人建模的功能包的文件结构

cd ~/catkin_Ws/src/mbot_description
mkdir urdf	//存放机器人模型的URDF或xacro文件
mkdir meshes //放置URDF中引用的模型渲染文件
mkdir launch //保存相关启动文件
mkdir config //保存rviz的配置文件

ROS学习——URDF机器人建模_第1张图片

编辑launch启动文件

cd launch(上面我们说到了launch目录是保存相关启动文件的;下面的URDF相关文件我们将放入URDF目录中)
sudo gedit display_mbot_base_urdf.launch

display_mbot_base_urdf.launch

<launch>
   <!-- 加载的参数名字叫robot_description,具体内容是urdf相关模型的路径 -->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.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可视化界面,保存每次打开之后的相关插件,保存到config文件夹下面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>

joint_state_publisher:发布每个joint(除fixed类型)的状态,而且可以通过UI界面对joint进行控制

robot_state_publisher:将机器人各个links、joints之间的关系,通过TF的形式,整理成三位姿态信息发布

创建URDF模型

step 1 使用圆柱体创建一个车体模型

cd ..
cd urdf
sudo gedit mbot_base.urdf

mbot_base.urdf

<?xml version="1.0" ?>
<robot name="mbot">
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <!-- link坐标位置,放在最中央 ,xyz单位是米,rpy单位是弧度-->
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <!-- 机器人的外观效果,使用圆柱体,高0.16,半径0.20 -->
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
             <!--  通过rgba来描述颜色,颜色命名为yellow,a为1是不透明-->
        </visual>
        <!--visual指的是一些物理属性的标签 -->
    </link>



</robot>


查看显示的效果

[joint_state_publisher-2] process has died [pid 3570, exit code 1, cmd /opt/ros/

——删除掉多余的空格和注释

Could not find the GUI, install the ‘joint_state_publisher_gui’ package

安装sudo apt-get install ros-melodic-joint-state-publisher-gui

roslaunch mbot_description display_mbot_base_urdf.launch

ROS学习——URDF机器人建模_第2张图片

step 2 创建左侧车轮

sudo gedit mbot_base.urdf

代码如下

    <joint name="left_wheel_joint" type="continuous">
    <!--   joint名字为left_wheel_joint,属性为continuous,即无限旋转-->
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <!--  坐标位置,在base_link基础上,Y偏移0.19,z偏移-0.05-->
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <!--  主关节:base_link,上面的圆柱形车体-->
        <!--  子关节:left_wheel_link,左轮-->
        <!--  主关节最后是一个,本代码是base_link-->
        <axis xyz="0 1 0"/>
        <!--left_wheel_link绕某一个轴做旋转,指定为Y轴  -->
    </joint>
     <!--joint用来连接两个link-->
    <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>
  <!--左轮信息-->

将上述代码添加到该文件的空白位置

运行程序查看效果

ROS学习——URDF机器人建模_第3张图片

step 3 创建右侧车轮

在以上文件中添加内容

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
        <!--  坐标位置,在base_link基础上,Y偏移-0.19,z偏移-0.05,与左轮正好相反-->
        <parent link="base_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>

运行程序查看效果

ROS学习——URDF机器人建模_第4张图片

step 4 创建前后支撑轮

添加内容

    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0 -0.095" 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" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
                  <!--用圆形轮子代替  -->
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="back_caster_joint" type="continuous">
        <origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="back_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>


运行程序查看效果

ROS学习——URDF机器人建模_第5张图片

至此模型的

step 5 添加传感器摄像头

cd urdf
sudo gedit mbot_with_camera.urdf
cd launch
sudo gedit display_mbot_with_camera_urdf.launch

mbot_with_camera.urdf




    
        
            
            
                
            
            
                
            
        
    

    
        
        
        
        
    

    
        
            
            
                
            
            
                
            
        
    

    
        
        
        
        
    

    
        
            
            
                
            
            
                
            
        
    

    
        
        
        
        
    

    
        
            
            
                
            
            
                
            
        
    

    
        
        
        
        
    

    
        
            
            
                
            
            
                
            
        
    
	
    
        
            
            
            
                
                   
            
            
                
            
        
    

    
        
        
        
    


display_mbot_with_camera_urdf.launch文件与display_mbot_base_urdf.launch文件内容相似

(其中的textfile中内容略微不同,可以前后对比下)


   
	
	
	
	
	
	
	
	
	

运行查看效果

ROS学习——URDF机器人建模_第6张图片

step 6 添加传感器激光雷达

cd urdf
sudo gedit mbot_with_laser.urdf
cd launch
sudo gedit display_mbot_with_laser_urdf.launch

mbot_with_laser.urdf(文件其他内容与上述文件内容一致)

    <!--激光雷达配置内容-->
    <link name="laser_link">
		<visual>
			<origin xyz=" 0 0 0 " rpy="0 0 0" />
			<geometry>
				<cylinder length="0.05" radius="0.05"/>
			</geometry>
			<material name="black"/>
		</visual>
    </link>
    <joint name="laser_joint" type="fixed">
        <origin xyz="0 0 0.105" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="laser_link"/>
    </joint>

display_mbot_with_laser_urdf.launch与上同理,只需要更改textfile中的内容即可

ROS学习——URDF机器人建模_第7张图片

step 7 加入Kinect

cd urdf
sudo gedit mbot_with_kinect.urdf
cd launch
sudo gedit display_mbot_with_kinect_urdf.launch

mbot_with_kinect_urdf(与上同理)

    <!--Kinect配置-->
    <link name="kinect_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 1.5708"/>
            <geometry>
                <mesh filename="package://mbot_description/meshes/kinect.dae" />
                 <!--直接加载Kinect的外观纹理描述文件-->
            </geometry>
        </visual>
    </link>
    <joint name="laser_joint" type="fixed">
        <origin xyz="0.15 0 0.11" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="kinect_link"/>
    </joint>

当我们安装完了以上的传感器后就可以在URDF目录下运行

urdf_to_graphiz mbot_with_camera.urdf 

如果运行不上,就按照他的提示安装哪个工具包就行,我们就可以通过这个指令看到URDF模型的结构

ROS学习——URDF机器人建模_第8张图片

你可能感兴趣的:(学习,linux,xml,java)