运行turlesim
运行roscore(roscore) → 运行turtlesim(rosrun turtlesim turtlesim_node) → 通过键盘控制turtle(rosrun turtlesim turtle_teleop_key)
话题
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的,turtle_teleop_key在话题上发布按键按下的消息,turtlesim则订阅该话题以接收消息
通过运行rqt_graph可以查看节点与话题的示意图,命令如下:
rosrun rqt_graph rqt_graph
图中椭圆形中间为节点名称,箭头横线上为话题名称。
若要查看话题上发布的数据,可使用命令:
rostopic echo [topic]
如查看由turtle_teleop_key节点发布的数据则使用命令:
rostopic echo /turtle1/cmd_vel
通过左上角的刷新按钮刷新rgq-gtaph,可以看到rostopic echo也订阅了/turle1/command_velocity话题。
使用命令:
rostopic list
可以列出当前已被订阅和发布的所有话题,在命令后添加参数-v则可列出所有发布和订阅的主题及其类型的详细信息
消息
话题的通信是通过节点间发送ROS消息实现的,为了使发布者和订阅者进行通信,发布者和订阅者必须发送和接收相同类型的消息,这意味着话题的类型是由发布在其上的消息类型决定的
使用命令:
rostopic type [topic]
可以查看所发布话题的消息类型。
如查看/turtle1/cmd_vel话题的消息类型则使用命令:
rostopic type /turtle1/cmd_vel
而使用rosmsg命令可以查看消息的详细信息:
rosmsg show geometry_msgs/Twist
其中,geometry_msgs/Twist为rostopic type命令的查询结果。
通过rostopic pub命令可以把数据发布到但前某个正在广播的话题上:
rostopic pub [topic] [msg_type] [args]
如命令:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
将消息发送给turtlesim,使其以2.0的线速度和1.8的角速度移动
命令解析:
todtopic | pub | -1 | /turtle1/cmd_vel | geomtry_msgs/Twist | -- | '[2.0, 0.0, 0.0]' | '[0.0, 0.0, 1.8]' |
将消息发布到指定的话题 | 只发布一条消息然后退出 | 要发布到的话题的名称 | 发布话题时要使用的消息类型 | 表明之后的参数都不是选项 | linear值 | angular值 |
而将参数-1变为-r 1则可实现以1Hz的频率不断发布消息
基础命令
rostopic | echo [topic] | 显示在某个话题上发布的数据 |
list [topic] | 列出当前已被订阅和发布的所有话题 | |
list -v | 列出所有发布和订阅的主题及其类型的详细信息 | |
type [topic] | 查看所发布话题的消息类型 | |
pub [topic] [msg_type] [args] | 把数据发布到当前某个正在广播的话题上 | |
hz [topic] | 报告数据发布的速率 | |
rosmsg | show | 查看消息的详细信息 |