[譯]機器人操做系統簡介:終極機器人應用框架(下)

上一篇:[譯]機器人操做系統簡介:終極機器人應用框架(上)


運行一個模擬系統

模擬世界

首先的目標是建立一個能夠在其中模擬想要實現的腳本的環境。在stage_ros包中的stageros節點容許咱們在一個由一張圖片定義的2D圖形中運行機器人。 在stage_ros包中有一個完整的針對世界文件和如何生成他們的語法。這些很是簡單,但超出了咱們的範疇。幸運的是, 這些包都帶有幾個demo世界。首先,去到文件的目錄:node

roscd stage_ros
cd world

在這個目錄裏有幾個文件。運行其中一個,bash

rosrun stage_ros stageros willow-erratic.world

這樣就建立了幾個主題。每個的意義在包的文檔中都有說明。重要的部分是它有cmd_vel。網絡

在顯示的圖形中,有一個藍色的廣場,表明你控制機器人。經過使用咱們的代碼或者_Robot Steering_,能夠控制這個機器人。試試吧!框架

經過加載文件來啓動系統

在咱們的包中建立一個launch目錄,而且在它裏面建立一個teleop.launch文件。最後目錄的結構應該看起來像這樣:dom

toptal_tutorial/
├── CMakeLists.txt
├── launch
│   └── teleop.launch
├── package.xml
├── scripts
│   └── teleop.py
└── src

在teleop.launch文件中咱們定義了一系列節點以及他們的互聯。工具

<launch>
  <arg name="world_file" default="$(find stage_ros)/world/willow-four-erratics-multisensor.world" />
  <node pkg="stage_ros" type="stageros" name="simulated_world" args="$(arg world_file)"></node>
  <group ns="robot_0">
    <node pkg="joy" type="joy_node" name="joy_input"></node>
    <node pkg="toptal_tutorial" type="teleop.py" name="joy_convert"></node>
  </group>
</launch>

新的世界包括了四個機器人,而且他們每個主題都有前綴robot_<n>。因此,0號機器人有一個叫做robot_0/cmd_vel的速度命令主題。 這就是爲何咱們在命名空間中放置名叫robot_0的控制器,以便把他們的名字調整到新的格式。在這樣的場景下,你能夠想象獲得在文件系統中這些主題的目錄名字。
spa

爲了運行啓動文件,不須要roscore。在某些場景,roscore只是無做爲的啓動文件的一個特別案例。若是缺乏roscore,僅是第一個啓動文件被加載時會運行 一個core,剩下的則鏈接到此。如今,咱們經過這樣來運行加載器:操作系統

roslaunch toptal_tutorial teleop.launch

若是所有都正確,結果會有一個帶4個機器人的模擬器,其中一個機器人由咱們的遊戲柄或者操縱桿控制。這個世界比前一個的引擎蓋要多得多。這四個機器人每個都有:.net

/robot_<n>/base_pose_ground_truth
/robot_<n>/base_scan_0
/robot_<n>/base_scan_1
/robot_<n>/camera_info_0
/robot_<n>/camera_info_1
/robot_<n>/cmd_vel
/robot_<n>/depth_0
/robot_<n>/depth_1
/robot_<n>/image_0
/robot_<n>/image_1
/robot_<n>/odom

可用0,1,2,3來替換<n>。這把咱們帶到了最後一個主題。插件

使用rqt查看數據

咱們不會深刻研究rqt,但它是查看更復雜數據的完美工具。你能夠嘗試所有主題,但這裏咱們關注於image_0,image_1,depth_0,和depth_1這幾個主題。

讓咱們加載rqt並移除所有開啓的插件。如今打開4個圖片展現臺(Plugins > Visualization > Image View),而且在2x2的表格結構中放置他們。最後,在每一個視圖的左上角, 在四個狀態主題中選擇robot_0。

咱們獲得的是帶嘗試知覺的立體視覺,和低分辨率的攝像機。記住咱們甚至能夠得到這個結果而不用輸入系統。若是咱們只是這樣運行(在stage_ros/world目錄裏面):

rosrun stage_ros stageros willow-four-erratics-multisensor.world

而且經過一個叫做/robot_0/cmd_vel主題添加_Robot Steering_插件,也能夠得到帶在屏幕滑塊進行控制的相同的結果。

將結果應用到真實系統

大量的硬件都能完整支持ROS,這些常常由第三方誌願者提供。不少機器人平臺有生成這些消息類型的驅動,而ROS有采起網絡攝像頭以及發佈圖片反饋的節點。

最後的結果是咱們想要實現的一個模擬,經過如下修改也能夠達到一樣的效果:

  • 在你的機器人的車載計算器上安裝ROS

  • 在車載計算機上建立一個啓動文件把ROS和底層平臺,所有高層的傳感器如攝影機以及激光測距義等鏈接起來。須要的節點可能已經存在,或者能夠經過在某一邊爲ROS建立發佈者/訂閱者,同時在另外一邊建立針對序列通訊的驅動來實現

  • 在啓動時運行啓動文件

  • 在你的遠程計算機中把export ROS_MASTER_URI=http://<robot_hostname>:11311/添加到你的bash啓動中,使得遠程計算機在給定的域名和端口尋找roscore

  • 加載rqt而且/或者任意監控和控制機器人的腳本

這樣下來其實只是在遠程設備上放置合適的環境變量,其他的則是處理它自己。在計算機集羣上運行ROS僅須要在每個機器上都完成某一個步驟。

結論

咱們已經經過很是少許的代碼,演示了你怎樣才能爲所欲爲操縱一個複雜系統的變量。簡單的發佈者/訂閱者系統容許你快速開發在計算機集羣中處理數據的軟件管道,而不須要擔憂底層相關元素的實現。

咱們只是使用了一個簡單的模擬器,更復雜的模擬器如gazebo(也包含在完整的桌面版本中)可讓你建立有物理和複雜傳感器的3D世界, 而且能夠給你最終結果的體驗和遠在它被開發前的產品。

這個只是一個很基本的簡介,但但願你對和這個多才多藝的框架一塊兒工做的更感興趣。


------------------------    

相關文章
相關標籤/搜索