在学习ROS的过程中, 曾听到过ROS的特点之一是分布式的操作系统. 当时因为没有相应的需求, 一直似是而非的记忆着.最近由于项目的需求, 需要在移动端和控制端分别进行ROS的进程. 于是就想到了分布式应该就是在这种场景下使用的.
实验使用的是turtlebot作为动作平台, 远程电脑通过网络对turtlebot进行监控以及操作.
之前根据wiki中的教程, roscore以及各种节点都是运行在turtlebot上的计算机上的. 我们称这个计算机为甲.
远程遥控的这个计算机我们称之为乙.
wiki中的例程是现在甲上启动minimal.launch文件, 因为所有的launch会先检查系统中是否运行roscore, 若没有则启动, 所以roscore会运行在甲上.
之后我们运行slam navigation demo, 这个在乙上进行. 需要配置ROS_MASTER_URI参数, 这个参数告诉节点Master在网络中的位置. 一个ros系统中只能存在一个Master. 然后我们就可以看到 rviz节点是运行在乙上的.
之后先进行一点小小的改动.
1, 先在计算机乙上运行roscore. 需要修改甲以及乙上的ROS_MASTER_URI参数.
2, 在甲计算机上bringup minimal.launch文件, 之后在乙上运行rviz. 结果是可以正常运行.
3, rqt_graph查看节点关系图, 这个图并不能反应出哪台机器上运行了哪些节点.
4, 此时在乙上运行turtlebot上的激光传感器node, 会出错, 错误为无法找到设备. 可以理解为该node是跟计算机的驱动相关的, 无法在网络中进行通信.
根据以上实验可以知道, 不同的节点由于依赖的函数和接口不同, 可以使用的范围也是不一样的. 如果节点是在网络层之上的, 那么在哪台计算机上并不重要了. 如果是在网络之下的, 会依赖于计算机硬件.
阅读(1477) | 评论(0) | 转发(0) |