一.什么是工作空间
工作空间(workplace)是一个存放工程开发相关文件的文件
src:代码空间,源码
build:编译空间,中间文件(使用很少)
devel:开发空间(可执行文件,脚本等 常用)
install:安装空间(与devel基本一致,ros2与devel是一个)
$ mkdir -p ~/catlin_ws/src
$ cd ~/catlin_ws/src
$ catkin_init_workspace
$ catkin_make
设置环境变量
$ source devel/setup.bash
检查环境变量
$ echo $ROS_PACKAGE_PATH
三.创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_communication std_msgs rospy roscpp
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
同一个工作空间下不能有同名功能包
不同工作空间允许
1.工作空间的覆盖
$ env grep | ros
工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
新设置的路径会在ROS_PACKAGE_PATH中自动放在最前端
运行时,ros会优先查找最前端的工作空间中是否存在指定的功能包
如果不存在就依次向后查找其他工作空间
2.1ros通讯编程-话题编程
流程:
创建发布者
创建订阅者
添加编译选项
运行可执行程序
如何实现发布者:
初始化ros节点
向ROS MASTER 注册节点信息,包括发布的话题名和话题中的消息类型
按照一定频率发布
如何实现一个订阅者:
初始化ros节点
订阅需要的话题
循环等待话题消息接收到消息后进入回调函数
在回调函数中完成消息处理
如何编译代码:
设置需要的代码和可执行文件
设置链接库
设置依赖
如何自定义话题消息:
定义msg文件
在package.xml中添加功能包依赖
在CMakeList.txt添加编译选项
2.2服务编程流程:
创建服务器
创建客户端
添加编译选项
运行可执行文件(与话题的步骤差不多)
如何实现一个服务器:
初始化ros节点
创建server实例
循环等待服务请求,进入回调函数
在回调函数中完成服务功能的处理,并反馈应答数据
如何实现一个客户端:
初始化ros节点
创建client实例
发布服务请求数据
等待server处理之后的应答结果
2.3动作编程
一种问答通信机制
带有连续反馈
可以在任务中终止运行
基于ros的消息体制实现
Action的接口:
goal:发布任务目标
cancel:请求取消任务
status:通知客户端当前的状态
feedback:周期反馈任务运行的监控数据
result:向客户端发送任务的执行结果,只发布一次