创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码
架构师指南
创建 ROS 操作涉及编写操作定义以及相应的服务器和客户端代码。我将提供详细的分步指南来说明如何完成此操作。
第 1 步:定义操作
首先,您需要在.action文件中定义您的操作。让我们创建一个名为 的简单操作Example.action,用于发送一个数字、对其进行处理并返回结果。
纯文本复制代码
# Example.action
# Goal definition
int32 number_to_process
---
# Result definition
int32 processed_number
---
# Feedback definition
int32 percent_complete
第 2 步:创建操作服务器
动作服务器执行实际任务。下面是一个 Python 示例:
Python复制代码
#!/usr/bin/env python
import rospy
import actionlib
from your_package_name.msg import ExampleAction, ExampleFeedback, ExampleResult
def process_number(goal):
feedback = ExampleFeedback()
result = ExampleResult()
rate = rospy.Rate(1)
for i in range(1, 11):
# Some processing logic here
feedback.percent_complete = i * 10
server.publish_feedback(feedback)
rate.sleep()
# Assuming some processing on the number
result.processed_number = goal.number_to_process * 2
server.set_succeeded(result)
rospy.init_node('example_action_server')
server = actionlib.SimpleActionServer('example_action', ExampleAction, execute_cb=process_number, auto_start=False)
server.start()
rospy.spin()
第 3 步:创建操作客户端
动作客户端向动作服务器发送目标并等待结果:
Python复制代码
#!/usr/bin/env python
import rospy
import actionlib
from your_package_name.msg import ExampleAction, ExampleGoal
def feedback_cb(feedback):
print('[Feedback] Percent complete: %d%%' % feedback.percent_complete)
rospy.init_node('example_action_client')
client = actionlib.SimpleActionClient('example_action', ExampleAction)
client.wait_for_server()
goal = ExampleGoal()
goal.number_to_process = 10
client.send_goal(goal, feedback_cb=feedback_cb)
client.wait_for_result()
result = client.get_result()
print('Processed number: %d' % result.processed_number)
第 4 步:构建并运行 ROS 项目
放置操作文件Example.actionaction :将其放置 在 包的文件夹中。 修改 CMakeLists.txt 和 package.xml :更新这些文件以包含用于构建操作文件的依赖项。 构建包catkin_make : 在您的工作区中运行以构建包。 运行服务器和客户端rosrunroslaunch :使用 或 运行操作服务器和客户端节点。
概括
该.action 文件定义了操作的目标、结果和反馈的结构。 Python 中的操作服务器使用该actionlib 库来处理目标并发送反馈和结果。 动作客户端将目标发送到动作服务器并处理结果和反馈。
此示例提供了实现 ROS 操作的基本结构。根据项目的具体需求,您可以扩展或修改此结构。请记住替换your_package_name为 ROS 包的实际名称。
https://lh3.googleusercontent.com/a/AEdFTp4PVyyfKXAC3MdvXA52Xvnncso9zkW8azxN2FuY=s96-c
要创建一键运行的 ROS 项目,可以使用文件roslaunch。这允许您使用单个命令启动操作服务器和操作客户端(或任意数量的节点)。以下是设置项目以进行一键运行的步骤:
第5步:创建roslaunch文件
example.launch在launchROS 包的目录中创建一个名为的文件。如果该launch目录不存在,请在包中创建它。
XML复制代码
替换your_package_name为包的名称,并确保type属性与操作服务器和客户端脚本的文件名匹配。
第6步:修改CMakeLists.txt和package.xml
确保您的CMakeLists.txt和package.xml已正确设置以构建操作消息和运行 Python 脚本。这通常涉及:
添加对actionlibactionlib_msgs 和 的依赖项 确保find_packagemessage_generationmessage_runtime .actionadd_action_files 将您的文件添加到 指令中。 确保generate_messages 以适当的依赖关系进行调用。
第 7 步:构建包
从catkin工作区的根目录运行catkin_make以构建包。
第 8 步:获取安装脚本
获取setup.bash脚本以确保您的 ROS 环境能够识别新的包和启动文件。
巴什复制代码
source devel/setup.bash
第 9 步:运行项目
最后,您可以使用以下命令一键(或一个命令)运行您的项目roslaunch:
巴什复制代码
roslaunch your_package_name example.launch
此命令将启动文件中定义的操作服务器和操作客户端example.launch。
结论
通过执行这些步骤,您已经创建了一个带有操作服务器和客户端的 ROS 项目,可以使用roslaunch. 此设置非常适合简化启动复杂 ROS 项目的过程,允许您使用一个命令启动所有必要的节点。
your_package_name请记住将、example_action_server.py、 和 等占位符名称替换example_action_client.py为项目中使用的实际名称。