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

安装完成后要测试是否安装正确,可以在不同的终端分别运行以下命令:

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
这个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文件中与头文件相关的内容不会自动更新,需要手动更改等。

Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐