ROS 二:基本的命令行工具
一、启动ros小海龟仿真环境
我们打开linux的命令行,使用roscore
先启动ROS Master
打开新的终端,使用rosrun turtlesim turtlesim_node
,启动小海龟的界面(需要在linux图形化界面启动,命令行界面启动不了)
再打开一个新的终端,使用rosrun turtlesim turtle_teleop_key
(可以使用键盘控制小海龟移动了)
- 本篇基本指令都围绕海龟仿真器这项服务举例说明,其他功能大同小异
二、ROS常用命令
2.1 rqt_graph
ROS里面有一系列以rqt
开头的工具,都是一些基于qt的可视化工具,可以直观地展示各种信息
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
就可以在海龟仿真器看到之前记录的所有指令。