ROS-URDF机器人建模

一.什么是URDF机器人建模

  • Unified Robot Description Format:统一机器人描述格式
  • 使用XML格式描述机器人模型
  • 由n个link连杆和n个joint关节描述

二. Link和Joint详解

link内容
  • 描述机器人某个刚体部分的外观和物理属性
  • 包含尺寸、颜色、外观、形状、惯性矩阵、碰撞参数等
  • 由三个子标签去描述
  1. <visual>:描述外观参数
  2. <inertial>:描述惯性参数
  3. <collision>:描述碰撞参数
  • 主要形式
<link name="<link name>">
	<visual>......</visual>
	<inertial>......</inertial>
	<collision>......</collision>
</link>
joint内容
  • 描述机器人运动关节的运动学和动力学属性
  • 关节运动的位置和速度限制
  • 六种关节类型
关节类型描述
continuous旋转环节,围绕单轴无限旋转
revolute旋转关节,围绕单轴有角度极限旋转
prismatic滑动关节,沿某一轴线有位置限制的移动
planar平面关节,可以在平面正交方向进行平移或者旋转
floating浮动关节,可以平移旋转
fixed固定关节,不允许运动的特殊关节
  • 由五个子标签去描述
  1. <calibration>:关节的参考位置,是用来矫正关节的绝对位置的
  2. <dynamics>:关节的物理属性,如阻尼值,物理摩擦力,在动力学仿真中用到
  3. <limit>:描述运动的极限值,包括关节的上下限位置,速度限制,力矩限制
  4. <mimic>描述该关节与已有关节的信息
  5. <safey_controller>:描述安全控制参数
  • 主要形式
<joint name="<joint name>" type="<joint type>">
	<parent link="<parent_link>">
	<child link="<child_link>">
	<calibration....../>
	<dynamics damping....../>
	<linit effort......>
</joint>

三. 创建一个简单的车架Link模型

  • 创建功能包
    在catkin_ws /src下右键打开终端:
catkin_create_pkg mbot_description urdf xacro
  • 创建相关文件夹
    进入mbot_description创建四个文件夹:
cd mbot_description
mkdir urdf
mkdir meshes
mkdir launch
mkdir config
文件夹描述
urdf存放机器人的URDF或者XACRO文件
meshes放置URDF引用的模型渲染文件
launch保存启动文件
config保存rviz的配置文件
  • 创建一个urdf文件
    进入urdf文件夹:
cd urdf

创建模型文件:

touch mbot.urdf

添加代码:

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

<!-- color -->
     <material name="Blank">
     	   <color rgba="0 0 0 1"/>
     </material>
     
     <material name="White">
     	   <color rgba="1 1 1 0.95"/>
     </material>
     
     <material name="Blue">
     	   <color rgba="0 0 1 1"/>
     </material>
     
     <material name="Yellow">
     	   <color rgba="1 0.4 0 1"/>
     </material>

<!-- base_car -->
     <link name="base_link">
           <visual>
           	 <origin xyz="0 0 0" rpy="0 0 0"/>
           	 <geometry>
           	 	<cylinder length="0.16" radius="0.20"/>
           	 </geometry>
           	 <material name="Yellow"/>
           </visual>
     </link>


</robot>
  • 创建一个launch文件
    进入launch文件夹:
cd launch

创建模型文件:

touch mbot_launch.launch

添加代码:

<launch>
	<!-- 设置机器人模型路径参数 -->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot.urdf" />

	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • 进行编译
    回到catkin_ws根目录的终端进行编译:
catkin_make

运行启动文件:

roslaunch mbot_desription mbot_launch.launch

然后就会出现rviz的界面,如果bash出现红色错误,返回去看看urdf文件和launch文件有没有语句错误

  • 使用rviz软件
    点击Add
    在这里插入图片描述
    选择RobotModel,双击
    在这里插入图片描述
    会有错误信息,是因为坐标问题
    在这里插入图片描述
    把坐标系由map改成定义的base_link即可
    在这里插入图片描述
    然后可以点击file里边的保存,保存到config文件夹中即可(mobot_description下的config)

四 . 创建一个简单的车轮模型

在urdf文件中添加:

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

<!-- /    COLOR    / -->
    <material name="Black">
        <color rgba="0 0 0 1"/>
    </material>
    <material name="White">
        <color rgba="1 1 1 0.95"/>
    </material>
    <material name="Blue">
        <color rgba="0 0 1 1"/>
    </material>
    <material name="Yellow">
        <color rgba="1 0.4 0 1"/>
    </material>

<!-- /    BASE    / -->
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <material name="Yellow"/>
        </visual>
    </link>

<!-- /    WHEEL    / -->

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

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_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"/>
        </visual>
    </link>

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

<!-- /    CASTER    / -->
    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            </geometry>
            <material name="Black"/>
        </visual>
    </link>

    <joint name="front_caster_joint" type="fixed">
        <origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
    </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"/>
        </visual>
    </link>

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

</robot>

五 . 创建一个简激光雷达模型

  • 创建一个urdf文件
    进入urdf文件夹:
cd urdf

创建模型文件:

touch mbot_rplidar.urdf

添加代码:

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

<!-- /    COLOR    / -->
    <material name="Black">
        <color rgba="0 0 0 1"/>
    </material>
    <material name="White">
        <color rgba="1 1 1 0.95"/>
    </material>
    <material name="Blue">
        <color rgba="0 0 1 1"/>
    </material>
    <material name="Yellow">
        <color rgba="1 0.4 0 1"/>
    </material>

<!-- /    BASE    / -->
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <material name="Yellow"/>
        </visual>
    </link>

<!-- /    WHEEL    / -->

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

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_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"/>
        </visual>
    </link>

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

<!-- /    CASTER    / -->
    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            </geometry>
            <material name="Black"/>
        </visual>
    </link>

    <joint name="front_caster_joint" type="fixed">
        <origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
    </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"/>
        </visual>
    </link>

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

<!-- /    LASER    / -->
    <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>

</robot>
  • 创建一个launch文件
    进入launch文件夹:
cd launch

创建模型文件:

touch mbot_rplidar_launch.launch

添加代码:

<launch>
	<!-- 设置机器人模型路径参数 -->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_rplidar.urdf" />

	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值