文章目录

  • 1 准备工作
  • 2 几个基本概念
  • 3 节点
  • 4 Client Libraries
  • 5 roscore
  • 6 使用rosnode
  • 7 使用rosrun
  • 8 总结回顾



这篇教程主要介绍了

roscore

rosnode,和

rosrun等命令行工具。

1 准备工作

首先安装一个轻量级的tutorial

$ sudo apt-get install ros-<distro>-ros-tutorials

其中,<distro>需要用特定的版本号替换,例如kinetic

2 几个基本概念

  • Nodes节点:一个节点就是能与另外一个节点通信的可执行程序。
  • Messages消息:订阅或发布话题时,ROS的数据结构类型。
  • Topics话题:一个能订阅或发布话题的节点。
  • Master:帮助所有nodes找到彼此的节点。
  • rosout:ROS标准输出。
  • roscore:包含了Master,rosout和parameter server参数服务器。

3 节点

节点不仅仅是一个可执行文件。

  • ros节点可以利用ros client libarary来和其他节点通信。
  • 节点可以订阅或者发布一个topic话题。
  • 节点也可以提供或者使用一个service服务。

4 Client Libraries

ROS client libraries允许节点用不同的编程语言编写,并进行通信:

  • rospy = python client libary
  • roscpp = c++ client library

5 roscore

在使用ros之前,第一件要做的事情就是启动roscore

$ roscore

启动之后会看到这样的消息:

... logging to /home/lk/.ros/log/57e9d664-9a49-11e9-8898-d46d6d97e028/roslaunch-Mibook-7319.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://Mibook:45859/
ros_comm version 1.12.14


SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES

auto-starting new master
process[master]: started with pid [7330]
ROS_MASTER_URI=http://Mibook:11311/

setting /run_id to 57e9d664-9a49-11e9-8898-d46d6d97e028
process[rosout-1]: started with pid [7343]
started core service [/rosout]

如果roscore没有被初始化,就会产生一个网路配置的问题。

6 使用rosnode

打开一个新的终端,使用rosnode命令来查看roscore做了什么,注意之前的roscore窗口一定不能被关闭!

打开一个新的终端,环境会被重新设置,~/.bashrc文件会被刷新。

如果新打开一个窗口,rosnode出了问题,需要把环境手动添加到~/.bashrc文件中。

rosnode显示了当前正在运行的ros节点:

$ rosnode list

会看到:

/rosout

使用rosnode info命令来查找特定节点的信息:

$ rosnode info /rosout
# echo
--------------------------------------------------------------------------------
Node [/rosout]
Publications: 
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions: 
 * /rosout [unknown type]

Services: 
 * /rosout/get_loggers
 * /rosout/set_logger_level


contacting node http://Mibook:45075/ ...
Pid: 7343

7 使用rosrun

rosrun可以在不知道package路径的情况下,直接运行节点。

标准用法:

$ rosrun [package_name] [node_name]

举例,现在运行一个turtlesim_node

$ rosrun turtlesim turtlesim_node

会看到一个窗口:

在新的窗口中查看rosnode节点:

$ rosnode list
# echo
/rosout
/turtlesim

可以使用重映射命令来改变节点的名称:

$ rosrun turtlesim turtlesim_node __name:=liukai_turtle

这时候又会产生一个小乌龟:

最后再查看一下节点:

$ rosnode list
/liukai_turtle
/rosout
/turtlesim

如果出错了,使用rosnode cleanup命令清理所有节点。

最后使用rosnode ping命令来ping一下自己的小乌龟:

$ rosnode ping liukai_turtle
rosnode: node is [/liukai_turtle]
pinging /liukai_turtle with a timeout of 3.0s
xmlrpc reply from http://Mibook:41971/	time=0.499010ms
xmlrpc reply from http://Mibook:41971/	time=2.086878ms
xmlrpc reply from http://Mibook:41971/	time=1.683950ms
xmlrpc reply from http://Mibook:41971/	time=1.563072ms
xmlrpc reply from http://Mibook:41971/	time=2.007008ms
xmlrpc reply from http://Mibook:41971/	time=1.938105ms
^Cping average: 1.629670ms

8 总结回顾

  • roscore = ros + core
  • rosnode = ros + node
  • rosrun = ros + run

常用命令:

命令

作用

roscore

启动ros核心,

包括master,rosout,

parameter server参数服务器

rosnode list

列出所有的rosnode 节点

rosnode info [node_name]

列出某个node的信息

rosrun [package_name] [node_name]

启动某个ros节点

rosnode ping [node_name]

ping某个节点