目录
1 创建工作空间与功能包
1.1 工作空间
工作空间(workplace)是一个存放工程开发相关文件的文件夹,以catkin工具进行编译构建,并由以下部分组成:
- 代码空间:src
- 编译空间:build
- 开发空间:devel
- 安装空间:install
创建工作空间语句如下:
$ makdir -p ~/xxx/src
$ cd~/xxx/src
$ catkin_init_workspace
编译工作空间:
$ cd ~/xxx/
$ catkin_make
1.2 功能包
创建功能包:$ catkin_creat_pkg <package_name> [depend 1] [depend 2] [depend 3]...
其中package_name是功能包名,depend是该功能包在编译时依赖ROS中的其他功能包。同一个工作空间下,不允许存在同名功能包;不同的工作空间下,可以存在同名功能包。
1.3 环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置和系统文件夹位置等。运行工作空间时,需先设置环境变量:
$ source devel/setup.bash
检查环境变量:
$echo $ROS_PACKAGE_PATH
2 话题编程
2.1 话题模型
话题模型(发布/订阅模型)如下图所示:
2.2 发布者Publisher的编程实现
1. 在工作空间下创建功能包
2. 创建发布者代码(C++ or Python)并将.cpp文件放入路径''~/工作空间/src/功能包/src''中
- 初始化ROS节点
- 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
- 创建消息数据
- 按照一定频率循环发送消息
3. 配置发布者代码编译规则
- 在CMakeLists.txt中设置需要编译的代码和生成的可执行文件
- 设置链接库
4. 编译并运行发布者
$ cd ~/xxx
$ catkin_make
$ source devel setup.bash
$ roscore
$ rosrun <package_name> <node>
2.3 订阅者Subscriber的编程实现
1. 创建功能包或使用已有功能包
2. 创建订阅者代码
- 初始化ROS节点
- 订阅需要的话题
- 循环等待话题消息,接收到消息后进入回调函数
- 在回调函数中完成处理消息
3. 配置订阅者代码编译规则
4. 编译并运行订阅者
2.4 话题消息的定义与使用
1. 自定义话题消息
- 在功能包中创建msg文件夹,文件夹中使用touch命令创建.msg文件
- 在package.xml中添加功能包依赖
- 在CMakeLists.txt添加编译选项
- 在工作空间根目录下编译生成语言相关文件
2. 创建发布者代码
3. 创建订阅者代码
4. 配置代码编译规则
5. 编译并运行发布者和订阅者
3 服务编程
3.1 服务模型
服务模型(客户端/服务器模型)如下图所示:
3.2 客户端Client的编程实现:
1. 创建功能包
2. 创建客户端代码(C++ or Python)
- 初始化ROS节点
- 创建一个Client实例
- 发布服务请求数据
- 等待Server处理之后的应答结果
3. 配置客户端代码编译规则
4. 编译并运行客户端
3.3 服务端Server的编程实现
1. 创建服务器代码(C++ or Python)
- 初始化ROS节点
- 创建Server实例
- 循环等待服务请求,进入回调函数
- 在回调函数中完成服务功能的处理,并反馈应答数据
2. 配置服务器代码编译规则
-
设置需要编译的代码和生成的可执行文件
-
设置链接库
-
添加依赖项,依赖动态生成的cpp文件
3. 编译并运行服务器
3.4 服务数据的定义与使用
1. 自定义服务数据,使用---区分request和response
- 定义srv文件
- 在package.xml中添加功能包依赖
- 在CMakeLists.txt添加编译选项
- 编译生成语言相关文件
2. 创建服务器代码
3. 创建客户端代码
4. 配置服务器/客户端代码编译规则
5. 编译并运行客户端和服务端
4 参数的使用与编程方法
4.1 参数模型
参数模型如下图所示:
4.2 参数命令行的使用
使用rosparam命令完成参数相关设置
- 列出当前所有参数:$ rosparam list
- 显示某个参数值:$ rosparam get param_key
- 设置某个参数值:$ rosparam set param_key param_value
- 保存参数到文件:$ rosparam dump file_name
- 从文件读取参数:$ rosparam load file_name
- 删除参数:$ rosparam delete param_key
其中,YAML参数文件是保存参数值的文件。
4.3 参数的编程方法
1. 创建功能包
2. 获取/设置参数
- 初始化ROS节点
- get函数获取参数
- set函数设置参数
3. 配置代码编译规则
4. 编译并运行