6 理解ROS节点
- 准备条件
我们用一个轻量的模拟器,以下是安装命令
$ sudo apt-get install ros-<distro>-ros-tutorials
distro可以是indigo jade kinetic melodic 等
- 图形概念快速理解
- Node : ROS和其他node交流的可执行文件
- Messages: 订阅或者发布topic时候的ROS数据类型
- Topic:Node可以发布消息到topic也可以订阅一个topic去接收消息
- Master:ROS的服务名称(便于Node查找)
- rosout: 相当于stdout/stderr
- roscore: Master+rosout+parameter 服务
-
Nodes
node实际上只不过是ROS包中的一个可执行文件。ROS nodes使用ROS客户端库去和其他节点通信。Nodes可以提供或者订阅一个Topic,Nodes也可以提供或者使用一个服务。 -
客户端库
ROS 客户端库允许使用不同的编程语言去通信:
- rospy = python 客户端库
- roscpp = c++ 客户端库
- roscore
使用ros的话,启动roscore是第一要务
$ roscore
运行结果略
如果roscore没有初始化并且说没有权限,就通过root给拥有者赋权限:
$ sudo chown -R your_username ~/.ros
- 使用rosnode
打开一个新终端,执行rosnode看roscore下有什么在运行,记得已经执行了roscore,不要关闭那个终端。
- rosnode list:列出了ros正在运行的节点
$ rosnode list
/rosout
rosout就是当前正在运行的节点
- rosnode info: 返回节点的详细信息,有发布的信息,订阅的信息和提供的服务
$ rosnode info /rosout
- 使用rosrun
rosrun允许我们使用包名字直接运行一个包,而不需要知道包的具体路径
rosrun [package_name] [node_name]
以下,运行turtlesim下的turtlesim_node
打开一个新终端
rosrun turtlesim turtlesim_node
你会看见一个小乌龟,如果和你的不一样,没关系,因为有很多种类的乌龟
现在打开一个新的终端,执行下rosnode list,会看到又多了一个节点.
ROS另一个强大的功能是可以用命令重新定义名字。关闭刚才的小乌龟窗口,我们来重新定义一个节点名字。
$ rosrun turtlesim turtlesim_node __name:=my_turtle
现在我们用rosnode list看当前节点,就会是我们自己定义的名字了。
如果在list下边看到了/turtlesim,可能是因为停止节点的时候使用了Ctrl -C,而没有直接关闭窗口,或者是没有环境变量 rosnode cleanup 清理
网友评论