ROS2——常见的指令

发布时间:2024年01月12日

在使用source ~/bookros_ws/install/setup.bash后,可以让ROS2找到这个工作空间,进而可以调用相关的命令

概述

ros2 <command> <verb> [<params>|<option>]*这是ROS2与系统交互的方式
在终端输入ros2,即可查看相关指令,如action\bag\node\launch等操作

image.png

pkg

我们可以通过ros2 pkg list来查看系统中有哪些安装包,我们可以看到通过鱼香ROS安装后的ROS系统内,包安装的是非常全的。我们可以pkg命令来查看某个包内的可执行文件。
image.png
ros2的终端操作也支持"tab"补全
当连续按下两次"tab"时,可以看到后续可能会用到的内容

譬如当我们输入ros2后,按下两次tab,会出现如下列表对我们进行提示
image.png

run

当需要执行ros2中的文件时,我们使用run命令。它需要两个参数:

  • 第一个参数为可执行文件所在的包
  • 第二个参数为可执行文件的名称
    ros2 run demo_nodes_cpp talker
    image.png

在运行程序时,可以启动日志,获得更详细的调试信息

日志分为四个等级,一次提高:DEBUG INFO WARN ERROR FATAL

ros2 run br2_basics logger --ros-args --log-level debug

image.png|575

node

一个终端只能执行一个节点,因此需要我们打开多个终端来观测程序的运行状况。因此计算图的重要性得以体现,它可以帮助我们梳理各节点的运行状况。

image.png

使用node list命令,可以查看当前运行的节点,可以看出,当前只有一个节点在运行

$ ros2 node list
/talker

节点/talker不仅仅是在屏幕上打印信息,它还通过话题通讯的方式将信息上传。我们可以使用命令行查看当前运行的话题。

$ ros2 topic list
/chatter
/parameter_events
/rosout

可以通过nodeinfo属性查看该节点的具体信息

$ ros2 node info /talker
talker
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
  Publishers:
    /chatter: std_msgs/msg/String
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
  Service Servers:
    /talker/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /talker/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /talker/get_parameters: rcl_interfaces/srv/GetParameters
    /talker/list_parameters: rcl_interfaces/srv/ListParameters
    /talker/set_parameters: rcl_interfaces/srv/SetParameters
    /talker/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Service Clients:

  Action Servers:

  Action Clients:
需要注意的是,刚刚我们run的程序名字叫talker,而node叫/talker

每一个话题只能传输一种类型信息,如数值、字符串等,我们可以看/chatter话题能传输的数据类型

$ ros2 topic info /chatter
Type: std_msgs/msg/String
Publisher count: 1
Subscription count: 0

可以通过以下方式查看RO2中的可以使用哪些传输信息的类型
image.png

接下来我们查看std msgs/msg/String可以发送的类型
image.png

检查当前话题正在发布的消息
image.png|500

我们也可以打开/listener节点,通过话题/chatter接受/talker发出的信息

即使程序的类型不同(一个是cpp,一个是py),也可以正常运行

image.png|475

打开计算图

ros2 run rqt_graph rqt_graph

image.png

colcon

使用 colcon 进行编译,可以通过 --packages-select 来达到只编译某个包的效果

cd ~/bookros2_ws #进入到工作空间 
colcon build --symlink-install --packages-select br2_basics #最后为包的名称

RCLCPP_INFO

RCLCPP_INFO和RCLCPP_INFO_STREAM都是用来输出ROS2节点信息日志的函数,它们的区别在于输出方式上:

  • RCLCPP_INFO:可以接收多个字符串,通过使用格式化符号(例如%ld、%d、%s等)来生成最终的日志信息。 示例:

    int count = 10; RCLCPP_INFO(this->get_logger(), "Count: %d", count);

    运行结果为:

    [INFO] [node_name]: Count: 10

  • RCLCPP_INFO_STREAM:使用流操作符将字符串和日志对象拼接起来,输出到日志中。它可以使得输出的信息更加灵活和易读,适用于一般的信息输出。示例:

    RCLCPP_INFO_STREAM(this->get_logger() << "Hello World!");

    运行结果为:

    [INFO] [node_name]: Hello World!

因此,在使用哪一种输出方式时,需要根据具体的情况和需求来进行选择和使用。

文章来源:https://blog.csdn.net/beiketaoerge/article/details/135541162
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。