文章目录
- 前言
- 一、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 文件路径
重点标记性文字设置
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文
具体的标记性正文
结束语
感谢阅读吾之文章,今已至此次旅程之终站 🛬。
吾望斯文献能供尔以宝贵之信息与知识也 🎉。
学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。
然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。