通信接口
在ros2中主要使用的通信接口有三类,分别是:
- 话题接口(文件类型:.msg)
- 服务接口 (文件类型:.srv)
- 动作接口(文件类型:.action)
实际上这些接口可以看作是一个结构体,或者说是一个类。主要就是为了方便数据传输。因为大多数时间传输的数据都是含有多个数据,每次传输一个数据显然是不合理的。因此定义这些通信接口可以使得传输的数据更加合理。同时也可以方便读者看懂。
当用户定义数据类型,编译后程序会生成相应的代码文件。事实上代码调用的是那些生成的代码文件需要注意的是需要配置编译文件(CMakeLists.txt文件)然后使用编译命令编译才能使接口文件顺利得被编译成相应的代码文件。 例如:
rosidl_generate_interfaces(${PROJECT_NAME}
"myinterface.msg" //这里是用户定义的话题接口文件
)
话题接口
int32 a
int32 b
这个接口一般用于话题通信,其中a,b都是通信数据
服务接口
//请求数据
int32 a
int32 b
---
//应答数据
int32 ans
服务接口一般用于服务类的通信中
动作
//目标
bool enable
---
//结果
bool finish
---
//反馈
int32 state
需要注意的是在客户端中使用*add_done_callback(method)*方法接收结果时,服务器第一次发送的数据是关于连接成功或者失败的信息。因此为了避免运行错误可以对消息进行判断,或者定义两个回调方法,在运行过程中进行回调方法的修改。