古月居ROS教程笔记整理
一、创建机器人功能描述包
在工作空间下创建功能包mrobot_description
catkin_create_pkg mrobot_description urdf xacro
记得编译工作空间,设置环境变量
二、创建机器人URDF模型
模型文件
mrobot_description/urdf/mrobot_chassis.urdf:
<?xml version="1.0" ?>
<robot name="mrobot_chassis">
#声明该文件使用XML描述,
#使用<robot>根标签定义一个机器人模型,模型的名称是“mrobot_chassis”。
#描述机器人的底盘link
<link name="base_link">
<visual> #定义底盘的外观属性
<origin xyz="0 0 0" rpy="0 0 0" /> #设置起点坐标为界面的中心坐标
<geometry> #几何标签
<cylinder length="0.005" radius="0.13"/> #定义为圆柱且半径和高分别为
</geometry>
<material name="yellow"> #设置机器人底盘的颜色
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
#定义第一个关节joint,连接机器人底盘和左边驱动电机
<joint name="base_left_motor_joint" type="fixed"> #joint名字和类型
<origin xyz="-0.055 0.075 0" rpy="0 0 0" /> #起点设置在需要安装电机的底盘位置。
<parent link="base_link"/>
<child link="left_motor" />
</joint>
#描述了左侧电机的模型
<link name="left_motor">
<visual> #定义底盘的外观属性
<origin xyz="0 0 0" rpy="1.5707 0 0" /> #设置起点坐标
#电机的坐标位置是相对于joint计算的,由于这个joint的坐标上述确定过,所以此处电机模
#型就放置于原点
#由于圆柱体默认是垂直地面创建的,需要把圆柱体围绕x轴旋转90°(使用弧度约为1.5707)
<geometry>
<cylinder radius="0.02" length = "0.08"/> #定义为圆柱半径和高
</geometry>
<material name="gray">
<color rgba="0.75 0.75 0.75 1"/> #设置颜色
</material>
</visual>
</link>
#定义电机和轮子之间的joint,类型是continuous,可以绕着一个轴旋转
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.0485 0" rpy="0 0 0"/> #将起点设置到安装轮子的位置,即电机的一端
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/> #定义该joint的旋转轴是正y轴,轮子在运动时就会围绕y轴旋转
</joint>
#描述了左侧轮子的模型
<link name="left_wheel_link">
<visual> #定义底盘的外观属性
<origin xyz="0 0 0" rpy="1.5707 0 0" /> #设置起点并旋转
<geometry>
<cylinder radius="0.033" length = "0.017"/> #定义圆柱半径和高
</geometry>
<material name="white"> #设置颜色
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
#下同左侧对称
<joint name="base_right_motor_joint" type="fixed">
<origin xyz="-0.055 -0.075 0" rpy="0 0 0" />
<parent link="base_link"/>
<child link="right_motor" />
</joint>
<link name="right_motor">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.02" length = "0.08" />
</geometry> <material name="gray">
<color rgba="0.75 0.75 0.75 1"/>
</material>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.0485 0" rpy="0 0 0"/>
<parent link="right_motor"/>
<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.033" length = "0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="front_castor_joint" type="fixed">
<origin xyz="0.1135 0 -0.0165" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_castor_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="front_castor_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
<sphere radius="0.0165" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
</robot>
URDF
提供了一些命令行工具,可以帮助我们检查、梳理模型文件
sudo apt-get install liburdfdom-tools
然后使用
check_urdf
命令对
mrobot_chassis.urdf
文件进行检查(在该文件所在文件夹)
check_urdf mrobot_chassis.urdf
还可以使用
urdf_to_graphiz
命令查看
URDF
模型的整体结构:
$ urdf_to_graphiz mrobot_chassis.urdf
三、在rviz中显示模型
在mrobot_description
功能包
launch
文件夹中已经创建
launch文件display_mrobot_chassis_urdf.launch
<launch>
<param name="robot_description" textfile="$(find mrobot_description)/urdf/mrobot_chassis.urdf" />
<!-- 设置GUI参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态(notic版本此处加上_gui) -->
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher" />
<!-- 运行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 mrobot_description)/config/mrobot_urdf.rviz" required="true" />
</launch>
运行launch文件
$ roslaunch mrobot_description display_mrobot_chassis_urdf.launch
弹出rviz窗口和轮子控制窗口
初步完成!