ros2学习笔记-CLI工具,记录命令对应操作。

news2024/10/7 20:36:24

目录

  • 环境变量
  • turtlesim和rqt
    • 以初始状态打开rqt
  • node
    • 启动节点
    • 查看节点列表
    • 查看节点更多信息
    • 命令行参数 --ros-args
  • topic
    • 话题列表
    • 话题类型
    • 话题列表,附加话题类型
    • 根据类型查找话题名
    • 查看话题发布的数据
    • 查看话题的详细信息
    • 查看类型的详细信息
    • 给话题发布消息(在命令行)
    • 带有时间戳的消息
    • 查看话题发布的频率Hz
  • service
    • 服务列表
    • 服务类型
    • 服务列表,附加服务类型
    • 根据类型查找服务名
    • 服务类型结构
    • 调用服务
  • parameters
    • 参数列表
    • 获取参数值
    • 设置参数值
    • 获取节点所有参数
    • 为节点加载参数
    • 启动时指定节点参数
  • action
    • 通信方式
    • 动作列表
    • 动作列表,附加类型
    • 动作更多信息
    • 动作类型结构
    • 发送动作目标
    • 发送动作目标,要求有稳定的反馈
  • topic,service,action的区别
  • 使用 rqt_console 查看特定日志消息
    • 启动
    • 过滤某些级别的消息
  • 启动节点(Launching nodes)
  • 记录和播放数据
    • 记录单个topic
    • 记录多个topic
    • 查看记录信息
    • 记录回放

环境变量

启动前要检查环境变量:ROS_DOMAIN_IDROS_LOCALHOST_ONLY。如果通信时PIN不同,应该首先考虑是不是环境变量设置错误。 Configuring environment

记得source一下ros2。

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

turtlesim和rqt

Turtlesim 是一款用于学习 ROS2 的轻量级模拟器。 它说明了 ROS 2 在最基本的层面上做了什么,让您了解以后将如何处理真实机器人或机器人模拟。
ros2 工具是用户管理、内省和与 ROS 系统交互的方式。 它支持针对系统及其操作的不同方面的多个命令。 人们可能会使用它来启动节点、设置参数、收听话题等等。 ros2工具是核心 ROS2 安装的一部分。
rqt 是 ROS2 的图形用户界面 (GUI)工具。 在 rqt 中完成的所有操作都可以在命令行上完成,但 rqt 提供了一种更用户友好的方式来操作 ROS2 元素。

以初始状态打开rqt

rqt每次启动都会以上次关闭时的状态打开,如果rqt界面出现了什么异常卡顿(比如某个页面无法点击,或者无法滑动),可以通过下面命令像第一次打开rqt一样。

rqt --clear-config

node

启动节点

ros2 run <package_name> <executable_name>

查看节点列表

ros2 node list

查看节点更多信息

可以看到节点的话题信息(subscribers and publishers),服务信息(services), 动作信息(action servers and action clients)。

ros2 node info <node_name>    "一般是/node_name"

命令行参数 --ros-args

ROS的命令行参数

--remap
ros2 run some_package some_ros_executable --ros-args --remap foo:=bar
ros2 run some_package some_ros_executable --ros-args -r foo:=bar
ros2 run some_package some_ros_executable --ros-args -r some_node:foo:=bar

--param
ros2 run some_package some_ros_executable --ros-args --param string_param:=test
ros2 run some_package some_ros_executable --ros-args -p string_param:=test
ros2 run some_package some_ros_executable --ros-args -p some_node:string_param:=test

--params-file
ros2 run some_package some_ros_executable --ros-args --params-file params_file.yaml

<params_file.yaml>

node0_name:
  ros__parameters:
     param0_name: param0_value
     ...
     paramN_name: paramN_value
...
nodeM_name:
  ros__parameters:
     ...

* 匹配由斜线划分的单个令牌。** 匹配由斜线划分的零或更多令牌。不允许部分匹配(例如foo*)
例如:

/**:
  ros__parameters:
    string_param: foo
将在所有节点上设置参数string_param.

/**/some_node:
    ros__parameters:
      string_param: foo
将在任何名称空间中的some_node上设置parameter string_param.

/foo/*:
    ros__parameters:
      string_param: foo
将在名称空间 /foo下的任何节点上设置参数string_param(例如只匹配到foo/foo1 而不会匹配到foo/foo1/foo11).

topic

话题可以理解为是ROS中节点交换消息的总线。

在图中查看节点和话题之间的结构:

rqt_graph

圆的是节点,方的是话题。
在这里插入图片描述

话题列表

ros2 topic list

话题类型

ros2 topic type <topic_name>

话题列表,附加话题类型

类型其实就是消息结构(消息属于哪个类)。

ros2 topic list -t

根据类型查找话题名

ros2 topic find <type_name>

查看话题发布的数据

ros2 topic echo <topic_name>

注意:数据只有在发布时终端才可以看到。
此命令会发布一个新话题,话题名字类似于/_ros2cli_26646,在rqt_graph中取消选中Debug即可看见。

查看话题的详细信息

可以查看话题的消息类型,以及其被多少个节点发布消息和被多少个节点订阅。

ros2 topic info <topic_name>

查看类型的详细信息

这里的类型不只是话题的类型可以被查看,其他类型也可以使用此方法看到具体的结构信息。

ros2 interface show <msg type>

查看所有类型的列表

ros2 interface list

ros2 interface show geometry_msgs/msg/Twist为例,显示的类型如下:

# This expresses velocity in free space broken into its linear and angular parts.
Vector3  linear
        float64 x
        float64 y
        float64 z
Vector3  angular
        float64 x
        float64 y
        float64 z

其中,linearangular可以理解为一个变量,Vector3 是变量的类型,x,y,zlinear/angular的成员,也是变量。

给话题发布消息(在命令行)

'<args>'参数需要以yaml语法作为输入。

ros2 topic pub <topic_name> <msg_type> '<args>'

'<args>'使用单引号和双引号是等价的,都可以使用。
例如:ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"(格式和echo显示的结果是一样的)

  • --once是一个可选的参数,意为“发布一条消息然后退出”。
  • --rate 1 :以1Hz的频率持续发布消息(为默认参数设置)。
  • <args>是yaml格式的,每一个冒号后面的空格都不可以省略。

在rqt-graph中显示如下:
在这里插入图片描述

带有时间戳的消息

如果消息的header为完整的标题类型std_msgs/msg/Header(有没有可以通过interface show 查看),设置为auto会自动填充为当前时间。

ros2 topic pub /pose geometry_msgs/msg/PoseStamped '{header: "auto", pose: {position: {x: 1.0, y: 2.0, z: 3.0}}}'

如果消息中的类型为builtin_interfaces/msg/Time,可以设置now

ros2 topic pub /reference sensor_msgs/msg/TimeReference '{header: "auto", time_ref: "now", source: "dumy"}'

sensor_msgs/msg/TimeReference 结构如下:
在这里插入图片描述

查看话题发布的频率Hz

ros2 topic hz <topic_name>

service

服务是节点的另一种通信方法,基于呼叫和响应(call-and-response)模型,话题是publisher-subscriber模型。服务只有在客户端专门调用时才提供数据。

服务列表

ros2 service list

服务类型

服务类型的定义与话题类型类似,但是服务类型有两个部分:一条是请求的消息,另一条是响应的消息。

ros2 service type <service_name>

服务列表,附加服务类型

ros2 service list -t

根据类型查找服务名

ros2 service find <type_name>

服务类型结构

查看方法:

ros2 interface show <type_name>

结构:

request structure 
---
response structure
  • ---是request structure 和 response structure 的分隔符。

调用服务

ros2 service call <service_name> <service_type> <arguments>

例如:ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
会返回:

requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name='')

response:
turtlesim.srv.Spawn_Response(name='turtle2')

parameters

参数是节点(node)的配置值,每个节点都维护自己的参数,也有共享参数(和C++很像,有私有成员,也有静态成员)。

参数列表

ros2 param list

获取参数值

ros2 param get <node_name> <parameter_name>

设置参数值

ros2 param set <node_name> <parameter_name> <value>

获取节点所有参数

ros2 param dump <node_name>

如果想将参数存入到文件中,可以使用linux中的>运算符:

ros2 param dump /turtlesim > turtlesim.yaml 

导出为yaml结构,以后使用时可以直接导入。

为节点加载参数

ros2 param load <node_name> <parameter_file>

例如:ros2 param load /turtlesim turtlesim.yaml
需要注意的是只读的参数只能在启动时进行修改,所以那些参数将不会被修改。

启动时指定节点参数

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

例如:ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
这将使得所有参数根据给定的文件更新,具体细节见ROS的命令行参数。

action

action基于topic和service。它的功能类似于service。但是action的特点是:动作不仅可以被取消,还提供了稳定的反馈(service只能返回一个单独的回复response)。
action由三个部分组成:目标,反馈和结果。
操作使用client-server模型,类似于Publisher-Subscriber模型。 “action client”节点将目标发送到“action server”节点,该节点确认目标并返回反馈和结果。

当调用:

 ros2 run turtlesim turtle_teleop_key

终端会显示:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.'Q' to quit.

Use arrow keys to move the turtle.对应topic,
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. ‘F’ to cancel a rotation. ‘Q’ to quit.对应action。

每次按下这些按键时,都会将目标发送到/turtlesim节点的action服务器上。一旦乌龟旋转完成,乌龟节点会返回一个信息,比如:[INFO] [turtlesim]: Rotation goal completed successfully ,实际上不同的动作对应不同的反馈信息和结果。

对于动作而言,client可以取消目标(按下F),server也可以取消目标(连续按下D G,server会自动放弃第一个目标,但不是所有的server都是这样处理)。

通信方式

执行ros2 node info /turtlesim可以看到最下方关于action的信息:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

这说明/turtlesim节点会接受/turtle1/rotate_absolute提供的目标并且给它提供反馈。

执行ros2 node info /teleop_turtle可以看到最下方关于action的信息:

  Action Servers:

  Action Clients:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

这说明/teleop_turtle节点会发送目标给/turtle1/rotate_absolute

动作列表

ros2 action list

动作列表,附加类型

ros2 action list -t

动作更多信息

会返回动作的客户端和服务端节点。

ros2 action info /turtle1/rotate_absolute

动作类型结构

turtlesim/action/RotateAbsolute类型为例:

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

分成了部分,其中---是分隔符,第一部分是目标,第二部分是结果,第三部分是反馈信息。

发送动作目标

ros2 action send_goal <action_name> <action_type> '<values>'

<values>需要采用YAML格式。
例如:ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"

发送动作目标,要求有稳定的反馈

ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback

会返回:

Sending goal:
   theta: -1.57

Goal accepted with ID: e6092c831f994afda92f0086f220da27

Feedback:
  remaining: -3.1268222332000732

Feedback:
  remaining: -3.1108222007751465

…

Result:
  delta: 3.1200008392333984

Goal finished with status: SUCCEEDED

其中Feedback会持续提供反馈信息,直到目标达到。

topic,service,action的区别

通信机制描述使用场景
Topic一种异步消息队列,分为publisher(发送信息)和subscriber(接受消息)处理连续数据流,多对多的形式
Service一种同步请求/响应交互模式(发送一次,反馈/响应一次)一部分定义请求部分,一部分定义回应部分
Action一种异步请求/响应交互模式,带有反馈机制(发送一个目标,执行过程中连续反馈,直到达到目标)需要反馈/状态跟踪,需要花费大量时间,可以被中断

使用 rqt_console 查看特定日志消息

启动

ros2 run rqt_console rqt_console

过滤某些级别的消息

只查看级别大于等于WARN的日志消息。

ros2 run turtlesim turtlesim_node --ros-args --log-level WARN  #大小写都可以

ROS2的日志级别按严重性排序:

Fatal
Error
Warn
Info
Debug

默认级别是Info,因此看不到级别为Debug的消息。
如果设置显示的消息级别是Warn,那么InfoDebug级别的消息都会被显示。

启动节点(Launching nodes)

使用命令行工具一次启动多个节点。

ros2 launch turtlesim multisim.launch.py

这会启动两个turtlesim node,使用ros2 topic list可以看到两个node分别为turtlesim1turtlesim2

/parameter_events
/rosout
/turtlesim1/turtle1/cmd_vel
/turtlesim1/turtle1/color_sensor
/turtlesim1/turtle1/pose
/turtlesim2/turtle1/cmd_vel
/turtlesim2/turtle1/color_sensor
/turtlesim2/turtle1/pose

因此我们可以开两个终端来分别控制两个节点:

  1. ros2 topic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
  2. ros2 topic pub /turtlesim2/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

注意:
也可以使用XML和YAML来创建启动文件。 具体细节可以查看Using Python, XML, and YAML for ROS 2 Launch Files

对于launch的更多信息可以查看ROS2 launch tutorials

记录和播放数据

记录有关topic的数据,因此可以随时重播和检查。

记录单个topic

ros2 bag record <topic_name>

例如:ros2 bag record /turtle1/cmd_vel
这会根据时间戳来创建bag文件的名称,想要指定文件名称可以用-o来指定。

记录多个topic

记录多个topic时直接输入多个topic名称,用空格隔开。

ros2 bag record -o subset <topic1_name> <topic2_name> 

-o选项允许为bag文件选择一个唯一的名称。这里的subset就是要创建的文件目录名称。
例如:ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose

查看记录信息

ros2 bag info <bag_file_name>

例如:ros2 bag info subset

记录回放

ros2 bag play <bag_file_name>

有关ros bag更详细的信息在这里找到:https://github.com/ros2/rosbag2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐两个工具:DeepSpeed-FastGen和DataTrove

DeepSpeed-FastGen 通过 MII 和 DeepSpeed-Inference 加速LLM生成文本 仓库地址&#xff1a;https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-fastgen GPT-4 和 LLaMA 等大型语言模型 (LLM) 已成为服务于各个级别的人工智能应用程序的主要工作负载。从一…

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程

引擎源码版&#xff0c;复制\Engine\Source\Programs\路径下的BlankProgram空项目示例。 重命名BlankProgram&#xff0c;例如CustomTcpProgram&#xff0c;并修改项目名称。 修改.Build.cs内容 修改Target.cs内容 修改Private文件夹内.h.cpp文件名并修改.cpp内容 刷新引擎 …

SpringMVC获取参数与页面跳转

获取参数 第一种 直接当成方法的参数&#xff0c;需要与前台的name一致 相当于Request.getAttribute("username") Controller 第二种 使用对象接收 页面的name也要和对象的字段一致 创建一个对应的实体类 Controller 将参数更换为User对象就行 SpringMVC获取到…

【设计模式】你知道游戏SL大法是什么设计模式吗?

什么是备忘录模式&#xff1f; 老规矩&#xff0c;我们先来看看备忘录模式 (Memento) 的定义&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 它的UML类图如下&a…

keep-alive组件缓存

keep-alive组件缓存 从a跳b&#xff0c;a已经销毁&#xff0c;b重新渲染&#xff1b;b跳a&#xff0c;b销毁a重新渲染 源组件销毁&#xff0c;目标组件渲染 组件缓存&#xff1a;组件实例等相关&#xff08; 包括vnode&#xff09;存储起来 重新渲染指的是&#xff1a;把视图重…

MySQL---多表查询综合练习

创建dept表 CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); 添加dept表主键 mysql> alter table dept add primary key(deptno); Query OK, 0 rows affected (0.02 s…

正则表达式初版

一、简介 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通配符功能&#xff0c;但与通…

YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

一、本文介绍 本文给大家带来的改进机制是华为移动端模型Ghostnetv1,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。GhostNet的关键思想在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的…

消除噪音:Chain-of-Note (CoN) 强大的方法为您的 RAG 管道提供强大动力

论文地址&#xff1a;https://arxiv.org/abs/2311.09210 英文原文地址&#xff1a;https://praveengovindaraj.com/cutting-through-the-noise-chain-of-notes-con-robust-approach-to-super-power-your-rag-pipelines-0df5f1ce7952 在快速发展的人工智能和机器学习领域&#x…

数据结构 | 红黑树

二叉搜索树 节点的左边比节点的值小&#xff0c;右边比节点的值大。 红黑树 红黑树的性质 节点要么是红色&#xff0c;要么是黑色根节点是黑色叶子节点都是黑色的空节点红黑树中红色节点的子节点都是黑色从任一节点到叶子节点的所有路径都包含相同数目的黑色节点 在添加或者…

Rustdesk自建服务搭建好了,打开Win10 下客户端下面状态一直正在接入网络,无法成功连接服务器

环境: Rustdesk1.2.3 自建服务器 有域名地址 问题描述: Rustdesk自建服务搭建好了,打开Win10 下客户端下面状态一直正在接入网络,无法成功连接服务器 解决方案: RustDesk是一款免费的远程桌面软件,它允许用户通过互联网远程连接和控制其他计算机。它是用Rust编程语…

爬虫进阶之selenium模拟浏览器

爬虫进阶之selenium模拟浏览器 简介环境配置1、建议先安装conda2、创建虚拟环境并安装对应的包3、下载对应的谷歌驱动以及与驱动对应的浏览器 代码setting.py配置scrapy脚本参考中间件middlewares.py 附录&#xff1a;selenium教程 简介 Selenium是一个用于自动化浏览器操作的…

web开发学习笔记(10.postman请求响应,后端接口基础知识)

1.springboot使用get请求接受简单参数 上述写法不去别get或者post请求 2.postman各种提交方式的区别 1、form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息&#xff0c;以标签为单元&#xff0c;用分隔符分开。既可以上传键值对&#xff0c;也可…

huggingface学习 | 云服务器使用hf_hub_download下载huggingface上的模型文件

系列文章目录 huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件 文章目录 系列文章目录一、hf_hub_download介绍二、找到需要下载的huggingface文件三、准备工作及下载过程四、全部代码 一、hf_hub_download介绍 hf_hub_download是huggingface官方支持&…

【C++】文件操作

文件操作 一、文本文件&#xff08;一&#xff09;写文件读文件 二、二进制文件&#xff08;一&#xff09;写文件&#xff08;二&#xff09;读文件 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放&#xff0c;通过文件可以将数据持久化&#xff…

支付宝小程序开发踩坑笔记(支付宝、学习强国小程序)

1、接口请求安卓端回调 success&#xff0c;IOS 端回调 fail 原因&#xff1a;dataType 设置不对&#xff0c;默认是 json 格式&#xff0c;对返回数据会进行 json 解析&#xff0c;如果解析失败&#xff0c;就会回调 fail 。加密传输一般是 text 格式。 2、input 禁止输入空格…

【动态规划】【数学】【C++算法】805 数组的均值分割

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 动态规划 数学 805 数组的均值分割 给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中&#xff0c;使得 A 数组和 B 数组不为空&#xff0c;并且 average(A) average(B)…

2788.按分隔符拆分字符串

前言 力扣还挺上道&#xff08;bushi&#xff09;&#xff0c;今天第一次写每日一题&#xff0c;给了个简单等级的数组题&#xff0c;我只能说&#xff0c;首战告捷&#xff08;小白的呐喊&#xff09;&#xff0c;看看这每日一题我能坚持一天写出来&#xff0c; ok&#xff…

Ubuntu安装mysql8详细步骤

1、拉取镜像 docker pull mysql:8.0.20 2、启动镜像 docker run -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0.20 检查是否启动成功 docker ps 3、配置挂载 创建挂载目录&#xff08;请检查保证创建成功&#xff09; mkdir -p /docker/mysql8.0.20/…

Java安全 CC链1分析

Java安全之CC链1分析 什么是CC链环境搭建jdk下载idea配置创建项目 前置知识Transformer接口ConstantTransformer类invokerTransformer类ChainedTransformer类 构造CC链1CC链1核心demo1demo1分析 寻找如何触发CC链1核心TransformedMap类AbstractInputCheckedMapDecorator类readO…