工作环境:ubuntu+ros
需要用到的package:
rviz,urdf,joint_state_publisher
运行dpkg -l
看看是否装齐了
学习之前需要掌握的技能:
- 新建工作空间
- 新建package
- 安装package
本文我们教大家学习怎么用urdf建如下的两自由度机器人模型
1.什么是urdf以及xacro?
urdf(unified robot discription format)统一机器人描述格式,顾名思义是用来描述定义机器人的,告诉电脑哪个是link哪个是joint以及模型的几何信息,xacro你则可以把它当作简化的urdf。
2.准备工作
2.1新建工作空间
我们新建一个simulation_ws工作空间专门用来存放学习仿真时相关的package(也就是我所理解的项目)
mkdir -p ~/simulation_ws/src //把基本文件夹新建好
cd ~/simulation_ws/
catkin_make //编译
source devel/setup.bash //添加到ros环境
2.2新建package(也就是所谓的project)
下面的语句逐条执行
cd ~/simulation_ws/src
catkin_create_pkg RRrobot_description urdf
3.新建并编辑我们的模型代码
3.1新建xacro模型文件
mkdir RRrobot_description/urdf
cd RRrobot_description/urdf/
touch RRrobot.xacro
去到目录打开RRrobot.xacro文件并添加模型代码,urdf语法看这里
<?xml version="1.0"?>
<robot name="moonknight" xmlns:xaro="http://www.ros.org/wiki/xacro">
<!--Base part-->
<link name="baselink">
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<cylinder radius="0.1" length="0.08"/>
</geometry>
</visual>
</link>
<joint name="baselink_link1" type="revolute">
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="-1.57" upper="1.57" velocity="0.3"/>
<origin rpy = "0 0 0" xyz="0 0 0"/>
<parent link="baselink"/>
<child link="link1"/>
</joint>
<!--Arm part-->
<link name="link1">
<visual>
<origin rpy="0 0 0" xyz="0 0.4 0.08"/>
<geometry>
<box size="0.06 0.8 0.06"/>
</geometry>
</visual>
</link>
<joint name="link1_link2" type="revolute">
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="-3.14" upper="3.14" velocity="0.5"/>
<origin rpy = "0 0 1.57" xyz="0 0.8 0"/>
<parent link="link1"/>
<child link="link2"/>
</joint>
<link name="link2">
<visual>
<origin rpy="0 0 0" xyz="0 0.4 0.08"/>
<geometry>
<box size="0.06 0.8 0.06"/>
</geometry>
</visual>
</link>
<!--End effector part-->
<joint name="link2_link3" type="prismatic">
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="-0.1" upper="0.1" velocity="0.3"/>
<origin rpy = "0 0 0" xyz="0 0.8 0"/>
<parent link="link2"/>
<child link="link3"/>
</joint>
<link name="link3">
<visual>
<origin rpy="0 0 0" xyz="0 0 0.08"/>
<geometry>
<box size="0.06 0.06 0.2"/>
</geometry>
</visual>
</link>
</robot>
注意:urdf文件里千万不要有中文注释,不然rviz会报错,类似这种
UnicodeEncodeError: 'ascii' codec can't encode character u'\u884c' in position 530: ordinal not in range(128)
至此建模的工作其实算是完成了,但是在正式使用这个模型之前我们需要切切实实的看一下我们第一次建出来的模型长什么样子以及对应的关节能不能动。接下来我们来看一下我们的模型。
4.新建并编辑launch文件
要看urdf模型需要用到rviz,要动关节需要用到joint_state_publisher,因此我们通过launch来一次性管理这两个节点。launch wiki
4.1 首先新建launch文件夹和launch文件
mkdir ~/simulation_ws/src/moonknight_description/launch
cd src/RRrobot_description/launch/
touch rviz.launch
4.2 去到目录打开launch文件并添加如下代码
<launch>
<!-- 定义了一个叫"robot_description"的parameter存放在param server
且这个parameter是后面commond的执行结果形成的string
这个commond的意思是找到xacro包并执行xacro程序把如下地址的xacro转成urdf文件-->
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find RRrobot_description)/urdf/RRrobot.xacro"/>
<!-- 定义了一个节点叫"robot_state_publisher",这个节点执行"robot_state_publisher"包里的
"state_publisher"程序,作用是发布robot状态信息-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
<!-- 定义了一个节点叫"rviz",这个节点执行"riz"包里的"rviz"程序,作用是显示机器人模型-->
<node name="rviz" pkg="rviz" type="rviz"/>
<!-- 定义了一个节点叫"joint_state_publisher",这个节点执行"joint_state_publisher"包里的"joint_state_publisher"程序,作用是发布关节信息。并且定义了值为True的局部变量use_gui-->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
<param name="use_gui" value="True"/>
</node>
</launch>
5.编译运行来查看我们建好的模型
cd ~/simulation_ws/
catkin_make
source devel/setup.bash
roslaunch RRrobot_description rviz.launch
第一次运行时rviz并不会正常显示模型,需要设置一些配置
- 首先去到Display——Fixed Frame选则baselink
- 然后点击Add添加rviz——RobotModel
- 再根据自己的喜好设置要显示什么信息
如果不保存config,以后重新打开rviz都要重新设置一遍,因此可以点击file——save config as保存到launch文件夹里命名为config.rviz。再打开之前的launch file ,把第9行改成
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find RRrobot_description)/launch/config.rviz"/>
这样以后都不用重新配置了。
以下是rviz结果(urdf文件有所更新但是图没有更新,加了末端执行器,后面的图片跟真实结果会有点不一样,不过大致上差不多)
可以调整一下joint大小验证模型是否正确
结果长这样
大功告成。