先决条件:安装轻量级模拟器
使用以下命令安装:
$ sudo apt-get install ros-kinetic-ros-tutorials
不明白为什么以前安装过了还要再安装一次。。。
ros重要概念理解
- nodes : 节点。一个节点就是一个可执行文件,通过ROS与其他节点通信
- message: 消息。消息是一种ROS的数据类型,message可以自定义,也可以使用系统的自定义数据格式。message用于订阅或者发布到一个话题
- topic: 话题。主要用于节点之间的通信,可以发布消息到话题,或者订阅话题一接收消息。
- master: 节点管理器。ROS名称服务(比如帮助节点找到彼此)
- rosout: ROS中相当于stdout/stderr。
- roscore: 主机+rosout+参数服务器
nodes
一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。
(节点是ros中非常重要的一个概念,为了帮助初学者理解这个概念,这里举一个通俗的例子:
例如,咱们有一个机器人,和一个遥控器,那么这个机器人和遥控器开始工作后,就是两个节点。遥控器起到了下达指 令的作用;机器人负责监听遥控器下达的指令,完成相应动作。从这里我们可以看出,节点是一个能执行特定工作任 务的工作单元,并且能够相互通信,从而实现一个机器人系统整体的功能。在这里我们把遥控器和机器人简单定义为两个节点,实际上在机器人中根据控制器、传感器、执行机构等不同组成模块,还可以将其进一步细分为更多的节点,这个是根据用户编写的程序来定义的。)
客户端库
ROS客户端库允许使用不同编程语言编写的节点之间互相通信:
- rospy = python 客户端库
- roscpp = c++ 客户端库
roscore
运行所有ros程序前必须要先运行roscore
roscore
rosnode
新开一个终端,输入
$ rosnode list
可以看到运行的rosnode,显示
/rosout
这表示当前只有一个节点在运行:rosout。因为这个节点用于收集和记录节点调试输出信息,所以总是运行的
rosnode info命令返回的是关于一个特定节点的信息
$ rosnode info /rosout
rosrun
rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
用法:
rosrun [package_name] [node_name]
现在我们可以运行turtlesim包中的turtlesim_node。
然后, 在一个 新的终端:
$ rosrun turtlesim turtlesim_node
就可以看到经典的小乌龟了。
此时在新的终端键入 rosnode list,可以看到对应的node列表为
/rosout
/turtlesim
节点名称重新配置
ROS的一个强大特性就是你可以通过命令行重新配置名称。
关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用ctrl-C
)。现在让我们重新运行它,但是这一次使用Remapping Argument改变节点名称:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
现在,我们退回使用 rosnode list:
$ rosnode list
你会看见类似于:
/rosout
/my_turtle
rosnode ping node_name测试连通性
使用另外一个 rosnode 指令, ping, 来
测试:
$ rosnode ping my_turtle
可以看出结果:
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/ time=1.152992ms
xmlrpc reply from http://aqy:42235/ time=1.120090ms
xmlrpc reply from http://aqy:42235/ time=1.700878ms
xmlrpc reply from http://aqy:42235/ time=1.127958ms