ros命令行工具
首先以小海龟为例:
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
没出错的话应该可以打开小海龟,并且可以使用键盘来控制小海龟的移动了。
rosrun命令后面加某个功能包和节点,就可以运行这个节点。
$ rqt_garph
这是一个可以显示计算图的工具。ros通讯过程是一个计算图,使用这个就可以查看节点之间的通信了。
rosnode
$ 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
Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'
终端里面输入rosnode可以查看node支持的命令,例如
$ rosnode list
/rosout
/teleop_turtle
/turtlesim
将所有运行的节点列出来
$ 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://devil-NH50-70RA:40587/ ...
Pid: 20354
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound (50957 - 127.0.0.1:48022) [28]
* transport: TCPROS
* topic: /turtle1/cmd_vel
* to: /teleop_turtle (http://devil-NH50-70RA:37309/)
* direction: inbound (47564 - devil-NH50-70RA:33877) [31]
* transport: TCPROS
这个可以查看节点相关的信息
rostopic
$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
我们可以使用rostopic pub 命令来发布消息
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
可以看到小海龟运行了一段时间,很快就停止了。这是因为我们只发布了一次消息,要想持续的发布消息可以使用参数r,例如:
$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
10是发布的频率表示一秒钟发送100次。
rosmsg
$ 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
可以查看消息的类型
rosservice
$ rosservice list
/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
我们注意到有一个spawn的服务,这是一个产生新海龟的服务。
可以使用call来请求一个发布新海龟的服务。
例如使用
$ rosservice call /spawn "x: 14.0
y: 12.0
theta: 1.0
name: 'tuetle2'"
name: "tuetle2"
这样就可以在tuetlesim节点上看到一个新的海龟,并且可以通过使用以上的方法来控制新的海龟的移动。
rosbag
rosbag record 是记录数据的一个命令行工具。
rosbag play 可以复现记录数据。
$ rosbag record -a -O cmd_record
$ rosbag play cmd_record.bag
可以看到小海龟按照之前记录的消息进行移动。