ROS指令大全

1.ROS目录架构

image-20230629234421096

工作空间(Workspace)是一个存放工程开发相关文件的文件夹

  • src:代码空间(Source Space)
  • build:编译空间(Build Space)
  • devel:开发空间(Development Space)
  • install:安装空间(Install Space)
image-20230630000753143

工作空间(Workspace)是一个存放项目开发相关文件的文件夹;是开发过程的大本营。

  • src:代码空间(Source Space)
  • build:编译空间(Build Space)
  • install:安装空间(Install Space)
  • log:日志空间(Log Space)

2.ROS常用指令

2.1ROS1指令

2.1.1工作空间和功能包指令

创建工作空间

1
2
3
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

编译工作空间

1
2
cd ~/catkin_ws
catkin_make

设置环境变量

1
source devel/setup.bash

检查环境变量

1
echo $ROS_PACKAGE_PATH

image-20230629233858309

创建功能包

1
2
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp

编译功能包

1
2
3
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

注:同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包!

2.1.2基本指令

  • source devel/setup.bash:更新当前运行环境
  • roscorce:启动master主节点,运行 ROS1 程序之前必须要执行的一个命令,执行后该程序将一直处于 运行/挂起 状态,直至结束
  • rosrun 包名 可执行程序名:启动单个ros程序
  • roslaunch 包名 launch文件名:一次性启动多个ros程序,同时launch文件中可能包含程序运行用到的参数

2.1.3节点命令

  • rosnode list:查看当前存在的全部节点
  • rosnode info 节点名:查看节点基本信息
  • rosnode ping 节点名:查看节点是否能正常通信
  • rosnode machine 计算机主机名:查看其他计算机中的节点信息

可在终端中查看计算机主机名:

  1. 终端输入命令行开头有“xxx@xxx”格式的信息,@前代表当前所在的用户名,@之后代表的是计算机的主机名
  2. ②执行命令hostname查看计算机主机名
  • rosnode kill 节点名:杀死某一节点
  • rosnode clean:彻底清楚已经结束却仍然残留的节点

2.1.4话题命令

  • rostopic list:查看当前存在的所有话题
  • rostopic info 话题名:查看某一话题的基本信息
  • rostopic echo 话题名:输出某一话题发布的信息
  • rostopic hz 话题名:查看某一话题发布频率
  • rostopic pub 话题名 参数信息:动态的发布某一话题信息,该话题必须是处于运行状态的

2.1.5服务命令

  • rosservice list:查看当前存在的所有服务
  • rosservice info 服务名:查看某一服务的基本信息
  • rosservice call 服务名 参数信息:动态请求服务

2.1.6消息命令

  • rosmsg show 消息名称 / rosmsg info 消息名称:查看某一消息的数据结构
  • rosmsg md5 消息名称:查看当前消息的md5值,常用于不同开发者使用同一自定义消息时,出现自定义消息被一方更改,而另一方不知情,导致程序运行失败的情况

2.1.7服务消息命令

  • rossrv show 消息名称 / rossrv info 消息名称:查看某一服务消息的数据结构
  • rossrv md5 消息名称:查看当前服务消息的md5值

2.1.8录包命令

  • rosbag record [-O bag_name.bag] 话题:录制指定话题到文件中
  • rosbag info 包名:显示一个bag包的基本信息,比如包含哪些话题
  • rosbag play [--pause] [-l] 包名:回放一个或多个bag,–pause:空格控制暂停,-l:循环播放
  • rosbag check 包名:检查一个bag包在当前系统中是否可以回放和迁移
  • rosbag compress 包名:解压缩一个或多个bag包
  • rosbag decompress 包名:解压缩一个或多个bag包
  • rosbag reindex 包名:重新索引一个或多个损坏的bag包

2.1.9数据可视化命令

  • rviz (rviz文件名):可视化展示话题、服务等数据信息
  • gazebo:3D展示 ROS 程序
  • rqt:展示节点之间的通信关系
  • rosrun rqt_publisher rqt_publisher:动态发送话题信息,常用于动态调试机器运动速度

更高阶的可视化指令移步古大佬的论坛观看:ROS 常用GUI测试工具 - 古月居 (guyuehome.com)

2.2ROS2指令

2.2.1工作空间和功能包指令

创建工作空间

1
2
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

编译工作空间

1
2
3
sudo apt install python3-colcon-ros
cd ~/dev_ws
colcon build

设置环境变量

1
2
source install/local_setup.sh
echo "source ~./dev_ws/install/local_setup.sh" >> ~/.bashrc

创建功能包

1
2
3
cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake 包名
ros2 pkg create --build-type ament_python 包名

注:ament_cmakeament_python分别为c++和python格式的功能包,两种功能包格式不同

编译功能包

1
2
3
4
cd ~/dev_ws/src
colcon build
cd ~/dev_ws
source install/local_setup.bash

注:同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包!

自动安装依赖

1
2
3
4
5
sudo apt install -y python3-pip
sudo pip3 install rosdepc
sudo rosdepc init & rosdepc update
cd ~/dev_ws
rosdepc install -i --from-path src --rosdistro humble -y

注:自动安装依赖常用于从其余地方copy的代码文件,一般都需要先安装一些依赖包才能正常编译。

humble要根据自己的ros2版本型号来进行修改

由于国外网络受限,推荐使用鱼香ROS大佬的rosdepc,更适用于国内环境

2.2.3包管理工具-ros2 pkg

  • ros2 pkg create 包名:创建功能包,指定包名、编译方式、依赖项、节点名等
  • ros2 pkg list:查看系统中功能包列表
  • ros2 pkg executables 包名:查看包内可执行文件列表

2.2.4节点运行工具-ros2 run

  • ros2 run 包名 节点名:运行包内节点功能

2.2.5节点查看工具-ros2 node

  • ros2 node list:查看当前域内(ROS_DOMAIN_ID相同的节点组)活动的节点列表
  • ros2 node info 节点名:查看节点详细信息,包括订阅、发布的消息,开启的服务和动作等

2.2.6主题操作工具-ros2 topic

  • ros2 topic list:列出域内可使用的主题列表
  • ros2 topic info 主题名:显示主题消息类型,订阅者数量,发布者数量等
  • ros2 topic find 消息类型:按消息类型查找相关主题
  • ros2 topic hz 主题名:显示主题平均发布频率
  • ros2 topic bw 主题名:显示所查阅主题的带宽
  • ros2 topic delay 主题名:通过header中的时间戳计算消息延迟
  • ros2 topic echo 主题名:在控制台显示主题消息
  • ros2 topic pub 主题名 消息类型 消息内容:通过命令行发布指定主题消息

2.2.7接口操作工具-ros2 interface

  • ros2 interface list:分类显示系统内所有的接口,包括消息(Messages)、服务(Services)、动作(Actions)
  • ros2 interface package 接口名:显示指定接口包内的子接口
  • ros2 interface packages:显示指定接口包
  • ros2 interface show 接口名:显示指定接口的详细内容
  • ros2 interface proto 消息名:显示消息模板

2.2.8服务操作工具-ros2 service

  • ros2 service list:列出域内服务列表,-t可同时列出服务消息类型
  • ros2 service type 服务名:列出指定服务的数据类型
  • ros2 service find 服务类型:列出域内使用指定数据类型的服务
  • ros2 service call 服务名 类型名 请求数据:通过命令行同步请求服务
    • 示例:ros2 service call /change_map_name duckietown_interface/srv/ChangeMap "{map_name: '4way'}"

2.2.9动作操作工具-ros2 action

  • ros2 action list:列出域内动作列表,-t可同时列出服务消息类型
  • ros2 action info 动作名:查看指定action信息,可以看到服务端和客户端情况
  • ros2 action send_goal 动作名 类型 数据 --feedback:模拟客户端发起动作请求
    • 示例:ros2 action send_goal /crossing_acton duckietown_interface/action/Crossing "{speed: 0.2, direction: 'right'}" --feedback

2.2.10参数操作工具-ros2 param

  • ros2 param list:列出域内可用参数列表
  • ros2 param get 节点名 参数名:查看指定参数当前的值
  • ros2 param set 节点名 参数名:设置指定参数的值
  • ros2 param delete 节点名 参数名:删除参数
  • ros2 param describe 节点名 参数名:显示有关已声明参数的描述性信息,声明参数时添加描述性信息可查看
  • ros2 param dump 节点名 --output-dir <保存路径>:所有当前参数值“转储”到文件中保存以供以后使用
    • 示例:ros2 param dump /line_detect_node --output-dir ~/ros2_ws/src/line_detect/line_detect/
  • ros2 run 包名 节点名 --ros-args --params-file 文件名:加载已有参数到节点中
    • 示例:ros2 run line_detect line_detect_node --ros-args --params-file src/line_detect/line_detect/line_detect_node.yaml

2.2.11数据可视化命令

  • rviz2 (rviz2 文件名):可视化展示话题、服务等数据信息
  • rqt:展示节点之间的通信关系
  • ros2 run rqt_console rqt_console:启动rqt_console

更多命令行参数移步下面的网址观看:

(70条消息) ROS2学习笔记(五)-- ROS2命令行操作常用指令总结(一)_溪风沐雪的博客-CSDN博客

(70条消息) ROS2学习笔记(九)-- ROS2命令行操作常用指令总结(二)_ros2 run_溪风沐雪的博客-CSDN博客

ROS2常用命令行工具 - 古月居 (guyuehome.com)