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

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



1. 安装ROS

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

rosdep 管理工具

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

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

二进制包与源代码包

2 工作空间

2.1

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第1张图片

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.2

小工具 tree

roscpp,rospy,std_msgs nav_masgs等依赖

.bashrc : 加socrce

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第3张图片

stack:(老版本)软件包集

3.1 通信架构(上)

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第4张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第5张图片

roslaunch: 启动master和多个node

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第6张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第7张图片

初学者改别人的就可以

3.2 实例演示

观察启动的node

键盘控制机器人行进

摄像头实时画面 

 3.3 通讯方式

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第8张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第9张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第10张图片

有些类似结构体

常用命令

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第11张图片

 3.4 操作演示

info很常用

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

4 通信架构(下)

4.1 Service 服务

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

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

Client  <=> Service <=> Server

Topic VS Service

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第12张图片

srv

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

人体关节检测例子:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第13张图片

要修改: 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第14张图片

常用命令:

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第15张图片

参数服务器:Parameter Server

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

字典即是一种映射关系

 用命令行设置参数

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第16张图片ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第17张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第18张图片

4.3 示例演示

rossrv与rosservice不要搞混了

灯光例子,重力例子

4.4 action(动作)

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第19张图片

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

上部分是洗碗机例子:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第20张图片

5 常用工具

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第21张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第22张图片ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第23张图片用来仿真

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第24张图片ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第25张图片用来显示

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第26张图片ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第27张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第28张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第29张图片ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第30张图片

六 client library

类似于API

roscpp跟rospy,roslisp

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第31张图片

官网可以查用法

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第32张图片

 nodehandle类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第33张图片

 nodehandle class

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第34张图片

namespace(没有对象),不是类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第35张图片

获取node信息

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第36张图片 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第37张图片 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第38张图片

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

6.2 topic_demo(重要)

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第39张图片

 步骤详情:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第40张图片

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

listener 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第42张图片

 cmakelist,可以用IDE roboware

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第43张图片

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

6.3 service_demo(重要)

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第44张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第45张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第46张图片

定义handle funtion

client

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第47张图片

6.4 param_demo

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第48张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第49张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第50张图片

7 rospy 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第51张图片

Node相关:

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第52张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第53张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第54张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第55张图片

7.3 topic-demo

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第56张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第57张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第58张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第59张图片

要cmake头文件

 service——demo

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第60张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第61张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第62张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第63张图片

8.1 TF&URDF

TF:TranForm

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第64张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第65张图片

frame

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第66张图片

tf树

robot - sim-demo

frame - link

不能有断裂的地方

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第67张图片

TF消息

transformstamped.msg

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第68张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第69张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第70张图片

C++的TF 

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第71张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第72张图片

broadcast类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第73张图片

listener

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第74张图片

python里的TF(简单)

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第75张图片

Listener类

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第76张图片

辅助功能:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第77张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第78张图片

常用工具:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第79张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第80张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第81张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第82张图片

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

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第83张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第84张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第85张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第86张图片

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第87张图片

Karto SLAM

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第88张图片

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第89张图片

10 Navigation Stack

蓝色要自己提供

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第90张图片

 

 ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第91张图片

 costmap:栅格地图/代价地图

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第92张图片

MapServer 提供地图

AMCL 定位

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第93张图片

命令:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第94张图片

AMCL:蒙特卡洛自适应定位

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第95张图片

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

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第96张图片

 操作演示:

ROS开发日记(2)——ROS入门-中国大学MOOC笔记_第97张图片

 

你可能感兴趣的:(嵌入式开发)