在上一篇文章中我們已經搭建好了兩台計算機間通信的條件,但是每次都需要在新的終端里輸入一長串export ROS_MASTER_URI之類的。實際弄起來的時候也不方便,因此在本文中,我們更進一步,簡化兩台計算機通信的操作。並通過兩個例子,讓你感受感受ROS這種分布式架構和網絡通信的強大,使得你的兩台計算機就像一台計算機一樣處理程序。通過網絡通信,所有的節點你可以運行在任意一台電腦上。
一、修改.bashrc文件
修改這個文件的目的是為了配置ROS的環境變量,ROS必須知道有哪些機器在運行,因此的知道每一台機器的名字,這可以通過設置ROS_HOSTNAME環境變量為每一台機器本身的主機名來完成。另外,必須給ROS提供master節點的URI,在上一章中我們也看到了,各個節點都是通過這個URI指向master,也就是指向運行roscore的那個節點。
在兩台電腦上都使用下面的命令來編輯.bashrc文件:
gedit ~/.bashrc在台式機這邊在bashrc文件的最后添加:
export ROS_HOSTNAME=desktop_hostname export ROS_MASTER_URI=http://laptop_hostname:11311在筆記本那邊,最后添加:
export ROS_HOSTNAME=laptop_hostname export ROS_MASTER_URI=http://laptop_hostname:11311注意:我們這里的添加方式里面ROS_MASTER_URI都是指向的筆記本的主機名,說明是在筆記本上運行roscore.
二、開始測試網絡通信了 -- enjoy time!
下面我們來一個簡單的遙控程序,筆記本上發出控制指令遙控台式機上的一個小漁龜:
1.首先在我們的筆記本上,也就是移動機器人那一端開啟roscore
2.然后在台式機上啟動小漁龜的仿真節點:
rosrun turtlesim turtlesim_node

3.然后在筆記本上新開一個終端,遙控小漁龜:
rosrun turtlesim draw_square這時候你就可以看到台式機上的小漁龜正在走正方形了。
當然我們也可以試試《Ros by Example 1》的move_base例程,在台式機上用rviz進行觀察:
在筆記本上:
運行 roscore
然后新開一個終端輸入:
roslaunch rbx1_bringup fake_turtlebot.launch在筆記本上再新開一個終端輸入:
roslaunch rbx1_nav fake_move_base_blank_map.launch在台式機上運行Rviz:
rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz然后在筆記本一端進行move_base控制:
rosrun rbx1_nav move_base_square.py你將看到台式機上的RVIZ正在監控:
總結:至此,ROS的networking系列完成了,通過network,使得兩台計算機運行着不同的ROS節點,兩個計算機相當於一個計算機了。通常在使用過程中,把RViz這種特耗CPU的東西放到了台式機上,減輕了機載計算機的負擔。LZ在自己的實驗室項目中是在台式機上運行rviz,指定移動機器人的移動目標點,機載筆記本上運行着定位和路徑規划的主要算法。
文章為原創,
請注重博主勞動成果,
錯誤請指出,轉載請注明。
--白巧克力
reference: