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



1. 安装ROS

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

rosdep 管理工具

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

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

二进制包与源代码包

2 工作空间

2.1

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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)

常用指令:

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

2.2

小工具 tree

roscpp,rospy,std_msgs nav_masgs等依赖

.bashrc : 加socrce

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

stack:(老版本)软件包集

3.1 通信架构(上)

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记

roslaunch: 启动master和多个node

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

初学者改别人的就可以

3.2 实例演示

观察启动的node

键盘控制机器人行进

摄像头实时画面 

 3.3 通讯方式

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

有些类似结构体

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

常用命令

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 3.4 操作演示

info很常用

RGB加深度信息可以合成点云

4 通信架构(下)

4.1 Service 服务

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

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

Client  <=> Service <=> Server

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

Topic VS Service

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

srv

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

人体关节检测例子:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

要修改: 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

常用命令:

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

参数服务器:Parameter Server

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

字典即是一种映射关系

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 用命令行设置参数

ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

4.3 示例演示

rossrv与rosservice不要搞混了

灯光例子,重力例子

4.4 action(动作)

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

上部分是洗碗机例子:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

5 常用工具

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记用来仿真

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记用来显示

ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记ROS开发日记(2)——ROS入门-中国大学MOOC笔记

六 client library

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

类似于API

roscpp跟rospy,roslisp

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

官网可以查用法

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 nodehandle类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 nodehandle class

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

namespace(没有对象),不是类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

获取node信息

ROS开发日记(2)——ROS入门-中国大学MOOC笔记 ROS开发日记(2)——ROS入门-中国大学MOOC笔记 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

6.2 topic_demo(重要)

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 步骤详情:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 talker思路:初始化-句柄-创建pub-发布消息  (重要!)ROS开发日记(2)——ROS入门-中国大学MOOC笔记

listener 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 cmakelist,可以用IDE roboware

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

6.3 service_demo(重要)

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

定义handle funtion

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

client

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

6.4 param_demo

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

7 rospy 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

Node相关:

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

7.3 topic-demo

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

要cmake头文件

 service——demo

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

8.1 TF&URDF

TF:TranForm

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

frame

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

tf树

robot - sim-demo

frame - link

不能有断裂的地方

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

TF消息

transformstamped.msg

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

C++的TF 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

broadcast类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

listener

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

python里的TF(简单)

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

Listener类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

辅助功能:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

常用工具:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

Karto SLAM

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

10 Navigation Stack

蓝色要自己提供

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 costmap:栅格地图/代价地图

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

MapServer 提供地图

AMCL 定位

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

命令:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

AMCL:蒙特卡洛自适应定位

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 操作演示:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记

 

相关文章: