ROS action笔记(一)---- action的生成
Introduction
action 主要分为client与server, 二者同时并行。client向server发送执行目标,server向client实时返回feedback与完成目标后的result.
feedback与goal的区别在于,feedback是在执行过程中可以不断返回的,而result只有在最后阶段返回。
生成 .action
# file name : move_and_scan.action
# Move the robots to the given views. if no goals given, scan surrounds
# goal
string[] target_robot_names
TaskAssignments[] tasks
---
# result
uint8 robot_name
---
# feedback
string robot_name
uint32 task_order
uint32 robot_id
以此为例,写一个move_and_scan.action的文件,分别存储goal result 与feedback.
其中只能存储基本的变量类型,vector使用[ ]
表示。
自定义的变量类型
比如在move_and_scan任务中定义一个叫做TaskAssignment的类用来表示机器人的每个任务,我们需要写一个msg文件来表示。
# file name : TaskAssignment.msg
geometry_msgs/Pose[] task_assignments_per_robot
从而,每个goal中的TaskAssignment表示一个ROS中Pose的向量。
cmake编译
cmake_minimum_required(VERSION 3.10)
project(virtual_scan)
find_package(catkin REQUIRED COMPONENTS
actionlib
actionlib_msgs
camera_calibration_parsers
cv_bridge
gazebo_msgs
geometry_msgs
image_transport
message_generation
rosconsole
roscpp
std_msgs
tf2
tf2_geometry_msgs
)
add_message_files(
FILES
TaskAssignments.msg
)
add_action_files(DIRECTORY action
FILES
MoveAndScan.action
)
generate_messages(DEPENDENCIES std_msgs geometry_msgs actionlib_msgs)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS message_runtime std_msgs geometry_msgs actionlib_msgs
)
add_executable(virtual_scan_server
src/virtual_scan_server_node.cpp
src/virtual_scan_server.cpp
)
add_dependencies(virtual_scan_server ${${PROJECT_NAME}_EXPORTED_TARGETS})
target_link_libraries(virtual_scan_server
PRIVATE
${catkin_LIBRARIES}
)
target_include_directories(virtual_scan_server
PRIVATE
include
${catkin_INCLUDE_DIRS}
)
target_compile_features(virtual_scan_server
PUBLIC
cxx_std_17
)
cmake 编写如上,之后直接catkin build
即可。