首先的目標是建立一個能夠在其中模擬想要實現的腳本的環境。在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,但它是查看更復雜數據的完美工具。你能夠嘗試所有主題,但這裏咱們關注於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世界, 而且能夠給你最終結果的體驗和遠在它被開發前的產品。
這個只是一個很基本的簡介,但但願你對和這個多才多藝的框架一塊兒工做的更感興趣。
------------------------
本做品採用知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本許可協議進行許可。
本文翻譯做者爲:dogstar,發表於艾翻譯(itran.cc);歡迎轉載,但請註明出處,謝謝!