创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码

这篇具有很好参考价值的文章主要介绍了创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码,ros,ros,python
架构师指南

创建 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 项目

  1. 放置操作文件Example.actionaction

    :将其放置

    包的文件夹中。

  2. 修改 CMakeLists.txt 和 package.xml

    :更新这些文件以包含用于构建操作文件的依赖项。

  3. 构建包catkin_make

    在您的工作区中运行以构建包。

  4. 运行服务器和客户端rosrunroslaunch

    :使用

    运行操作服务器和客户端节点。

概括

  • 该**.action**

    文件定义了操作的目标、结果和反馈的结构。

  • Python 中的操作服务器使用该**actionlib**

    库来处理目标并发送反馈和结果。

  • 动作客户端将目标发送到动作服务器并处理结果和反馈。

此示例提供了实现 ROS 操作的基本结构。根据项目的具体需求,您可以扩展或修改此结构。请记住替换**your_package_name**为 ROS 包的实际名称。

https://lh3.googleusercontent.com/a/AEdFTp4PVyyfKXAC3MdvXA52Xvnncso9zkW8azxN2FuY=s96-c

要创建一键运行的 ROS 项目,可以使用文件**roslaunch**。这允许您使用单个命令启动操作服务器和操作客户端(或任意数量的节点)。以下是设置项目以进行一键运行的步骤:

第5步:创建roslaunch文件

**example.launchlaunchROS 包的目录中创建一个名为的文件。如果该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.txtpackage.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**为项目中使用的实际名称。文章来源地址https://www.toymoban.com/news/detail-834926.html

到了这里,关于创建 ROS action操作涉及编写操作定义以及相应的服务器和客户端代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ROS2指南-14】创建自定义的消息和服务

    目标: 自定义接口文件( .msg 和 .srv )并将它们与 Python 和 C++ 节点一起使用。 教程级别: 初学者 时间: 20分钟 内容 背景 先决条件 任务 1 创建一个新包 2 创建自定义定义 3个CMakeLists.txt 4个package.xml 5 构建tutorial_interfaces包 6 确认 msg 和 srv 创建 7 测试新接口 概括 下一步 在之

    2023年04月12日
    浏览(25)
  • 【ROS2指南-7】理解ROS2的Action

    目标: 理解并学习ROS 2 中的Action通信方式。 教程级别: 初学者 时间: 15分钟 内容 背景 先决条件 任务 1 设置 2 使用动作 3 ros2节点信息 4 ros2 动作列表 5 ros2 动作信息 6 ros2界面展示 7 ros2 动作 send_goal 概括 下一步 相关内容 动作是 ROS 2 中的一种通信类型,用于长时间运行的任

    2023年04月16日
    浏览(36)
  • ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现

    我们知道在 ROS 中,由很多互不相干的节点组成了一个复杂的系统,单个的节点看起来是没起什么作用,但是节点之间进行了通信之后,相互之间能够交互信息和数据的时候,就变得很有意思了。 节点之间进行通信的一个常用方法就是使用 话题(topic) ,话题表示的是一个定义

    2024年02月11日
    浏览(28)
  • 02.顺序表 排序--定义一个包含图书信息(书号、书名、价格)的顺序表读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。

    题目描述 定义一个包含图书信息(书号、书名、价格)的顺序表读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。 输入 输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名

    2024年02月07日
    浏览(39)
  • 【ROS入门】使用 ROS 动作(Action)机制实现目标请求、进度与完成结果的反馈

    使用 ROS 动作(Action)机制实现目标请求、进度与完成结果的反馈: 创建服务端,注册 Action 客户端发送action 请求检测 40个零件 服务端接收后,每隔 1s 检测一个零件 (每检测一个打印1次),并实时给客户端返回检测进度(客户端打印进度百分比),并在检测完毕时告知客户端目标完

    2024年02月07日
    浏览(28)
  • springboot使用@Valid 和 @Validated 注解校验详解以及编写一个自定义全局异常类

    全局异常处理类 验证: ============================================== 导入所需要的包: 如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。 如果你不是 springboot 项目,那么引入下面依赖即可: 新建三个实体类 实现一: 使用@Valid注解修

    2024年02月10日
    浏览(30)
  • Mysql用户创建以及权限赋予操作

    在MySQL中,创建用户并为其授予某个库的所有权限,可以按照以下步骤操作:          1.登录MySQL服务器。         2.创建新用户。 其中,new_user是新用户的名称,localhost是该用户的登录主机,user_password是该用户的密码。 其中: MySQL中的\\\"localhost\\\"和\\\"%\\\"都是用来指定MySQL允许

    2024年02月16日
    浏览(35)
  • 微信小程序用vant自定义tabbar页面并跳转相应页面

    步骤一 安装 vant 组件库 下载完后要npm构建才能使用 步骤二 修改 app.json 将 app.json 中的 \\\"style\\\": \\\"v2\\\" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱 步骤三 修改 project.config.json 开发者工具创建的项目, miniprogramRoot 默认为 minipro

    2024年01月22日
    浏览(40)
  • 【编写LED驱动,创建三个设备文件,每一个设备文件和一个LED灯绑定,当操作这个设备文件时只能控制对应的这盏灯】

    编写LED驱动,创建三个设备文件,每一个设备文件和一个LED灯绑定,当操作这个设备文件时只能控制对应的这盏灯。 1.将GPIO的相关寄存器封装成结构体 -------- head.h 2.LED相关驱动文件 -------- led.c led0 ------ LED1 led1 ------ LED2 led2 ------ LED3 3.应用层测试文件 -------- test.c 实验结果

    2024年02月12日
    浏览(37)
  • Android 接收服务器指令执行相应操作

    mReadThread.start(); 接收并处理服务器信息线程ReadThread: private WeakReference mSocket; private ReadThread mReadThread; class ReadThread extends Thread { private WeakReference mWeakSocket; private boolean isStart = true; public ReadThread(Socket socket) { mWeakSocket = new WeakReference(socket); } public void release() { isStart = false; // rel

    2024年04月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包