- action通信
- 作用:
- 实现:
- 如何自定义action文件
- 1.按照固定格式创建action文件
- 2.编辑配置文件
- 3.编译生成中间文件
- action通信自定义action文件
- 0.vscode的配置
- 1.编写action服务端实现
- 2.编写action客户端实现
- 3.编辑CMAKELISTS.TXT
与服务通信相类似,也是采用了请求响应的模式,但与话题通信不同的是,在action通信中,服务端会连续反馈信息,客户端可以接受反馈或者取消。
一般action通信应用于耗时 *** 作中,比如路径规划。
action/srv/msg文件内的可用类型一直,且三者实现流程类似。
①新建功能包
其中包含依赖roscpp rospy std_msgs actionlib actionlib_msgs
②在功能包下新建action目录
③在action文件夹中创建 .action 文件
#1.目标数据变量
int32 num
---
#2.最终响应变量
int32 result
---
#3.连续反馈变量
float64 progress_bar
与service很像,只是多了一个连续反馈变量而已。
④编辑配置文件
在CMAKELIST文件中把add_action_files那一段的注释放开,并且把文件名改了。
add_action_files(
FILES
Action1.action
Action2.action
)
把generate_messages的注释放开
并且把std_msgs加入
generate_messages(
DEPENDENCIES
actionlib_msgs
std_msgs
)
最后,在catkin_package中把执行时的依赖放开
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo01_action
CATKIN_DEPENDS actionlib actionlib_msgs roscpp rospy std_msgs
# DEPENDS system_lib
)
3.编译生成中间文件
⑤ctrl+shift+b编译生成中间文件
在devel/share/功能包名/msg文件夹下
devel/include下C++调用的头文件
devel/lib/python3下是Python调用的文件
为了调用action的头文件不抛异常,需要进行配置。
在
c_cpp_properties.json
文件中添加头文件的地址
"includePath": [
"/opt/ros/noetic/include/**",
"/home/hdhx/demo02_ws/src/hello_vscode/include/**",
"/home/hdhx/demo01_ws/src/hello_world/include/**",
"/home/hdhx/demo05_ws/devel/include/**",
"/usr/include/**"
],
1.编写action服务端实现
在src下创建server的cpp文件
①包含头文件
②初始化ros节点
③创建nodehandle
④创建action_SERVER对象
⑤处理客户端提交的请求
a)解析提交的目标值
b)产生连续反馈
c)最终结果相应 通过回调函数实现
⑥spin()回旋 *** 作
在action通信中涉及模板、重载等内容,待C++学到这里之后再来补全 2022.4.2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)