根据mooc上柴长坤老师的课程整理所得,由于在做项目不涉及到运动规划,所以后半部分相对简略,有需要的同学可以拿去,过几天会附上我所做项目的ROS例子。



1. 安装ROS

这部分跟着视频来就行,留意以下几个工具

rosdep 管理工具

rosinstall 独立分开的常用命令行工具

roboware IDE (可以省去很多工作,比如,cMakelist)

二进制包与源代码包

2 工作空间

2.1

重要!理解下图是理解整个ROS开发的基础。

catkin:ROS定制的编译构建系统,是对Cmake的扩展

catkin工作空间:组织和管理功能包的文件夹

catkin_make : 建立工作空间,编译      注意:要回到工作空间,要source刷新环境

src:源代码

build: cmake&catkin缓存和中间文件(了解)

devel:目标文件(了解)

rosbuild(早期编译系统,主流已经不再使用)

package:  catkin编译的基本单元,ROS软件的基本组织形式,一个可以对应多个可执行文件(节点)

CMakelists.txt:规定了catkin的编译规则,例如源文件,依赖项,目标文件

package.xml:定义package的属性 例如包名版本号等

manifext.xml(老版本)

代码文件: 脚本(shell,python) C++(头文件,源文件) 有时候src下边也可以放python  

自定义通信格式:消息(msg) 服务(srv) 动作(action)

launch以及配置文件(yaml)

常用指令:

 

2.2

小工具 tree

roscpp,rospy,std_msgs nav_masgs等依赖

.bashrc : 加socrce

metapackage:虚包,依赖了其他软件包,如navigationg,mobeit等

stack:(老版本)软件包集

3.1 通信架构(上)

master: 节点管理器,每个node启动都要注册,并且管理着Node的通信 利用roscore启动

node: ROS的进程,pkg里的可执行文件运行的实例 利用rosnode启动

roslaunch: 启动master和多个node

初学者改别人的就可以

3.2 实例演示

观察启动的node

键盘控制机器人行进

摄像头实时画面 

 3.3 通讯方式

 Topic:ROS中的异步通信方式 Node间通过publish-subscribe机制通信

Message:topic的数据类型,定义在.msg中,放在msg文件夹

有些类似结构体

常用命令

 3.4 操作演示

info很常用

RGB加深度信息可以合成

4 通信架构(下)

4.1 Service 服务

有时候topic可能会消耗大量资源(人体识别例子)

service : ROS中的同步通信方式,Node间可以通过request-reply方式通信

Client  <=> Service <=> Server

Topic VS Service

srv

service 通信的数据格式 定义在*.srv文件中,Srv不能嵌套srv

人体关节检测例子:

要修改: 

常用命令:

 

参数服务器:Parameter Server

存储各种参数的字典,可用命令行launch文件核node(API)读写

字典即是一种映射关系

 用命令行设置参数

 在launch里设置参数服务器(看红色部分)

4.3 示例演示

rossrv与rosservice不要搞混了

灯光例子,重力例子

4.4 action(动作)

升级版service,带有状态反馈的通信方式,通常用在长时间,可抢占的任务

action通信的数据格式定义在*.action中

上部分是洗碗机例子:

5 常用工具

用来仿真

 用来显示

六 client library

类似于API

roscpp跟rospy,roslisp

官网可以查用法

 nodehandle类

 nodehandle class

namespace(没有对象),不是类

获取node信息

  

以上了解,需要的时候查一下即可

6.2 topic_demo(重要)

 

 步骤详情:

 talker思路:初始化-句柄-创建pub-发布消息  (重要!)

listener 

 cmakelist,可以用IDE roboware

 以上部分很重要,是通用用法。

6.3 service_demo(重要)

定义handle funtion

client

6.4 param_demo

 

 

 

7 rospy 

Node相关:

 

 

 

7.3 topic-demo

 

 

要cmake头文件

 service——demo

 

8.1 TF&URDF

TF:TranForm

frame

tf树

robot - sim-demo

frame - link

不能有断裂的地方

broadcaster 维护frame之间的关系,node,发布坐标变换的关系,本质是个pubilsher

TF消息

transformstamped.msg

以上两个完全一样,用rostopic info /tf可以查询

C++的TF 

左右不同,左边只能c++里用

broadcast类

listener

python里的TF(简单)

 

Listener类

辅助功能:

 

常用工具:

urdf (统一定义机器人格式)

 link 部件 joint 两个link间的连接关系

9 SLAM(同步定位和建图)(不包括路径规划)

 

 

 

Karto SLAM

 

10 Navigation Stack

蓝色要自己提供

 

 

 costmap:栅格地图/代价地图

之前的map是全局的,costmap是用于导航的。

MapServer 提供地图

AMCL 定位

命令:

AMCL:蒙特卡洛自适应定位

 上边是纯粹里程计定位,下边是AMCL,有修正

 操作演示: