根据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,有修正
操作演示: