ROS 二、基本工具


ROS 二:基本的命令行工具

一、启动ros小海龟仿真环境

我们打开linux的命令行,使用roscore先启动ROS Master

打开新的终端,使用rosrun turtlesim turtlesim_node,启动小海龟的界面(需要在linux图形化界面启动,命令行界面启动不了)

再打开一个新的终端,使用rosrun turtlesim turtle_teleop_key(可以使用键盘控制小海龟移动了)

  • 本篇基本指令都围绕海龟仿真器这项服务举例说明,其他功能大同小异
turtlesim

二、ROS常用命令

高清链接

2.1 rqt_graph

ROS里面有一系列以rqt开头的工具,都是一些基于qt的可视化工具,可以直观地展示各种信息

rqt_graph

rqt_graph使用来显示系统的计算图的工具。对计算图不明白的可以看ros计算图简介。通过观察计算图可以观察整个系统的全貌。

从上图我们可以看到,上面有两个节点,turtlesim是我们小乌龟的节点,teleop_turtle是键盘的节点。cmd_vel节点之间通讯的话题。

2.2 rosnode

显示系统中所有节点线管信息的指令。

rosnode is a command-line tool for printing information about ROS Nodes.

Commands:
        rosnode ping    test connectivity to node
        rosnode list    list active nodes
        rosnode info    print information about node
        rosnode machine list nodes running on a particular machine or list machines
        rosnode kill    kill a running node
        rosnode cleanup purge registration information of unreachable nodes
命令 详细说明
rosnode ping [节点名] 测试链接指定节点
rosnode list 查看活动的节点列表
rosnode info [节点名] 查看指定节点的信息
rosnode machine [PC名称或IP] 查看该PC中运行的节点列表
rosnode kill [节点名] 停止指定节点的运行
rosnode cleanup 删除失连节点的注册信息

这里只展示个别指令

1、rosnode list

查看话题列表,把所有节点都列出来

/rosout			#启动roscore就会启动,获取ros日志信息
/teleop_turtle
/turtlesim
  • rosout是在rqt里面不会显示的内容。只要启动roscore就会启动的一个话题,主要用于获取ros日志信息,提交给界面做显示,是ros默认的一个话题。

2、rosnode info

会展示对应节点的具体信息,语法是

rosnode info /节点名

比如我启动rosnode info /turtlesim,会显示如下内容

--------------------------------------------------------------------------------
Node [/turtlesim]
Publications: 					#正在发布那些话题
 * /rosout [rosgraph_msgs/Log]
 * /turtle1/color_sensor [turtlesim/Color]
 * /turtle1/pose [turtlesim/Pose]

Subscriptions: 					#在订阅哪些话题
 * /turtle1/cmd_vel [geometry_msgs/Twist]#读取键盘输入,移动小海龟

Services:			 #提供的服务,可以用来完成一些配置
 * /clear
 * /kill
 * /reset
 * /spawn
 * /turtle1/set_pen
 * /turtle1/teleport_absolute
 * /turtle1/teleport_relative
 * /turtlesim/get_loggers
 * /turtlesim/set_logger_level

# 底层通信机制的相关信息
contacting node http://huanyu-PC:39579/ ...
Pid: 3914
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound (52933 - 127.0.0.1:48044) [26]
    * transport: TCPROS
 * topic: /turtle1/cmd_vel
    * to: /teleop_turtle (http://huanyu-PC:38639/)
    * direction: inbound (34866 - huanyu-PC:43907) [54]
    * transport: TCPROS

2.3、rostopic

会输出ros话题相关的信息

rostopic is a command-line tool for printing information about ROS Topics.

Commands:
        rostopic bw     display bandwidth used by topic
        rostopic delay  display delay of topic from timestamp in header
        rostopic echo   print messages to screen
        rostopic find   find topics by type
        rostopic hz     display publishing rate of topic    
        rostopic info   print information about active topic
        rostopic list   list active topics
        rostopic pub    publish data to topic
        rostopic type   print topic or field type
命令 详细说明
rostopic bw [话题名称] 显示指定话题的消息带宽(bandwidth)
rostopic delay [话题名称] 显示header中时间戳的延迟
rostopic echo [话题名称] 实时显示指定话题的消息内容
rostopic find [类型名称] 显示使用指定类型的消息的话题
rostopic type [话题名称] 显示指定话题的消息类型
rostopic hz [话题名称] 显示指定话题的消息数据发布周期
rostopic info [话题名称] 显示指定话题的信息
rostopic list 显示活动的话题目录
rostopic pub [话题名称] [消息类型] [参数] 在命令行,用指定的话题名称发布消息
rostopic type [话题名称] 打印主题或字段类型

1、rostopic pub 发布话题消息

在命令行配合Tab键,可以自动给你补全指令

我们在命令行发布一次消息给turtlesim

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 2.0
  y: 3.0
  z: 5.0
angular:
  x: 7.0
  y: 9.0
  z: 11.0"

它就会自己跑一次上述的运动(因为pub只发布了一次消息)。linear是线速度,angular是角速度。

要想它循环发布,就需要加个频率参数-r,后面跟一个uint数,表示一秒发布几次。

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 2.0
  y: 3.0
  z: 5.0
angular:
  x: 7.0
  y: 9.0
  z: 11.0" #每秒跑10次

2.4、rosmsg

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
命令 详细说明
rosmsg show [消息名称] 显示消息的描述
rosmsg info [消息名称] 显示消息的信息
rosmsg list 列出所有消息
rosmsg md5 [消息名称] 显示 md5 加密后的消息
rosmsg package [消息名称] 显示某个功能包下的所有消息
rosmsg packages 列出包含消息的功能包

比如我想打印turtlesim的消息数据结构,就按照如下指令:

rosmsg show geometry_msgs/Twist

会显示如下内容:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

2.5、rosservice

命令行作为ros的 “客户端”,需要发送服务请求给这个海龟仿真器

Commands:
        rosservice args print service arguments
        rosservice call call the service with the provided args
        rosservice find find services by service type
        rosservice info print information about service
        rosservice list list active services
        rosservice type print service type
        rosservice uri  print service ROSRPC uri
命令 详细说明
rosservice args [服务名称] 打印服务参数
rosservice call [服务名称] 使用所提供的args调用服务
rosservice find [服务名称] 按服务类型查找服务
rosservice info [服务名称] 打印服务信息
rosservice list 显示服务列表
rosservice type [服务名称] 打印服务类型
rosservice uri [服务名称] 打印服务ROSRPC uri

1、rosservice call 发布服务请求

比如我使用rosservice list查询turtlesim的服务

/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn		#新建小海龟
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level

使用Tab键辅助输入:

rosservice call /spawn "x: 1.0 
y: 1.0
theta: 0.0
name: 'turtle2'"   

即可成功调用服务,获得一只新的海龟。并返回值name: "turtle2"

此时使用rostopic list就可以看到以下的输出:

/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
/turtle2/cmd_vel
/turtle2/color_sensor
/turtle2/pose

可以看到两个海龟的topic,并且可以用指令分开调用不同海龟。

2.6 rosbag

可以记录话题数据并保存下来

如果下次需要调用的时候可以直接复现出来之前保存到整个记录

Usage: rosbag <subcommand> [options] [args]

A bag is a file format in ROS for storing ROS message data. The rosbag command can record, replay and manipulate bags.

Available subcommands:
   check        Determine whether a bag is playable in the current system, or if it can be migrated.
   compress     Compress one or more bag files.
   decompress   Decompress one or more bag files.
   decrypt      Decrypt one or more bag files.
   encrypt      Encrypt one or more bag files.
   filter       Filter the contents of the bag.
   fix          Repair the messages in a bag file so that it can be played in the current system.
   help  
   info         Summarize the contents of one or more bag files.
   play         Play back the contents of one or more bag files in a time-synchronized fashion.
   record       Record a bag file with the contents of specified topics.
   reindex      Reindexes one or more bag files.

1、rosbag record 话题记录

rosbag record -a -O cmd_record

系统会在当前目录下生成一个cmd_record.bag文件

  • -a是指把所有的话题都记录下来
  • -O是指保存成一个*.bag文件,后面要跟上文件名

当我们记录完毕之后,ctrl+c结束即可。

具体的其他参数介绍如下:

Usage: rosbag record TOPIC1 [TOPIC2 TOPIC3 ...]

Record a bag file with the contents of specified topics.

Options:
  -h, --help            show this help message and exit
  -a, --all             record all topics
  -e, --regex           match topics using regular expressions
  -p, --publish         publish a msg when the record begin
  -x EXCLUDE_REGEX, --exclude=EXCLUDE_REGEX
                        exclude topics matching the follow regular expression
                        (subtracts from -a or regex)
  -q, --quiet           suppress console output
  -o PREFIX, --output-prefix=PREFIX
                        prepend PREFIX to beginning of bag name (name will
                        always end with date stamp)
  -O NAME, --output-name=NAME
                        record to bag with name NAME.bag
  --split               split the bag when maximum size or duration is reached
  --max-splits=MAX_SPLITS
                        Keep a maximum of N bag files, when reaching the
                        maximum erase the oldest one to keep a constant number
                        of files.
  --size=SIZE           record a bag of maximum size SIZE MB. (Default:
                        infinite)
  --duration=DURATION   record a bag of maximum duration DURATION in seconds,
                        unless 'm', or 'h' is appended.
  -b SIZE, --buffsize=SIZE
                        use an internal buffer of SIZE MB (Default: 256, 0 =
                        infinite)
  --chunksize=SIZE      Advanced. Record to chunks of SIZE KB (Default: 768)
  -l NUM, --limit=NUM   only record NUM messages on each topic
  --node=NODE           record all topics subscribed to by a specific node
  -j, --bz2             use BZ2 compression
  --lz4                 use LZ4 compression
  --tcpnodelay          Use the TCP_NODELAY transport hint when subscribing to
                        topics.
  --udp                 Use the UDP transport hint when subscribing to topics.

2、rosbag play 话题复现

记录完成后,用rosbag play 语句调用保存好的*.bag文件,即可复现之前记录的信息。

rosbag play cmd_record.bag

就可以在海龟仿真器看到之前记录的所有指令。


文章作者: 拓佑豪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 拓佑豪 !
评论
  目录