ROS入门(五)——仿真机器人一(URDF+Rviz)
所用的学习链接:
【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程P229-251
【以上视频笔记见http://www.autolabor.com.cn/book/ROSTutorials/】
一、使用工具URDF用于创建机器人模型:以XML的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度。可被C++内置的解释器转换成可视化的机器人模型。
Gzebo用于搭建仿真环境:3D动态模拟器,显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
Rviz图形化显示传感器感知到的环境信息:ROS的三维可视化工具。以三维方式显示ROS消息,将数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD,PointCloudData),从相机获取的图像值等
官方文档:
https://wiki.ros.org/urdf
http://wiki.ros.org/rviz
http://gazebosim.org/tutorials?tut=ros_overview
使用建议:
如果非仿真环境,使用URDF结合Rviz直接显示感知的真实环境信息
如果是仿真环境,使用URDF结合Gazebo搭建仿真环境,并结合Rviz显示感知的虚拟环境信息
二、介绍1.URDF语法robot:作为根标签,所有的link和joint以及其他标签包含在robot标签内,在该标签内可以通过name属性设置机器人模型的名称link:描述机器人某个部件(也即刚体部分)的外观和物理属性,比如:机器人底座、轮子、激光雷达、摄像头...每一个部件都对应一个link,在link标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性#link子标签visual(属性name)--->描述外观(对应的数据是可视的)geometry设置连杆的形状标签1:box(盒状)属性:size=长(x)宽(y)高(z)标签2:cylinder(圆柱)属性:radius=半径length=高度标签3:sphere(球体)属性:radius=半径标签4:mesh(为连杆添加皮肤)属性:filename=资源路径(格式:package:////文件)origin设置偏移量与倾斜弧度属性1:xyz=x偏移y便宜z偏移属性2:rpy=x翻滚y俯仰z偏航(单位是弧度)metrial设置材料属性(颜色)属性:name标签:color属性:rgba=红绿蓝权重值与透明度(每个权重值以及透明度取值[0,1])collision--->连杆的碰撞属性Inertial--->连杆的惯性矩阵#案例joint:描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限。【各个组件之间需要使用关节连接,如机器人的手和身体、车轮和车体,关节的头和尾通常来说是两个组件的中心】#属性name--->为关节命名type--->关节运动形式continuous:旋转关节,可以绕单轴无限旋转revolute:旋转关节,类似于continues,但是有旋转角度限制prismatic:滑动关节,沿某一轴线移动的关节,有位置极限planer:平面关节,允许在平面正交方向上平移或旋转floating:浮动关节,允许进行平移、旋转运动fixed:固定关节,不允许运动的特殊关节#子标签parent(必需的)parentlink的名字是一个强制的属性:link:父级连杆的名字,是这个link在机器人结构树中的名字。child(必需的)【childlink的名字是一个强制的属性】link:子级连杆的名字,是这个link在机器人结构树中的名字。origin属性:xyz=各轴线上的偏移量rpy=各轴线上的偏移弧度。axis属性:xyz用于设置围绕哪个关节轴运动。#案例2.实验目标1.新建urdf文件,并与launch文件集成2.搭建一个极小的基底(基于该基底构造机器人,则机器人躯干不会嵌入地板)3.搭建底盘(底盘下有一个极小极小的伪基底,)4.在底盘上添加两个驱动轮5.在底盘上添加两个万向轮三、URDF创建机器人模型【.urdf文件】1.配置可参考ROS入门(三)——VSCode安装和运行(c/python)
(1)创造工作空间
#mkdir-p空间名称/src#必须得有srcmkdir-p7.19_demo1/srccd7.19_demo1catkin_make#启动code.(2)配置takes.json
打开后,ctrl+shift+b,点击catkin_make:build右边的齿轮,打开takes.json。【如果没有catkin_make:build就“配置生成任务...”→创建takes.json文件】以下代码内容替换原tak.json文件。
{//有关tasks.json格式的文档,请参见//https://go.microsoft.com/fwlink/?LinkId=733558"version":"2.0.0","tasks":[{"label":"catkin_make:debug",//代表提示的描述性信息"type":"shell",//可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行"command":"catkin_make",//这个是我们需要运行的命令"args":[],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”"group":{"kind":"build","isDefault":true},"presentation":{"reveal":"always"//可选always或者silence,代表是否输出信息},"problemMatcher":"$msCompile"}]}(3)创建文件夹和依赖
右键src--->createcatkinpackage→自定义packagename(例urdf_rviz)→dependencies:urdfxacro
(4)功能包
在新生成的urdf_rviz文件夹下,新建功能包文件夹urdf、launch、config
urdf文件夹下再新建文件夹urdf和xacro(后面会用到xacro)
(5)source配置
相当于配置环境变量,不然每次在一个新终端运行都要执行source命令
#sudogedit~/.bashrcgedit~/.bashrc#打开文件后拉到倒数第二行,添加一行#source~/工作空间路径/devel/setup.bashsource~/ROS/7.19_demo1/devel/setup.bash#执行命令source~/.bashrc 2.创建机器人模型(编辑urdf文件)在urdf/urdf文件夹下新建一个urdf文件【t1_car.urdf】,用于描述机器人结构,写入以下代码
四、launch启动RVIZ【.launch文件】1.创建launch文件在launch文件夹下创建一个launch文件,用于载入urdf文件和启动rviz【t1_car.launch】
2.运行(1)打开rviz
先进行ctrl+shift+b编译,编译后打开一个新终端,运行ros,再打开一个新终端,运行launch文件
#新终端1roscore#新终端2#source./devel/setup.bash#roslaunch包名文件名roslaunchurdf_rvizt1_car.launch(2)组件添加
①Fixedname标签改为base_footprint。运行成功将会出现rviz的软件界面,但是这里左侧会有一个报错,是因为参考坐标系不存在。将Fixedname改为前面urdf文件中所写的base_footprint
②左下角add→RobotModel、TF、Axis
RobotModel:用于显示机器人模型TF,各个组件的坐标系,TF参数种,Frame点开是完整的坐标内容,可根据需要关闭部分Axis是基底的坐标,机器人的根坐标③打开rviz的同时会有一个旋转窗口,可自行调试轮子转动,观察TF坐标的变化
(3)保存配置
①左上角File→SaveConfigAs→保存到工作空间下我们创建的config文件夹中(t1_car.rviz)
②保存完成后,在launch文件中修改一句话,使每次打开rviz时会导入该配置
#原句子##更新后#重新运行
roslaunchurdf_rvizt1_car.launch发现没有报错了,也自动加载了配置。以后在rviz中有调整也要及时保存
五、URDF工具1.安装工具sudoaptinstallliburdfdom-tools2.check_urdf语法检查右键urdf文件夹,打开一个新终端
#check_urdfurdf文件check_urdft1_car.urdf没有报错并输出了机器人结构
3.urdf_to_graphiz结构查看#将会生成一个pdf文件urdf_to_graphizt1_car.urdf#查看,显示连接关系和相关属性evincemycar.pdf