ROS1入门之节点与指令

news2025/2/3 15:58:04

文章目录

  • 前言
  • 一、RO1的安装与测试
    • 1.ROS1安装
    • 2.ROS1测试
  • 二、ROS1创建节点
    • 1.创建工作空间
    • 2.创建功能包
    • 3.创建节点
    • 4.配置CMakeLists
    • 5.编译运行节点
      • 🍉编译节点
      • 🍓source环境
      • 🍎运行节点
  • 三、ROS1常用指令
    • 1.rosnode
      • ✨rosnode list
      • 🎊rosnode info
      • 🎆rosnode kill
      • 🧨rosnode cleanup
      • 🎉rosnode ping
    • 2.rostopic
      • 🎄rostopic list
      • 🎈rostopic type
      • 🎁rostopic info
      • 🎎rostopic echo
      • 🎏rostopic pub
    • 3.rosmsg
      • 🎨rosmsg list
      • 🧶rosmsg show
    • 4.rosservice
      • 🧵rosservice list
      • 🍬rosservice type
      • 🍭rosservice info
      • 🍡rosservice args
      • 🧁rosservice call
    • 5.rossrv
      • 🍫rossrv list
      • 🍧rossrv info
      • 🍹rossrv show
    • 6.rosparam
      • 🌺rosparam list
      • 🌻rosparam get
      • 🌼rosparam set
      • 🌷rosparam delete
      • 🥀rosparam load
      • 🌸rosparam dump
  • 结束语


  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助欢迎关注点赞收藏(一键三连)订阅专栏

前言

提示:这里可以添加本文要记录的大概内容:

笔记均来源于Autolabor,B站视频教程:ROS1。


一、RO1的安装与测试

在这里插入图片描述

1.ROS1安装

ROS1的安装在网上基本上都能找到的,ROS1安装文章推荐:ROS1安装,这里包含了从虚拟机的安装以及ROS1的安装。

2.ROS1测试

当你的ROS安装成功后,可以通过运行ROS 内置的小程序以检测 ROS 环境是否可以正常运行,运行小乌龟流程如下:

  • 打开三个命令行终端(ctrl + alt + T)
  • 命令行终端1输入:roscore
  • 命令行终端2输入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
  • 命令行终端3输入:rosrun turtlesim turtle_teleop_key(在3中可以通过上下左右控制2中乌龟的运动)

运行结果如下所示:
在这里插入图片描述

注意:光标必须聚焦在键盘控制窗口,否则无法控制乌龟运动。

二、ROS1创建节点

1.创建工作空间

节点需要存在于功能包当中,功能包需要存在于工作空间当中,因此,想要想创建一个节点,就必须先创建一个工作空间,然后再创建功能包。本质上工作空间就是我们所熟知的文件夹。

mkdir -p 自定义空间名称/src
mkdir -p catkin/src

目录创建成功后,需要进去到此目录下,也就是我们所需要的工作空间,在此工作空间下使用catkin_make 这个指令来构建catkin工作空间中的ROS项目。catkin是ROS中使用的一种构建系统,类似于catkin工作空间中的 Makefile。它会读取package中的package.xml文件,并根据其中的依赖关系和指令来编译和安装所有的ROS包。

catkin_make

运行过程如下:
在这里插入图片描述
结果如下图所示,会自动生成build和devel目录。
在这里插入图片描述

2.创建功能包

在上面的步骤中我们创建好了我们ROS的工作空间后,就可以创建功能包了。这里创建功能包有两种方式:

  • 命令行
    进入src目录下,创建功能包,并为其添加roscpp、rospy和std_msgs依赖。
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

在这里插入图片描述
turtle_circle就是我们创建的功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

  • vscode
    进入工作空间启动 vscode,注意一点要在工作空间这个大目录下,为了等下方便一键编译。
cd 工作空间
code .

选定 src 右击 —> create catkin package
在这里插入图片描述
设置包名和添加依赖
在这里插入图片描述
在这里插入图片描述
至此功能包创建完毕,如下图所示。
在这里插入图片描述

3.创建节点

进入 ros 功能包的 src 目录编辑源文件,即就是CPP文件。
在这里插入图片描述
这里建议源文件名称功能包名称+"_node",这样就不需要修改CMakeLists下的部分内容。比如说添加可执行程序这里。
在这里插入图片描述
这里写一个简单的hello world!

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //执行 ros 节点初始化
    ros::init(argc,argv,"hello");
    //创建 ros 节点句柄(非必须)
    ros::NodeHandle n;
    //控制台输出 hello world
    ROS_INFO("hello world!");

    return 0;
}

4.配置CMakeLists

设置添加为可执行文件,并设置库链接文件。

add_executable(可执行程序名
  src/源文件名.cpp
)
target_link_libraries(可执行程序名
  ${catkin_LIBRARIES}
)

如果按照我上面建议的命名源文件这里直接把注释打开,不用修改即可,还是比较方便的。
在这里插入图片描述

5.编译运行节点

注意以下都是在工作空间下执行的。

🍉编译节点

这里编译也有两种方式:

  • 命令行
cd 自定义空间名称
catkin_make

在这里插入图片描述

  • vscode
    快捷键:Ctrl+Shift+B
    在这里插入图片描述
    在这里插入图片描述

🍓source环境

打开两个命令行终端,第一个输入(不需要到工作空间下)

roscore

roscore是节点和程序的集合,这些节点和程序是基于ROS的系统所必需的,于是可以称为ros核心core服务即名字。必须运行 roscore 才能使 ROS 节点进行通信。它是使用 roscore 命令启动的。

第二个输入(需要到工作空间下)

cd 工作空间
source ./devel/setup.bash

可以将这些新编译后的软件包的路径添加到当前终端的环境变量中,使得 ROS系统能够找到这些软件包。

🍎运行节点

然后就可以运行节点,注意这里的节点是在CMakeLists.txt中添加的可执行程序的名字的,即可执行节点。

rosrun 包名 C++节点

在这里插入图片描述

三、ROS1常用指令

1.rosnode

rosnode 是用于获取节点信息的命令。

✨rosnode list

rosnode list命令的作用是列出当前运行的ROS节点(processes)。节点是ROS中通信的基础,它对应于一个执行的ROS进程。这个命令会显示所有正在运行的ROS节点的名称和它们的状态信息。这对于监控一个ROS系统的运行状态非常有用,尤其是在系统中有多个节点在同时运行时。
指令格式如下:

rosnode list

在这里插入图片描述

🎊rosnode info

rosnode info 的作用是提供关于指定节点的详细信息
指令格式:

rosnode info <node_name>
  • <node_name>是你想要获取信息的ROS节点名称。

在这里插入图片描述

🎆rosnode kill

rosnode kill 杀死某个节点,用于终止指定的 ROS 节点。这个命令类似于 Unix 系统中的 kill 命令,它发送一个信号到指定的节点进程,以请求它终止。
指令格式如下:

rosnode kill <node_name> [<signal>]
  • <node_name> 是你想要终止的 ROS 节点的名称
  • 是一个可选的信号编号,默认是 SIGTERM(终止信号),表示请求节点正常退出。如果你想要强制终止节点,可以使用 SIGKILL 信号,但这通常不推荐,因为它不会给节点机会执行清理工作或保存状态。

🧨rosnode cleanup

rosnode cleanup 清除不可连接的节点,用于清理 ROS 节点留下的残余文件和临时数据。当一个 ROS 节点被终止时,它可能会留下一些临时文件或未完成的日志文件,rosnode cleanup 命令可以帮助你删除这些文件,释放磁盘空间。
指令格式如下:

rosnode cleanup [<node_name>]
  • <node_name> 是你想要清理的 ROS 节点的名称。如果省略 <node_name>,rosnode cleanup 将会清理所有已终止的节点留下的残余文件。

rosnode cleanup 命令在节点意外终止或需要重新启动节点时非常有用,它可以帮助你清理不必要的文件,保持系统的整洁。在使用这个命令时,请确保你已经结束了与节点相关的所有操作,因为清理过程是不可逆的,一旦文件被删除,你就无法恢复它们。

🎉rosnode ping

rosnode ping 测试到节点的连接状态,该命令通过向指定的节点发送ping消息并等待回复来判断节点是否可达,以及估算通信的往返时间(RTT)。这对于诊断ROS网络中的故障和性能问题非常有用。

rosnode ping 的基本指令格式如下:

rosnode ping [node]
  • node是要ping的目标节点的名称或话题名称。
  • 如果你不知道节点的确切名称,可以使用 rosnode list 命令来获取当前运行的节点列表。

示例如下:
在这里插入图片描述

2.rostopic

rostopic包含rostopic命令行工具,用于显示有关ROS 主题的调试信息,包括发布者,订阅者,发布频率和ROS消息。它还包含一个实验性Python库,用于动态获取有关主题的信息并与之交互。

🎄rostopic list

rostopic list用于列出当前 ROS 系统中所有激活的主题
指令格式:

rostopic list 

在这里插入图片描述

🎈rostopic type

rostopic type 是用来查看主题(topic)的数据类型的命令,ROS 将解析指定的主题,并输出该主题预期接收或发送的消息类型

指令格式:

rostopic type [options] <topic>
  • [options] 表示一系列可选参数,可以用来调整命令的行为。
  • 是你想要查询数据类型的ROS主题名称。
    在这里插入图片描述
    启动一个乌龟节点附带产生了三个话题,分别是:

/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

其消息格式(消息格式定义了如何在节点之间传递的数据的结构)分别为:

geometry_msgs/Twist
turtlesim/Color
turtlesim/Pose

🎁rostopic info

rostopic info用于显示有关活动的主题的详细信息。
基本格式如下:

rostopic info [topic]

在这里插入图片描述
打印出来的内容包含三个信息:Type,Pubulisher,Subscribers.

  • Type就是前面说的消息格式,即节点之间传递的数据的结构
  • Pubulisher 发布者,即teleop_turtle:键盘按下发布消息
  • Subscribers 订阅者,即turtlesim:订阅主题接受键盘的消息

🎎rostopic echo

rostopic echo 用于打印出 topic 正在发布的消息内容
指令格式:

rostopic echo [topic]

在这里插入图片描述

🎏rostopic pub

rostopic pub 用于向 topic 发布消息。
指令格式:

rostopic pub [topic] [msg-type] [data...]
  • [topic] 是你想要发布消息的 topic 名称。
  • [msg-type] 是消息的类型,格式为 package-name/type-name,例如 std_msgs/String 或 geometry_msgs/Twist。
  • [data…] 是将要发布的消息数据,根据消息类型的不同,数据的格式也会有所不同。

要向名为 chatter 的 topic 发布一个包含字符串的消息,配合 -r 选项可以指定发布消息的速率。

rostopic pub chatter std_msgs/String "Hello, world!"

执行这个命令后,chatter topic 将接收到一个字符串类型的消息,内容为 “Hello, world!”,并且这将会以每秒一次的速率向 chatter topic 发布消息。
在这里插入图片描述
新打开一个终端可以看到新增了一个话题chatter,然后将此话题的内容打印出来如下所示。
在这里插入图片描述

3.rosmsg

rosmsg是用于显示有关 ROS消息类型的 信息的命令行工具。

🎨rosmsg list

rosmsg list用于列出所有可用的消息类型。

rosmsg list 

在这里插入图片描述### 🎡rosmsg info

rosmsg info显示消息信息。
指令格式:

rosmsg info [message-type]
  • [message-type] 是你想要查询信息的 ROS 消息类型。
    在这里插入图片描述
    这是消息类型就是上面 /turtle1/cmd_vel话题的,其消息格式如上所示。这条消息包含两个内容,六个参数。第一个内容 linear 是线速度,第二个内容 angular 是角速度。线速度用于控制乌龟的前进与后退;角速度用于控制乌龟的旋转方向.

🧶rosmsg show

rosmsg show显示信息描述。
指令格式:

rosmsg show [message-type]
  • [message-type] 是你想要查询信息的 ROS 消息类型。

在这里插入图片描述

4.rosservice

rosservice包含用于列出和查询ROSServices的rosservice命令行工具。调用部分服务时,如果对相关工作空间没有配置 path,需要进入工作空间调用 source ./devel/setup.bash

🧵rosservice list

rosservice list 用于列出当前正在运行的 ROS 服务及其相关信息
指令格式:

rosservice list

在这里插入图片描述

🍬rosservice type

rosservice type用于查看服务的类型信息。
指令格式:

rosservice type [service-name]

在这里插入图片描述

🍭rosservice info

rosservice info主要用于获取关于特定服务的详细信息,如服务的类型、服务器的接口、服务调用的时间等。

rosservice info [service-name]

在这里插入图片描述

🍡rosservice args

rosservice args 用于查看服务请求的参数。
指令格式:

rosservice args [service-name]

在这里插入图片描述

🧁rosservice call

rosservice call用于从命令行发起服务调用。它允许你在不编写代码的情况下,通过发送服务请求来执行远程过程调用(RPC)。
指令格式如下:

rosservice call [service-name] arg1=value1 arg2=value2 ...

5.rossrv

rossrv是用于显示有关ROS服务类型的信息的命令行工具,与 rosmsg 使用语法高度雷同。

🍫rossrv list

rossrv list 用于列出可用服务信息。

rossrv list

在这里插入图片描述

🍧rossrv info

rossrv info 是用于显示关于特定服务的详细信息,包括服务的类型、参数和服务提供者的信息。
指令格式

rossrv info [service-name]

在这里插入图片描述

🍹rossrv show

rossrv show显示服务消息详情的。
指令格式

rossrv show [service-name]

在这里插入图片描述

6.rosparam

rosparam包含rosparam命令行工具,用于使用YAML编码文件在参数服务器上获取和设置ROS参数。

🌺rosparam list

rosparam list 用于列出所有可用的参数。
指令格式:

rosparam list

在这里插入图片描述

🌻rosparam get

rosparam get 用于获取参数值。

rosparam get [param-service]

在这里插入图片描述

🌼rosparam set

rosparam set用于设置或者修改参数值。

rosparam set [param-service]  [value]

在这里插入图片描述

🌷rosparam delete

rosparam delete 用于删除参数。

rosparam delete [param-service]

在这里插入图片描述

🥀rosparam load

rosparam load 用于从 YAML 文件中加载参数到当前的 ROS 命名空间中。这个命令对于在节点启动时加载配置非常有用,它可以替代在代码中硬编码参数的做法,使得参数配置更加灵活和可配置。
指令格式:

rosparam load [file]

  • file 是包含参数的 YAML 文件路径

🌸rosparam dump

rosparam dump 用于将当前命名空间下的所有参数以 YAML 格式导出到一个文件中。这个命令对于备份参数、保存配置或在不同环境之间迁移参数非常有用。
指令格式:

rosparam dump  [file]
  • file 是导出参数的 YAML 文件路径

重点标记性文字设置
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

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

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

相关文章

C++进阶--多态

概念 多态是面向对象编程中的一个重要概念&#xff0c;它允许不同类型的对象对同一个消息做出不同的响应。具体的来说&#xff0c;当相同的消息传递给不同的对象时&#xff0c;这些对象能够以不同的方式进行处理&#xff0c;从而产生不同的行为。 对于多态的实现&#xff0c;…

FLASH存放uboot及VxWorks并引导自启动

本文使用飞腾E2000Q miniITX开发板,验证在E2000启动用的qspi flash中同时写入uboot固件和vxWorks镜像,并测试开机自动引导启动。 一、环境准备: 1.1 硬件环境: 1.E2000Q miniITX行业开发板一块 2.U盘一个 3.TTL调试串口线一条 1.2 软件环境: 1.做好的vxWorks.bin(公…

2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系

赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。 问题一.七鳃鳗性别比例对生态系统的影响 问题分析 建立一个简化版的模型,来探讨以下问题: 1.我们假设七鳃鳗种群的增长遵循Logistic生长模型,其中食…

Linux网络编程 基础

OSI七层模型 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#xff0c;也就是我们常说的…

《HTML 简易速速上手小册》第9章:HTML5 新特性(2024 最新版)

文章目录 9.1 HTML5 新增标签和属性9.1.1 基础知识9.1.2 案例 1&#xff1a;创建一个结构化的博客页面9.1.3 案例 2&#xff1a;使用新的表单元素创建事件注册表单9.1.4 案例 3&#xff1a;创建一个具有高级搜索功能的搜索表单 9.2 HTML5 表单增强9.2.1 基础知识9.2.2 案例 1&a…

海洋鱼类检测7种YOLOV8NANO

【免费】海洋鱼类检测&#xff0c;7种类型&#xff0c;YOLOV8训练&#xff0c;转换成ONNX&#xff0c;OPENCV调用资源-CSDN文库 采用YOLOV8NANO训练模型&#xff0c;得到PT模型&#xff0c;然后转换成ONNX&#xff0c;供OPENCV的DNN调用&#xff0c;摆脱PYTORCH依赖&#xff0c…

中小学电子编程内部集中培训第五课

超声波 小车例程 测试距离 此程序把超声波测量的距离通过串口打印出来&#xff0c;程序中会用到控制模块中的 初始化&#xff0c;串口模块中的比特率设置、Serial 打印和 Serial 打印自动换行&#xff0c;云开智 能中的超声波测距模块&#xff0c;完成后如图 19-1&#xff1a;…

RK3588开发板Ubuntu与开发板使用U盘互传

1 将 U 盘(U 盘的格式必须为 FAT32 格式&#xff0c;大小在 32G 以下)插到开发板的 usb 接口&#xff0c;串口打印信息如下所示&#xff0c;U 盘的设备节点是/dev/sdb4。U 盘的设备节点不是固定的&#xff0c;根据实际情况来查看设备节点。 2 输入以下命令挂载 U 盘&#xff0c…

ssl数字证书是什么

SSL证书是一种数字证书&#xff0c;用于在网络传输中提供加密和身份验证功能&#xff0c;从而保护数据的安全性和完整性。正规的SSL证书大多是由由权威的证书颁发机构&#xff08;CA&#xff09;颁发的&#xff0c;例如Certum、Digicert、Sectigo等&#xff0c;它们颁发的SSL数…

Qt多线程与SocketTCP的简单实现

1.相关说明 多线程实现Qt的socket编程实现客户端发送文件&#xff0c;服务端接收文件&#xff0c;并且在客户端设置了心跳&#xff0c;用于监控服务端是否存活。因为Qt中socket套接字发送数据&#xff0c;会先把数据发送至缓冲区中&#xff0c;在发送数据过程中&#xff0c;soc…

基于Transformer结构的扩散模型综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

【Qt基本功修炼】Qt线程的两种运行模式

1. 前言 QThread是Qt中的线程类&#xff0c;用于实现多线程运行。 QThread有两种工作模式&#xff0c;即 消息循环模式无消息循环模式 两种模式分别适用于不同的场景。下面我们将从多个方面&#xff0c;讲解QThread两种工作模式的区别。 2. 消息循环模式 2.1 实现原理 Q…

Tomcat 部署项目时 war 和 war exploded区别

在 Tomcat 调试部署的时候&#xff0c;我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别&#xff1a; war 模式&#xff1a;将WEB工程以包的形式上传到服务器 &#xff1b;war exploded 模式&#xff1a;将WEB工程以当前文件夹的位置…

《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)

文章目录 5.1 数据合并&#xff1a;Concatenate 和 Merge5.1.1 基础知识5.1.2 重点案例&#xff1a;客户订单数据合并5.1.3 拓展案例一&#xff1a;产品目录和销售数据合并5.1.4 拓展案例二&#xff1a;员工信息和部门数据合并 5.2 数据透视和重塑5.2.1 基础知识5.2.2 重点案例…

保姆级系列:各种打印机驱动的安装和使用

保姆级系列&#xff1a;各种打印机驱动的安装和使用 1.介绍2.下载3.安装4.实践教程5.总结 1.介绍 市面上打印机品牌和型号众多&#xff0c;打印机接口目前主要分为如下几种&#xff1a; 逻辑端口&#xff1a;TCP/IP、WSD、USB、LPT、COM 物理端口&#xff1a;RJ45、DB15母、US…

JDK1.8源码环境搭建介绍

目录 一、环境说明 1.1 JDK 1.8 1.2 IDEA 二、搭建过程说明 2.1 创建Java工程 2.2 源码准备 2.2.1 查找源码 2.2.2 解压源码到工程中 2.3 更新SDK 2.3.1 更新工程SDK 2.3.1.1 新建SDK 2.3.1.2 更新工程SDK 2.4 测试 2.4.1 解决报错问题 2.4.1.1 解决 sun.awt.UNI…

C#,桌面游戏编程,数独游戏(Sudoku Game)的算法与源代码

本文包括以下内容&#xff1a; &#xff08;1&#xff09;数独游戏的核心算法&#xff1b; &#xff08;2&#xff09;数独游戏核心算法的源代码&#xff1b; &#xff08;3&#xff09;数独游戏的部分题目样本&#xff1b; &#xff08;4&#xff09;适老版《数独》的设计原则…

Mirus TransIT-X2® 在RNAi干扰实验中性能数据展示

不同RNAi干扰途径示意图 基因沉默相关功能研究在分子和细胞生物学中发挥着重要作用&#xff0c;化学转染也在该研究领域扮演者重要角色。常见参与RNAi干扰途径的天然RNA分子包括&#xff1a; ★.小干扰 RNA (Small interfering RNAs, siRNA) &#xff1a;由双链 RNA(dsRNA)断裂…

第0章 Linux 基础入门

第0章 Linux 基础入门 RHCSA Red Hat Certified System Administrator 红帽认证系统管理员。 什么是计算机 计算机的组成&#xff1a; 控制器 运算器 存储器 输出设备 输入设备 计算机只能识别0和1&#xff0c;也就是二进制数。 为什么要学习Linux Linux 因其高效率…

零基础爬什么值得买的榜单——爬虫练习题目一(答二)

新问题总在解决老问题之后出现 引言原因正文 开整方法一代码运行效果 方法二代码运行结果 推荐 补充两个请求头的参数知识RefererUser-Agent 结尾 引言 今天心情不是很好 但是得更新呀 其实我写博客的一方面 也是希望大家能够监督我 让我尽量少情绪化 保持一个应有的速率做正确…