【ROS开发 | 学习笔记】二、编程基础

目录

1 创建工作空间与功能包

1.1 工作空间

1.2 功能包

1.3 环境变量

2  话题编程

2.1 话题模型

2.2 发布者Publisher的编程实现

2.3 订阅者Subscriber的编程实现

2.4 话题消息的定义与使用

3 服务编程

3.1 服务模型

3.2 客户端Client的编程实现:

3.3 服务端Server的编程实现

3.4 服务数据的定义与使用

4 参数的使用与编程方法

4.1 参数模型

4.2 参数命令行的使用

4.3 参数的编程方法


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. 编译并运行 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值