架构师指南
创建 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
在launch
ROS 包的目录中创建一个名为的文件。如果该launch
**目录不存在,请在包中创建它。
XML复制代码
<launch>
<!-- Launch the action server -->
<node name="example_action_server" pkg="your_package_name" type="example_action_server.py" output="screen"/>
<!-- Launch the action client -->
<node name="example_action_client" pkg="your_package_name" type="example_action_client.py" output="screen"/>
</launch>
替换**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 项目的过程,允许您使用一个命令启动所有必要的节点。文章来源:https://www.toymoban.com/news/detail-834926.html
your_package_name
请记住将、example_action_server.py
、 和 等占位符名称替换**example_action_client.py
**为项目中使用的实际名称。文章来源地址https://www.toymoban.com/news/detail-834926.html
到了这里,关于创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!