0.前言


ros是机器人操作系统,其开发的初衷是用于单机器人,教学研究等领域。但是目前市面上有很多基于ros的产品,甚至nasa基于ros的系统都部署到太空了。ros的功能强大,有很多别人开发好的包可以使用,避免了重复造轮子。

我一直认为学习某一项技能需要有实际的使用环境,这样才能学的更快。以前偶然间了解到了ros,看介绍觉得功能强大,于是想学一学。但是由于没有实际的项目要做,我对ros的了解也只停留在小海龟的阶段。但是现在有一个要用到ros的项目,用来做飞行器的编队控制,那这是一个学习ros的好机会。
ros2版本也已经发布,性能上据说提高了不少,支持实时,嵌入式系统,不再需要主节点等。但是由于ros发展了十多年,在接下来几年ros2还不会完全取代ros。

1.ros安装


目前ros最新版是melodic,用在Ubuntu18.04版本。官网的建议安装的是kinetic版本,需要的系统是Ubuntu16.04。我这里安装的是lunar版本也可以用在Ubuntu16.04系统上,它比kinetic多了一些新特性,其他与编译相关的没有变化。
按照官网的教程,顺序执行命令即可安装。
http://wiki.ros.org/lunar/Installation/Ubuntu
<http://wiki.ros.org/lunar/Installation/Ubuntu>

安装完成后要测试是否安装正确,可以在不同的终端分别运行以下命令:
roscore rosrun turtlesim turtlesim_node
如果能看到一个界面中间有一只乌龟,那说明安装成功了。

![这里写图片描述](https://img-blog.csdn.net/20180326102946308?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lhbXFpYW5yZW56aGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.ros开发IDE安装(roboware studio)


ros开发如果不用IED,没有代码的自动补全功能,在写一些结构体,类,ros自带函数的时候需要翻到定义这些的地方去看,大部分时间都浪费在切换界面和搜索上了,而且一些语法错误也只能在编译的时候看到。


笔者经过了解,发现ros有用界面开发的。可以在qt上安装插件,也可以安装独立软件。这里推荐一个笔者现在在用的,并且感觉使用很方便的ros开发IDE软件roboware
studio
下载地址:http://www.roboware.me/#/home <http://www.roboware.me/#/home>
这个roboware其实是一套软件,有designer,studio,viewer。在官网可以直接下载软件使用说明。
下载roboware studio,下载完成后是deb的包。在安装之前请确保ros安装成功,然后在安装这个软件时它自动找到ros路径。

3.ros例程的开发

csdn上也有很多博客说明怎么新建ros工程,但是笔者发现他们都不能成功,或许是软件版本的问题。
搜索roboware,打开主界面,在主界面中点击“new workspace”新建工作空间。






选择路径和输入工作空间名称






确认后





在src上右击,选择“Add ROS Package”输入包的名称mypackage
在mypackage上右击,选择“Edit ROS Package Dependencies”,输入“roscpp
std_msgs”,代表这个包依赖roscpp和std_msgs。

在mypackage上右击,选择“Add C++
Node”输入mysubnode,回车。这时src下面出现两个cpp文件,一个mysubnode_pub,一个mysubnode_sub(如果没有出现,可以重新启动roboware)。需要的是sub的文件,所以需要把mysubnode_pub删除掉。
重复上一步,新建mypubnode节点。然后把mypubnode_sub删除掉。
这时的目录结构:





然后点击左上角小锤子右边的下拉菜单,选择Debug。点击绿色小锤子进行build。构建完成后界面。





选择terminal,右上角的加号可以新建终端,这里需要3个终端,






分别运行:
roscore rosrun mypackage mypubnode_pub
![这里写图片描述](https://img-blog.csdn.net/20180326103612245?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lhbXFpYW5yZW56aGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
rosrun mypackage mysubnode_sub
![这里写图片描述](https://img-blog.csdn.net/20180326103627594?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lhbXFpYW5yZW56aGFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
如果提示“Error:package ‘mypackage’ not found”,需要在运行rosrun之前运行 source
devel/setpu.bash
4.在ros中添加新建自己的类

在mypackage上右击,选择“Add C++ Class”输入类名myclass,回车选择mysubnode_sub.
然后在mysubnode_sub.cpp中添加包含文件
#include "myclass.h"
这时候编译不会通过,会提示找不到myclass.h

解决方法是:
打开CMakeList.txt,把
########### ## Build ## ########### ## Specify additional locations of header
files ## Your package locations should be listed before other locations
include_directories( include ${catkin_INCLUDE_DIRS}# include #
${catkin_INCLUDE_DIRS} )
替换为
########### ## Build ## ########### ## Specify additional locations of header
files ## Your package locations should be listed before other locations
include_directories( include ${catkin_INCLUDE_DIRS} include/mypackage#
${catkin_INCLUDE_DIRS} )
编译通过后就可以写自己需要功能的类的实现了。

5.总结


总体来说,roboware还是比较好用的,新建文件,添加依赖等界面上操作位,对应的cmake文件会自动改变,可以避免自己配置出现的低级错误。但是在使用过程中发现这个软件还有一些bug。有些文件新建后不能更新到工程目录下,需要重新启动才可以。类的添加后cmake文件中与头文件相关的内容不会自动更新,需要手动更改等。