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