ROS的運用開發
一般來說市面上機器人的開發分兩個主流,一個是移動機器人(AGV),主要運用場景是酒店送餐,餐廳導航+送餐,倉庫物流,銀行業務處理等;一種是協作機器人,六自由度,用于抓取、焊接等。
當然還有這兩種的結合形成可搬運加抓取的復合機器人,一些小的方向還有人形機器人、無人機等。
以開發AGV為例 ,對于AGV來說尤其是室內運用的場景,最重要的就是地圖構建和導航,也就是SLAM技術。
這里面主要涉及三大塊:
1、建圖,比如gmapping,hector_slam,cartographer這幾個算法,通過采集點云數據進行地圖構建。這里的點云數據一般是一個特定平面的,如何sick tim571、倍加福R2000、鐳神這些傳感器都能實現該功能,并提供好了對應的ROS包,或者通過kinect、realsense三維傳感器將其轉換為二維的數據。不管是哪種傳感器,不同于接口。
激光雷達一般是網口形式,和運行的Ubuntu電腦組成一個局域網,而三維點云一般是通過USB或者串口通信使ROS獲取到數據。
所以使用ROS的這點好處就在于,不用太關注于硬件接口甚至物理接口的定義。
對于ROS使用建圖包,我在《ROS中slam_gmapping、map_server源碼解讀及其librviz的使用》中有詳細說明。
2、定位, 常用的是AMCL算法,也就是針對上述建圖得到的機器人當前在地圖中的位置坐標信息,因為是二維地圖,得到的數據是x,y坐標和方向角。
AMCL包一般和導航的包是合在一起的。這里單獨列出來是為了說明還有其他定位方式,比如光反射導航定位、超聲波導航定位、wifi定位等,有篇總結比較好的博客《自主移動機器人常用的導航定位技術及原理》可以參見一下。
3、導航和路徑規劃,也就是move_base包,里面還包含局部路徑規劃,全局路徑規劃,dwa路徑搜索和costmap_2d。關于這些包之間的調用,網上有太多這樣的圖,我就沒必要再貼一遍了。
costmap是David V. Lu提出的算法,即代價地圖,其核心思想是對所建立的地圖包括機器人本身都要進行一定的膨脹,也就是預留一定空間要考慮機器人的體積大小,不然行駛時,尤其是轉彎,機器人會碰撞到障礙物。
關于costmap的應用,尤其是添加自己想要的layer,賀一家博士有很好的實踐,參見《ROS 教程之 navigation :在 catkin 環境下創建costmap layer plugin》。
有了上述這幾個包,機器人就能跑起來了嗎?答案肯定是否定的,不過至少這些包可以在Gazebo和rviz中仿真了,看起來效果還是挺不錯的。
不過仿真和實際差別還是太大了,比如真實環境中激光雷達采集到的數據,真實環境中所建立的地圖等。 此外,搭建一個小型的機器人系統從硬件選型到調試成功也會經歷一段非常痛苦的過程 。
為了快速上手或者驗證,可以從一些現成的機器人入手,比如TurtleBot。不過這些更多適用于實驗室研究,比如算法的驗證等。對于真正的開發機器人產品,也具有一定的參考價值。
一般而言,AGV的系統架構圖如下:
可以看到主要核心控制是運行在Ubuntu的工業級電腦上,激光雷達基本是現成的模塊,語音系統一般是選配的模塊,這種模塊也挺多,比如科大訊飛等,根據項目需求來。
同等重要的還有傳感器采集模塊,也就是ARM層或PLC層,這一層主要用于采集外圍的數據包括電機驅動并上傳數據給ROS層,所以這個工作量也非常大,涉及到的通信協議也比較多,就相當于一個智能節點。
至關重要的就是ARM層和PC之間的通信,無論是傳輸速率還是協議的穩定性都有待大量的驗證,曾經因為通信協議的問題導致的粘包也是相當難定位的。
所以盡量不要采用自有協議,用穩定的modbus 232,CANopen總線等是比較好的選擇。關于和硬件通信方面的問題,引用一個老外的話,我覺得遵循這個原則是比較穩定的,尤其是在加載硬件初始化的過程中。
其次,AGV一般是兩輪或者四輪的結構,驅動器和電機的選擇也是非常重要的,不然里程計導致的累計誤差會影響建圖和定位精度。
現在有專門只做AGV控制器的公司,也就是圖片中的ROS層和ARM層這一塊(注:就不一定是采用的ROS框架了),控制器本身就預留有IO,還能適配某些485協議和控制某些型號的電機驅動器,這些模塊直接插上去就可以用。
此外,對外還提供了各種各樣的接口(TCP server,web,modbus master等)用于二次開發。于是客戶更側重于應用層,也就是HMI這一塊,比如手機端應用,web端顯示,PC端的軟件等,這種二次開發一般采用C/S或者B/S的架構。
我看到一個比較好的AGV調試人機交互界面例子是Ros_Qt5_Gui_App(在GitHub上搜ros qt gui就排在我前面一位)。
最后就是結構問題,我不知道是不是因為騰訊、阿里巴巴、網易、字節跳動等這些互聯網巨頭公司的影響,我們越來越看重軟件的開發,也就是ROS層和嵌入式層的開發。
其實對于制造業產品,工業設計和結構設計非常重要,軟件設計再好,結構沒設計到位哪怕是一點尺寸的偏差都會導致機器運行不穩定。在ROS中urdf模型文件的定義也跟設計的結構有關(尺寸、位置等)。
另外,結構設計需要考慮是否容易安裝、維護、部件的更換、AGV平衡性、精度、美觀等等,也不是一件容易的事。
關于開發的調試,ROS上手容易但調試難,一是缺少單步調試,我目前看到的方法是使用GDB調試器,不過感覺還是挺麻煩的,用得人不太多,更多的bug調試還是通過日志查看的。
二由于ROS中設計的各種通信接口,串口調試工具,TCPView,wireshark,CAN analyzer等都是常用的工具。三是window和linux下相互間遠程,相互間傳文件等,從中可以學到不少東西。
-
機器人
+關注
關注
211文章
28467瀏覽量
207351 -
移動機器人
+關注
關注
2文章
763瀏覽量
33580 -
ROS
+關注
關注
1文章
278瀏覽量
17024
發布評論請先 登錄
相關推薦
評論