ROS1 与 ROS2 使用区别 【命令】

ROS1 与 ROS2 使用区别

  • [1 介绍](#1 介绍)
  • [2 整体区别](#2 整体区别)
    • [2.1 目录结构](#2.1 目录结构)
    • [2.2 工作空间](#2.2 工作空间)
    • [2.3 依赖初始化](#2.3 依赖初始化)
    • [2.4 功能包](#2.4 功能包)
    • [2.5 运行](#2.5 运行)
    • [2.6 查看节点信息](#2.6 查看节点信息)
    • [2.7 查看话题](#2.7 查看话题)
    • [2.8 访问服务](#2.8 访问服务)
    • [2.9 调用动作](#2.9 调用动作)
    • [2.10 录包播包](#2.10 录包播包)
    • [2.11 rqt](#2.11 rqt)
    • [2.12 rviz](#2.12 rviz)
    • [2.13 parameters](#2.13 parameters)
    • [2.14 ROS Interface](#2.14 ROS Interface)
    • [2.15 ROS Launch](#2.15 ROS Launch)
  • [3 ROS2 命令树](#3 ROS2 命令树)
  • [4 细节区别](#4 细节区别)
    • [ros2 core](#ros2 core)
  • [5 其他](#5 其他)
  • 参考

1 介绍

2 整体区别

2.1 目录结构

目录 ROS1 ROS2
src/ 源代码目录 源代码目录
build/ 编译输出目录 编译输出目录
install/ 安装后的文件目录 安装后的文件目录
devel/ 开发环境相关文件目录
log/ 编译时的日志目录

2.2 工作空间

ROS (ROS 1) ROS2 描述
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace - 初始化工作空间的代码目录
cd ~/catkin_ws cd ~/dev_ws 切换到工作空间目录
catkin_make colcon build 编译整个工作空间
source devel/setup.sh source install/local_setup.sh 使当前工作空间生效

2.3 依赖初始化

ROS (ROS 1) ROS2 [rosdep] ROS2 [rosdepc] 描述
sudo pip3 install rosdepc 安装rosdepc
sudo rosdep init sudo rosdep init sudo rosdepc init 初始化rosdep or rosdepc
rosdep update rosdep update rosdepc update 更新rosdep or rosdepc
cd ~/dev_ws cd ~/dev_ws 切换到工作空间目录
rosdep* install -i --from-path src --rosdistro humble -y rosdepc install -i --from-path src --rosdistro humble -y 使用rosdep or rosdepc 安装依赖
  • rosdep 与 rosdepc
    rosdepc,c指的是Chirna中国,主要用于和rosdep区分。rosdepc 是小鱼提供的? 只动了名称和源地址,将其地址修改为国内gitee地址。
    rosdepc 可能是为了解决国内用户在使用rosdep时可能遇到的网络问题而设计的。rosdepc使用了国内的源,这可能使得在国内使用时更加稳定和快速。

2.4 功能包

ROS (ROS 1) ROS2 描述
cd ~/catkin_ws cd ~/dev_ws/src 切换到工作空间目录
catkin_create_pkg <name> <dependencies> `ros2 pkg create --build-type [ament_cmake ament_python] <package_name>`
rospack list-names ros2 pkg list 列出可用的功能包
rospack list ros2 pkg executables 列出可执行的程序
rospack find <package> ros2 pkg prefix <package_name> 列出功能包路径
ros2 pkg xml 打印功能包的清单内容

2.5 运行

ROS (ROS 1) ROS2 描述
rosrun <package> <executable> <args> ros2 run <package_name> <executable_name> <argv> 运行节点或可执行文件

2.6 查看节点信息

ROS (ROS 1) ROS2 描述
rosnode list ros2 node list 列出当前所有节点
rosnode info <node> ros2 node info <node_name> 查看指定节点信息

2.7 查看话题

ROS (ROS 1) ROS2 描述
rostopic list ros2 topic list 列出所有话题
rostopic echo <topic_name> ros2 topic echo <topic_name> 打印指定话题
rostopic pub <topic_name> <message_type> <values> ros2 topic pub <topic_name> <message_type> <values> 发布话题
rostopic hz <topic_name> ros2 topic hz <topic_name> 查询话题的发布频率
rostopic type <topic_name> ros2 topic type <topic_name> 查看话题的类型
rostopic bw <topic> ros2 topic bw <topic> 查看话题的带宽

2.8 访问服务

ROS (ROS 1) ROS2 描述
rosservice list ros2 service list 列出所有服务
rosservice type <service_name> ros2 service type <service_name> 查看服务类型
rosservice find <service_type> ros2 service find <service_type> 查找指定类型的服务
rosservice call <service_name> <service_type> <values> ros2 service call <service_name> <service_type> <values> 调用服务

2.9 调用动作

ROS ROS2 描述
- ros2 action list 列出所有动作
- ros2 action info <action_name> 查看动作信息
- ros2 action send_goal <action_name> <action_type> <goal> 发送动作

2.10 录包播包

ROS (ROS 1) ROS2 描述
rosbag record <topics...> ros2 bag record <topics...> 录制话题
rosbag play <bag_path> ros2 bag play <bag_path> 播放
rosbag info <bag_path> ros2 bag info <bag_path> 查看bag包信息

2.11 rqt

ROS (ROS 1) ROS2 描述
rqt_graph rqt_graph 显示节点拓扑
rqt_console ros2 run rqt_console rqt_console 查看所有日志消息
rqt_plot rqt 二维数值绘图
rosrun rqt_reconfigure rqt_reconfigure rqt 参数动态配置

2.12 rviz

ROS (ROS 1) ROS2 描述
rosrun rviz rviz ros2 run rviz2 rviz2 启动rviz

2.13 parameters

param 参数是节点所需的配置设置,可以是整数,浮点数,布尔值,字符串或列表。在 ros2 中参数是基于 service 构建的。依旧用表格的方式描述 ROS1 和 ROS2 中参数设计的差异。注:ROS2 的参数是存储在节点中的,ROS1 的参数是存储在 ROS Master 中的,所有在使用的时候一般会有一个节点名称的差距。

命令 ROS1 ROS2 含义
delete rosparam delete /parameter_name ros2 param delete /node_name /parameter_name 删除参数
dump rosparam dump file [namespace] ros2 param dump /node_name 保存参数
get rosparam get /parameter_name ros2 param get /node_name /parameter_name 获取参数
list rosparam list ros2 param list [node_name] 查看参数列表
set rosparam set /parameter_name value ros2 param set /node_name /parameter_name value 设置参数

2.14 ROS Interface

interface 是 ROS2 中将 ROS1 中的 rosmsg 和 rossrv 命令合并以后的命令,使用起来更为统一且简洁。先看看 rosmsg 和 rossrv

  • rosmsg
shell 复制代码
$ rosmsg -v
rosmsg is a command-line tool for displaying information about ROS Message types.

Commands:
    rosmsg show    Show message description
    rosmsg info    Alias for rosmsg show
    rosmsg list    List all messages
    rosmsg md5    Display message md5sum
    rosmsg package    List messages in a package
    rosmsg packages    List packages that contain messages

Type rosmsg <command> -h for more detailed usage
  • rossrv
shell 复制代码
$ rossrv -h
rossrv is a command-line tool for displaying information about ROS Service types.

Commands:
    rossrv show    Show service description
    rossrv info    Alias for rossrv show
    rossrv list    List all services
    rossrv md5    Display service md5sum
    rossrv package    List services in a package
    rossrv packages    List packages that contain services

Type rossrv <command> -h for more detailed usage
  • ros2 interface
shell 复制代码
$ ros2 interface -h
usage: ros2 interface [-h] Call `ros2 interface <command> -h` for more detailed usage. ...

Show information about ROS interfaces

optional arguments:
  -h, --help            show this help message and exit

Commands:
  list      List all interface types available
  package   Output a list of available interface types within one package
  packages  Output a list of packages that provide interfaces
  proto     Output an interface prototype
  show      Output the interface definition

  Call `ros2 interface <command> -h` for more detailed usage.
  • 简单打印
shell 复制代码
rockchip@ubuntu:~$ ros2 interface show std_msgs/msg/Int8
# This was originally provided as an example message.
# It is deprecated as of Foxy
# It is recommended to create your own semantically meaningful message.
# However if you would like to continue using this please use the equivalent in example_msgs.

int8 data
rockchip@ubuntu:~$ ros2 interface show std_srvs/srv/Empty
---
rockchip@ubuntu:~$ 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

2.15 ROS Launch

在 ROS1 中 lauch 使用 xml 格式定义,使用的内容相对比较有限。然而在 ROS2 中 launch 重新设计,采用 Python 脚本的形式进行启动,大致模板可以使用如下:

shell 复制代码
from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():
    return LaunchDescription([
        Node(
            package="turtlesim",
            executable="turtlesim_node",
            name="sim",
        )
    ])

LaunchDescription 中传入了一个 Node 的数组,Node代表了所有的节点信息。参数的含义和使用列举如下:

参数名称 含义 类型 举例
package 包名 str turtlesim
executable 可执行文件的名称 str turtlesim_node
name 节点名称 str sim
namespace 工作空间名称 str turtlesim1
parameters 参数列表 [path 或 Map(key, value)] [{"background_r": 0}] 或 ["./sim.yaml"]
remappings 映射名称 [tuple] [('/turtlesim1/turtle1/pose', '/turtlesim1/turtle1/pose_remap')]

假设我们将之前的模板内容写入到 turtlesim_start.launch.py 中,在加载 ros 环境后,只需执行如下命令即可运行 launch 文件

shell 复制代码
ros2 launch turtlesim_start.launch.py

终端大致打印内容如下:

shell 复制代码
[INFO] [launch]: All log files can be found below /Users/askeynil/.ros/log/2020-09-02-19-33-18-140633-AskeyNildeMacBook-Pro.local-22416
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [turtlesim_node-1]: process started with pid [22418]
[turtlesim_node-1] [INFO] [1599046399.308158593] [sim]: Starting turtlesim with node name /_ros2cli_daemon_1
[turtlesim_node-1] [INFO] [1599046399.342564206] [sim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

3 ROS2 命令树

shell 复制代码
ros2
├── action
│   ├── cancel         # 取消action
│   ├── send_goal      # 发送action目标
│   └── show           # 显示action信息
│
├── bag
│   ├── compress       # 压缩bag文件
│   ├── decompress     # 解压缩bag文件
│   ├── info           # 显示bag文件信息
│   ├── play           # 播放bag文件
│   ├── record         # 记录bag文件
│   └── replay         # 回放bag文件
│
├── component
│   ├── kill           # 杀死组件
│   ├── list           # 列出组件
│   ├── load           # 加载组件
│   ├── restart        # 重启组件
│   ├── set            # 设置组件参数
│   ├── status         # 显示组件状态
│   ├── unset          # 删除组件参数
│   └── info           # 显示组件信息
│
├── daemon
│   ├── start          # 启动daemon
│   ├── stop           # 停止daemon
│   ├── status         # 显示daemon状态
│   └── restart        # 重启daemon
│
├── doctor
│   ├── check          # 检查ROS 2诊断信息
│   └── info           # 显示ROS 2诊断信息
│
├── extension
│   ├── call           # 调用扩展功能
│   ├── list           # 列出扩展功能
│   ├── load           # 加载扩展功能
│   ├── show           # 显示扩展功能信息
│   └── unload         # 卸载扩展功能
│
├── interface
│   ├── list           # 列出接口
│   └── show           # 显示接口信息
│
├── lifecycle
│   ├── change_state   # 更改生命周期状态
│   ├── get_state      # 获取生命周期状态
│   └── set_state      # 设置生命周期状态
│
├── logging
│   ├── get_logger_level     # 获取logger级别
│   ├── set_level            # 设置logger级别
│   └── set_logger_level     # 设置logger级别
│
├── msg
│   └── show           # 显示消息定义
│
├── node
│   ├── cleanup        # 清理节点
│   ├── info           # 显示节点信息
│   ├── kill           # 杀死节点
│   ├── list           # 列出节点
│   ├── log            # 记录节点信息
│   ├── monitor        # 监控节点
│   ├── send_message   # 发送节点间消息
│   ├── set            # 设置节点参数
│   ├── unset          # 删除节点参数
│   └── wait           # 等待节点
│
├── param
│   ├── delete         # 删除参数
│   ├── describe       # 显示参数描述
│   ├── dump           # 导出参数
│   ├── get            # 获取参数
│   ├── list           # 列出参数
│   ├── load           # 导入参数
│   └── set            # 设置参数
│
├── qos
│   ├── get            # 获取QoS配置
│   └── set            # 设置QoS配置
│
├── run
│   ├── launch         # 运行launch文件
│   └── python         # 运行Python脚本
│
├── service
│   ├── call           # 调用服务
│   ├── find           # 查找服务
│   ├── info           # 显示服务信息
│   ├── list           # 列出服务
│   └── type           # 显示服务类型
│
├── srv
│   └── show           # 显示服务定义
│
├── topic
│   ├── bw             # 显示主题带宽
│   ├── echo           # 回显主题数据
│   ├── find           # 查找主题
│   ├── hz             # 显示主题频率
│   ├── info           # 显示主题信息
│   ├── list           # 列出主题
│   ├── pub            # 发布主题数据
│   ├── type           # 显示主题类型
│   └── relay          # 中继主题
│
├── type
│   ├── export         # 导出类型
│   ├── import         # 导入类型
│   ├── list           # 列出类型
│   └── show           # 显示类型定义
│
├── pkg
│   ├── create         # 创建package
│   ├── describe       # 显示package描述
│   ├── executables    # 列出可执行文件
│   ├── list           # 列出packages
│   ├── paths          # 显示package路径
│   ├── prefix         # 显示package前缀
│   └── xml            # 显示package XML
│
├── rosbag2_migration
│   ├── check          # 检查ROS 1 bag文件
│   ├── info           # 显示ROS 1 bag文件信息
│   ├── merge          # 合并ROS 1 bag文件
│   ├── migrate        # 迁移ROS 1 bag文件
│   └── split          # 分离ROS 1 bag文件
│
├── security
│   ├── create_key     # 创建密钥
│   ├── create_permission    # 创建权限
│   ├── grant_permission     # 授予权限
│   ├── info           # 显示安全信息
│   ├── revoke_permission    # 撤销权限
│   └── set_permission  # 设置权限
│
└── version             # 显示ROS 2版本信息

4 细节区别

ros2 core

在ROS1中,roscore是主节点。其他节点依赖于它。但在ROS2中,不再有"主节点"(和"从节点")。roscore退出了,取而代之的是DDS(Data Distribution Service)。

在ROS1中,roscore驱动的是客户端/服务器(或从节点/主节点)架构。对于ROS2,DDS驱动的是分布式架构。

  • ros2 humble
shell 复制代码
rockchip@ubuntu:~/ros2_humble$ roscore
-bash: roscore: command not found
rockchip@ubuntu:~/ros2_humble$ ros2core
-bash: ros2core: command not found
rockchip@ubuntu:~/ros2_humble$ ros2 core
usage: ros2 [-h] [--use-python-default-buffering] Call `ros2 <command> -h` for more detailed usage. ...
ros2: error: argument Call `ros2 <command> -h` for more detailed usage.: invalid choice: 'core' (choose from 'action', 'bag', 'component', 'daemon', 'doctor', 'extension_points', 'extensions', 'interface', 'launch', 'lifecycle', 'multicast', 'node', 'param', 'pkg', 'run', 'security', 'service', 'test', 'topic', 'trace', 'wtf')
rockchip@ubuntu:~/sen/ros2_humble$

5 其他

环境变量打印

shell 复制代码
printenv | grep -i ROS

参考

1、使用命令行工具进行内省

2、ROS2 Humble 学习【openEuler】

3、Where is roscore in ROS2?

4、ROS指令大全(含ROS1和ROS2)

5、ROS2常用指令学习笔记(适用于humble)

6、ROS2 CLI Tools

7、ROS2 与 ROS1命令行对比

8、ROS(机器人操作系统)底层原理及代码剖析

9、ROS机器人开发实践

10、理解ROS节点

11、机器人操作系统(ROS)浅析[2015年].pdf

12、[ROS学习]4. ROS命令行工具

13、【学习笔记】ROS2纯小白 - Beginner:Client libraries(一):工作空间与包

相关推荐
bohu839 小时前
ros2笔记-6.2 使用urdf创建机器人模型
机器人·建模·ros2·rviz·urdf
ironmao13 小时前
MATLAB安装Robotics Toolbox(机器人工具箱)插件
开发语言·matlab·机器人
艾思科蓝 AiScholar15 小时前
【南京工业大学主办 | JPCS独立出版 | 高届数、会议历史好 | 投稿领域广泛】第八届智能制造与自动化国际学术会议(IMA 2025)
大数据·运维·人工智能·机器人·自动化·云计算·制造
滴滴哒哒答答17 小时前
《自动驾驶与机器人中的SLAM技术》ch7:基于 ESKF 的松耦合 LIO 系统
人工智能·机器人·自动驾驶
一颗小树x2 天前
【机器人】复现SceneGrasp 同时支持多目标 3D物体重建、6DoF位姿估计、抓取预测
机器人·论文复现·scenegrasp·3d物体重建·6dof位姿估计·抓取预测
cnbestec2 天前
Optocon光纤温度传感器原理及技术亮点
人工智能·科技·机器人
昱感_sensemi2 天前
“多维像素”多模态雷视融合技术构建自动驾驶超级感知能力|上海昱感微电子创始人蒋宏GADS演讲预告
人工智能·机器学习·ai·机器人·自动驾驶
艾思科蓝 AiScholar2 天前
【IEEE出版,连续4年EI收录,检索稳定 |南京航空航天大学主办,航空航天交叉研究院承办】第五届传感器与信息技术国际学术会议(ICSI 2025)
数据库·人工智能·物联网·机器学习·目标跟踪·机器人·信号处理
速科德电机科技2 天前
机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除
机器人·去毛刺·去毛刺主轴