ros2学习笔记(一)——基本概念(二)

1.服务

应该了解:
  >服务与主题的不同点;
  >使用服务的方式,发布请求并获得响应

服务是 ROS  graph中节点的另一种通信方式。 服务基于call-and-response模型,而不是主题的publisher-subscriber(发布者-订阅者)模型。 主题允许节点订阅数据流并获得持续更新,服务仅在客户端专门调用时才提供数据。

ros2服务调用

#服务调用的形式
ros2 service call <service_name> <service_type> <arguments>
#下方为两个例子
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"  #注意到x:有空格再加入数值,name:同样有空格再加入字符串

使用服务调用,必须知道service_name,service_type,arguments的形式

#返回系统中当前活动的所有服务的列表service_name
ros2 service list
#从以上知晓服务的名字后,可获取服务类型type_name
ros2 service type <service_name>

ros2 service list -t  #同时获取服务名字及服务类型
#获取argument,从命令行调用服务时需要知道的输入参数结构。 
ros2 interface show <type_name>

2.参数(parameter)

应该了解:
  >参数的获取、设置和保存
  >参数文件保存和设置

参数设置

#查看各个节点参数
ros2 param list
#显示参数的类型和当前值
ros2 param get <node_name> <parameter_name>
#修改参数值
ros2 param set <node_name> <parameter_name> <value>

设置参数 set命令只会在当前的会话中更改它们,而不是永久更改。 但是,可以保存设置更改并在下次启动节点时重新加载它们。

参数转储

#将节点的所有当前参数值“转储”到一个文件中以供以后保存
ros2 param dump <node_name>   #在工作区运行的目录中会生成一个新文件
#将参数从文件加载到当前运行的节点:
ros2 param load <node_name> <parameter_file>
#若在启动节点时就要加载参数,可用:
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

3.操作(action)

应当了解:
>action的基本概念
>发送action的方式

操作(action)是 ROS 2 中的一种通信类型,用于长时间运行的任务。 它们由三部分组成:目标、反馈和结果。

操作建立在主题和服务上。 它们的功能类似于服务,但可以取消操作。 它们还提供稳定的反馈,而不是返回单一响应的服务。

在客户端给出Goal Service Request后,服务器返回Response,而后客户端给出Result Service Request,服务器多次反馈后,再返回Response.

主题,服务与操作:

主题:单一方向持续数据流,传感器数据或机器人状态
服务:应答机制,调用服务,完成后受到回复,例如询问天气情况,查询电量
操作:一次无法完成,需要多次才可以完成,或者完成过程需要中断,甚至终止,例如导航,抓取动作。

查看节点的action

ros2 node info <node_name>
#对于返回结果,着重看底部的Action Servers以及Action Clients

查看当前ROS graph的action

ros2 action list
ros2 action list -t  #会返回action_type

查看action的信息

ros2 action info <action_name>
#返回action_name,执行此action的客户端和服务器

在自己发送或执行操作目标之前,您还需要的另一条信息是操作类型的结构

ros2 interface show <action_type>
#例子
ros2 interface show turtlesim/action/RotateAbsolute

#返回结果
The desired heading in radians
float32 theta
---
The angular displacement in radians to the starting position
float32 delta
---
The remaining rotation in radians
float32 remaining

#结果解析:第一部分是goal request的结构,第二部分是response的结构,第三部分是feedback的结构

发送action goal

ros2 action send_goal <action_name> <action_type> <values>
ros2 action send_goal <action_name> <action_type> <values> --feedback #可以看到反馈的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值