前言
此篇博客记录ROS实验课二的内容,基于教材《ROS机器人开发技术基础》。
16.04的Ubuntu版本,7.16.1的gazebo版本,ROS版本为kinetic。
老师的本意是我们逐个学习urdf建模与gazebo控制,熟悉整个流程,在提供的教学包的基础上做出自己的改进。在命令行输入以下指令下载教学包:
git clone https://github.com/ccqjcj/ROS-Academy-for-Beginners.git
记得在工作空间目录 ~/catkin_ws/ 目录下运行指令,安装依赖。
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
此条指令可能无法一次性解决依赖的问题。笔者后面很笨地一个一个装,如果有更好的方法,欢迎留言。
本文假设各位都已成功安装教学包。且安装了与ubuntu版本相适配的gazebo版本。
此处记录速通的方法,没有所谓的技术改进。
简单流程
1、ArbotiX + Rviz
在你的工作空间,即 ~/catkin_ws/ 目录下运行该指令,打开第一个仿真环境。在运行launch文件之前,别忘记刷新环境。
然后,输入以下指令,会有第一个仿真环境。
roslaunch myrobot_description arbotix_myrobot_with_kinect.launch
我们讲解一下这条指令的意思。roslaunch 表示启动当前工作空间下ros功能包中的launch文件。
myrobot_description 是一个功能包,包中有launch文件夹,urdf文件夹等等。在launch文件夹中存放着 myrobot_description功能包中的launch文件——我没见过太多的例子,推测这是一种文件夹的管理方式,清晰直观。
arbotix_myrobot_with_kinect.launch 是launch文件夹的名字,最后的 .launch 是拓展名。
所以,这条指令的意思是, 启动当前工作空间下 myrobot_description 功能包中的 arbotix_myrobot_with_kinect.launch 文件。
如果报错,一般有两种可能:
1、你没有这个功能包,那就自己重新下载,或者干脆写一个。
2、你没有刷新环境,此处给出关于刷新环境的参考博客,建议参考博客中的第二种方法,一劳永逸。
接着,输入第二条指令控制机器人运动:
roslaunch myrobot_teleop myrobot_teleop.launch
指令的意思和上面的一样。只要在ROS工作空间下,只要遵循着这样的格式,那么它的意思你应该能够明确地得出。
如此,成功的话,会有类似效果。你可以通过在键盘上按下 u、i 等字母控制机器人的运动,终端的英文提示信息会告诉你更详细的内容。
2、ros_control + gazebo
同样,在工作空间下,输入指令便能打开gazebo
roslaunch myrobot_gazebo view_myrobot_with_camera_gazebo.launch
再输入指令,查看当前摄像头传回的图像。
rqt_image_view
此条指令在任何目录下都使用,但得先运行一个ROS节点。顺利的话,结果如下:
遇到的问题
当然,我在这些过程中遇到了问题,成功启动第一份launch文件,我得到的是一个类似幽灵的、白色的轮廓,并没有具体的几何图形。这可能是因为你没有安装ArbotiX功能包。
我通过输入以下指令解决:
sudo apt-get install ros-kinetic-arbotix-*
这条指令相信你很熟悉,不妨再讲一遍
sudo 用root用户的权限 apt-get install , linux操作系统中常用的下载指令; ros-kinetic-arbotix-*,
下载的内容是ros操作系统中 kinetic版本下的arbotix中的全部内容。此处的 * 是代指的意思。我可以再给你一个例子:
mv *.txt /home 将当前目录下所有的txt文件移动到/home目录下。
而在尝试启动第二份launch文件时,gazebo显示preparing your work,加载很长时间。原因是 ~/.gazebo文件中的model文件夹内缺失必要的模型,给出解决的参考链接:
【踩坑记录】Gazebo启动慢,画面卡“Preparing your world”_gazebo卡在启动界面-CSDN博客
summary
以上,便是此次实验的记录了。只看操作方法,不考虑原理的的话,流程很快,可以速通。但若想从零开始,还是有一定的挑战性。
1、需要在urdf文件中描述机器人的几何特性,连杆间的连接情况,运动学、动力学特征等等。你也可以用xacro文件简化urdf模型,它更精简,支持代码复用,在大型工程中更受欢迎。
2、你需要一个launch文件启动结点。
3、通常情况下需要一个.yaml配置文件为urdf文件提供具体的参数。——与之相对,你可以硬编码(hard coding),即在urdf文件中直接对惯性、质量等标签赋值。这种方法在单个简单项目中当然无可厚非,能够胜任任务。但在大型文件或需要反复更改测试不同参数模型情况时,很是费力。所以我们一般都提倡有这么一个配置文件,它的作用就是传入参数。
4、想要在gazebo包中仿真,就需要在urdf文件中写入gaebo插件。格式遵从urdf文件中其他标签的格式。
5、当然,在完成上述步骤后,你也许能够成功运行并达到期望的效果。而更多数情况下,你可能会遇到各种错误,然后一步一步定位,返回修改。在多次经历了这样的过程后,你的功能包成功启动。那么,恭喜你。
最后,如前所述,这篇博客仅仅作为记录。感兴趣的话,可以自己查看功能包中的内容。