丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
機(jī)器人 正文
發(fā)私信給qqfly
發(fā)送

5

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

本文作者: qqfly 2016-12-26 09:36
導(dǎo)語:換個說法就是MoveIt = RobotGo,翻譯成中文就是“機(jī)器人,走你!”

雷鋒網(wǎng)按:本文作者qqfly,上海交通大學(xué)機(jī)器人所博士生,本科畢業(yè)于清華大學(xué)機(jī)械工程系,主要研究方向機(jī)器視覺與運(yùn)動規(guī)劃,本文首發(fā)作者微信公眾號:Nao(ID:qRobotics),雷鋒網(wǎng)已獲授權(quán)。

兩個月前給自己挖了個坑,說要寫寫MoveIt,但一直沒動手。主要有兩個原因: 

1)這兩個月主要在寫小論文,畢竟博士生要畢業(yè)還得看論文,不能靠公眾號閱讀量分享率; 

2)直接講MoveIt似乎需要挖更多坑,一直沒想好怎么寫比較好。 

主要是因?yàn)闄C(jī)器人運(yùn)動規(guī)劃涉及太多基礎(chǔ)內(nèi)容,如果跳過不講就會變成新坑;一時半會又沒法講完。 

所以,這次就從初學(xué)者如何利用MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺來講吧,先展示Big Picture,其他細(xì)節(jié)內(nèi)容以后有空再慢慢填。但可能會坑的地方我會用(坑)標(biāo)注出來。 

什么是MoveIt

先看個視頻介紹吧:

   

看完視頻,大家應(yīng)該對MoveIt有一個大概的印象了。用MoveIt官網(wǎng)(moveit.ros.org)的說法: 

它是目前最先進(jìn)的移動(坑)操作機(jī)器人軟件,整合了最先進(jìn)的運(yùn)動規(guī)劃、操作、3D感知、運(yùn)動學(xué)、控制與導(dǎo)航算法。為這方面的開發(fā)人員提供了一個十分便利的開發(fā)平臺。 

這個說法不太直觀,換個說法就是MoveIt = RobotGo,翻譯成中文就是“機(jī)器人,走你!” 

所以,MoveIt的主要就是一款致力于讓機(jī)器人能夠自主運(yùn)動及其相關(guān)技術(shù)的軟件,它的所有模塊都是圍繞著運(yùn)動規(guī)劃的實(shí)現(xiàn)而設(shè)計(jì)的。 

下面大概介紹下它的一些功能模塊。 

  • 運(yùn)動規(guī)劃(Motion Planning):運(yùn)動規(guī)劃的介紹內(nèi)容之前公眾號已經(jīng)發(fā)過了,要讓一個機(jī)器人實(shí)現(xiàn)運(yùn)動規(guī)劃,需要先將機(jī)器人抽象到構(gòu)形空間(C-Space)。MoveIt就可以幫大家把這些工作給做了,只需提供機(jī)器人URDF模型,就可以調(diào)用幾大運(yùn)動規(guī)劃庫(坑)的規(guī)劃算法(如OMPL,SBPL,CHMOP),自動生成機(jī)器人運(yùn)動軌跡。 

  • 操作(Manipulation):這個目前還比較弱,就是根據(jù)識別的物體生成一系列動作抓取物體(pick-and-place),不涉及任何反饋、動力學(xué)、re-grasp等操作問題,所以我一般都不用這個模塊。 

  • 3D感知(Perception):這個并不是說MoveIt整合了物體識別、環(huán)境建模等模塊,而是它可以利用傳感器(坑)采集的信息(點(diǎn)云或深度圖像)生成用于碰撞檢測的OctoMap。OctoMap這個東西挺好的,做SLAM的同學(xué)應(yīng)該了解,它就是以八叉樹形式表示點(diǎn)云,可以大大降低存儲空間,它看起來就跟你們玩的minecraft差不多。同時,這些3D OctoMap也可以依據(jù)貝葉斯準(zhǔn)則不斷實(shí)時更新。這樣,機(jī)器人就可以避開真實(shí)世界的障礙物了。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

  • 運(yùn)動學(xué)(Kinematics):運(yùn)動學(xué)機(jī)器人工作空間與構(gòu)形空間(C-Space)的映射關(guān)系,所以MoveIt就它也包括在自己系統(tǒng)內(nèi)。目前它可以支持多種運(yùn)動學(xué)求解器,如OpenRave的ikfast(封閉解)、Orocos的KDL(數(shù)值解)、Trac_ik(考慮關(guān)節(jié)極限的數(shù)值解)、基于service的求解器(用戶自己定義)。(坑) 

  • 碰撞檢測(Collision Checking):碰撞檢測是運(yùn)動規(guī)劃的一大難題,如果采用基于采用的規(guī)劃算法,那么我們需要對每個采樣點(diǎn)做有效性判斷,這時候就需要進(jìn)行碰撞檢測。所以,運(yùn)動規(guī)劃需要提供一個高效的碰撞檢測算法。幸好,香港城市大學(xué)的潘佳大神寫了個FCL(Flexible Collision Library),可以非??焖俚貙?shí)現(xiàn)各種幾何體(3D面片、OctoMap、基本幾何體)的碰撞檢測。(這個不是坑,直接用很好用,但以后有機(jī)會可以好好說說,反正潘大神不會看朋友圈,不至于班門弄斧)。 

  • 軌跡插值(Trajectory Processing):由于大多數(shù)規(guī)劃器只能返回一系列路徑點(diǎn),MoveIt可以根據(jù)機(jī)器人的控制參數(shù)(速度、加速度限制等)重新處理路徑,生成一條帶有時間戳、位置、速度、加速度信息的完整軌跡。 

  • 控制(Controll):這個其實(shí)不能算控制,只是一個機(jī)器人控制接口問題。由于不同機(jī)器人的控制接口都不一樣,開發(fā)者只需簡單修改配置文件,就可以讓MoveIt發(fā)布出機(jī)器人相應(yīng)的控制指令(只是修改action名字而已)。 

  • 導(dǎo)航(Navigation):這是個大坑,MoveIt雖然原理上可以進(jìn)行移動機(jī)器人的導(dǎo)航,但是它沒提供針對移動機(jī)器人的規(guī)劃器。也就是說目前它的Navigation功能是不能直接使用的(自己寫規(guī)劃器和碰撞檢測已經(jīng)超出初學(xué)者的要求了)。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

  • 交互(Interaction):MoveIt給開發(fā)者提供了三種方式交互方式,Rviz圖形界面(直觀)、Python(快速編程)、C++(豐富的高級功能)。 

目前而言,MoveIt還只是一個針對機(jī)械臂運(yùn)動規(guī)劃問題的軟件平臺,暫時還不是適合用在Navigation、manipulation、control、perception等領(lǐng)域。 

為什么選擇MoveIt

其實(shí),要做運(yùn)動規(guī)劃可以用很多方法:自己寫、OMPL、OpenRave等。我個人認(rèn)為選擇MoveIt大概有三個原因: 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

| 對初學(xué)者很友好 

前面我們已經(jīng)知道,要想自己從頭建立一個運(yùn)動規(guī)劃的軟件平臺需要花費(fèi)非常多力氣:運(yùn)動學(xué)正逆解、碰撞檢測算法、環(huán)境識別、規(guī)劃算法,任何一點(diǎn)都是需要一段不短的時間積累才可能親手實(shí)現(xiàn)的。初學(xué)者可能一開始就被這些次要問題打退了。 

自己寫:對初學(xué)者簡直是災(zāi)難,尤其是沒人帶的情況; 

OMPL:完全沒有機(jī)器人的概念,需要用戶自己集成運(yùn)動學(xué)、碰撞檢測算法,它的官方文檔也不涉及如何利用OMPL做機(jī)器人的運(yùn)動規(guī)劃問題; 

OpenRave:雖然OpenRave已經(jīng)有自己的一套機(jī)器人描述方法,但是它的文檔不太友好。 

用MoveIt的話,初學(xué)者只需準(zhǔn)備機(jī)器人的模型,跟著教程走,便可以在半小時內(nèi)實(shí)現(xiàn)仿真環(huán)境中的機(jī)器人運(yùn)動規(guī)劃演示。 

| 方便研究 

這個應(yīng)該是更重要的因素。運(yùn)動規(guī)劃由很多子問題構(gòu)成,每個子問題都可以成為一個研究點(diǎn)。MoveIt幾乎所有組件都是以Plugin的形式工作的,也就是說我們可以隨時更換它的任一模塊。目前它支持以下組件的修改: 

運(yùn)動學(xué)求解器 

規(guī)劃算法 同時OMPL自身也支持用戶自己編寫規(guī)劃器 

規(guī)劃器初始化方法 

控制器接口 

傳感器接口 

規(guī)劃器的采樣算法 

碰撞檢測算法 

OctoMap更新算法 

如果是做這些課題研究的人,完全可以先用MoveIt建立一個環(huán)境,之后修改相應(yīng)Plugin,換成自己的算法。這樣可以讓我們將側(cè)重點(diǎn)放在主要矛盾上。 

| 活躍的社群 

這點(diǎn)其實(shí)就是ROS相對于其他機(jī)器人開發(fā)平臺的優(yōu)點(diǎn)。MoveIt依托于ROS,也擁有很高的人氣(去年的調(diào)研結(jié)果看,MoveIt是ROS中使用度排名第三的package)。 

活躍的社群對于學(xué)習(xí)是大有裨益的: 

  • ①遇到問題很容易問到能解決的人,剛開始MoveIt還沒出文檔,我就是靠著MoveIt的mail lists入門的; 

  • ②網(wǎng)站、教程、代碼維護(hù)更新很好,MoveIt剛推出時,總是有一大堆Bug,現(xiàn)在才過幾年,已經(jīng)非常好用了,官方教程也已經(jīng)非常人性化了。 

怎么樣使用MoveIt

要用MoveIt控制機(jī)器人大概分為以下幾步: 

建立機(jī)器人URDF模型(必須) 

建立機(jī)器人ROS驅(qū)動 

生成MoveIt配置文件(必須) 

標(biāo)定相機(jī) 

修改MoveIt配置文件與launch文件 

機(jī)器人,走你?。ū仨殻?nbsp;

其中,上面未標(biāo)明“(必須)”字樣的只有在使用實(shí)際機(jī)器人時才需要。初學(xué)者如果只想在仿真里看看的話,可以先跳過。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?


| 建立機(jī)器人URDF模型(必須) 

URDF(Unified Robot Description Format)是ROS中使用的一種機(jī)器人描述文件,它以HTML的形式定義一個機(jī)器人。包含的內(nèi)容有:連桿、關(guān)節(jié)名稱,運(yùn)動學(xué)參數(shù)、動力學(xué)參數(shù)、可視化模型、碰撞檢測模型等。

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

后續(xù)碰撞檢測、運(yùn)動學(xué)求解、規(guī)劃等都依賴于URDF文件。 

那么,要如何建立URDF文件呢?如果你用的是單臂、串聯(lián)機(jī)器人,并且你本人沒有強(qiáng)迫癥的話,可以使用ROS官方發(fā)布的sw_urdf_exporter,它可以幫你從SolidWorks中導(dǎo)出URDF文件。

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

但如果不幸你使用的是雙臂(雙臂機(jī)器人用這個插件經(jīng)常出問題)或者非并聯(lián)機(jī)器人(需要自己用mimic_joint改成串聯(lián)形式),又或者你有強(qiáng)迫癥(想要盡量簡潔、漂亮的模型)的話,可以考慮自己手寫URDF或者xacro文件(坑)。 

這點(diǎn)我就不具體說了,簡單寫幾個要點(diǎn): 

多臂用xacro來減少工作量; 

坐標(biāo)系設(shè)置盡量滿足所有關(guān)節(jié)為0°時候,所有坐標(biāo)系同姿態(tài)(這樣可以避免引入pi); 

如果想要有顏色的模型,可以自己生成每個零件的dae模型,而不使用stl模型; 

可視化模型采用漂亮、精細(xì)的模型,碰撞模型可以使用簡化的模型。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

| 建立機(jī)器人ROS驅(qū)動 

如果你不用真實(shí)機(jī)器人,這步可以先跳過。 

機(jī)器人的ROS驅(qū)動并沒有什么標(biāo)準(zhǔn)的格式或者規(guī)定。對于MoveIt而言,只要求你有個ROS node,它有兩個功能: 

1)發(fā)布關(guān)節(jié)角度/joint_states 

如果連接實(shí)際機(jī)器人,MoveIt需要從機(jī)器人當(dāng)前狀態(tài)開始規(guī)劃,因此這個ROS驅(qū)動需要能夠?qū)崟r獲取機(jī)器人的各關(guān)節(jié)信息(如角度),并用過/joint_states消息發(fā)布; 

2)接收規(guī)劃結(jié)果,并下發(fā)給機(jī)器人 

由于MoveIt規(guī)劃的結(jié)果會以一個action的形式發(fā)布,所以我們的ROS驅(qū)動就應(yīng)該提供一個action server,這個功能就是接收規(guī)劃結(jié)果,下發(fā)給機(jī)器人,并反饋執(zhí)行情況。action的類型是control_msgs/FollowJointTrajectory。 具體action的寫法可以參照ROS官網(wǎng)(坑)。

簡單而言,一個action有五個部分: 

  • action_name/goal:這個就是規(guī)劃的路徑,我們需要接收這個路徑,并將所有路徑點(diǎn)解析成機(jī)器人控制器可以識別的形式,之后下發(fā)給機(jī)器人,必須要有; 

  • action_name/cancel:這個指令可以隨時中斷正在執(zhí)行的動作,但并不是必須的功能; 

  • action_name/feedback:這個是實(shí)時反饋執(zhí)行狀態(tài),最簡單的就是將機(jī)器人當(dāng)前關(guān)節(jié)角度等信息反饋回去,非必須; 

  • action_name/status:這個用于顯示機(jī)器人狀態(tài),如正在執(zhí)行動作、等待、執(zhí)行結(jié)束等待,非必須; 

  • action_name/result:這個就是在動作執(zhí)行完之后給MoveIt反饋一個執(zhí)行結(jié)果,這個是必須要有的,當(dāng)然,為了簡單,可以已接收到goal就反饋執(zhí)行成功。 

這部分在MoveIt部分是看不到文檔的,所以也是阻礙初學(xué)者使用MoveIt控制自己機(jī)器人的最大問題之一。但是了解了它的機(jī)理之后,就比較簡單了。 如果你是第一次使用MoveIt,極力推薦你先試試UR、Baxter等已經(jīng)寫好這部分驅(qū)動的機(jī)器人。 

生成MoveIt配置文件(必須) 

這個利用MoveIt的setup assistant界面,按照教程很容易就能配置好。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

這步做完,就可以直接在仿真里面看運(yùn)動規(guī)劃效果了。這是我覺得MoveIt對初學(xué)者最友善的地方,不用寫一行代碼就可以看到運(yùn)動規(guī)劃。 

| 標(biāo)定相機(jī) 

這個主要涉及相機(jī)模型與AX=XB求解問題,不多贅述。 這步就是為了讓機(jī)器人知道攝像頭放在機(jī)器人的哪個位置。大家可以看看我實(shí)驗(yàn)室?guī)煹軐懙淖詣訕?biāo)定演示: 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

一個launch文件就能完成標(biāo)定,不知比我當(dāng)年寫的手動標(biāo)定方法高多少。這個標(biāo)定程序我們之后可能會開源出來。如果有機(jī)會我也會順便講講它的原理(坑)。 

修改MoveIt配置文件與launch文件 

因?yàn)榍懊嫔傻奈募际轻槍μ摂M機(jī)器人的,如果需要連接實(shí)際機(jī)器人,需要修改一些配置文件,我可能記不太清具體要修改幾個文件了,請以官方教程為主: 

  • controllers.yaml:這個就是要根據(jù)你的ROS驅(qū)動中的action來修改,MoveIt可以根據(jù)這個配置文件發(fā)布出與機(jī)器人驅(qū)動相匹配的action。簡單地說,就是action的名字、類型、關(guān)節(jié)名字幾個信息。 

  • robot_moveit_controller_manager.launch:這個額外新增,就是在不適用fake controller的時候能找到上述controller.yaml文件,發(fā)布出正確的action類型。 

  • sensors.yaml:這個需要額外增加,它主要定義了點(diǎn)云的消息名稱、OctoMap屬性等。 

  • moveit_sensor_manager.launch:同樣的,增加傳感器配置文件后,我們也需要在launch文件中增加對配置文件的讀取。 

  • 其他(可選):industrial_robot_simulator、warehouse、joystick、規(guī)劃器、規(guī)劃算法庫…… 

  • 機(jī)器人,走你?。ū仨殻?nbsp;

上述內(nèi)容完成后,就可以Enjoy Yourself了,無論是Rviz, Python 還是C++,都可以用來進(jìn)行運(yùn)動規(guī)劃,如果連接了真實(shí)機(jī)器人,那么也可以在實(shí)際機(jī)器人上完成運(yùn)動規(guī)劃。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺?

其他 

雖然寫了這么多,但感覺還是沒寫清楚,最后隨便列點(diǎn)之前大家在后臺問過的比較多的問題: 

什么機(jī)器人能用MoveIt 

MoveIt其實(shí)跟機(jī)器人關(guān)系不大,只要你有URDF文件,能接受控制指令,那么就能用MoveIt,移動機(jī)器人的話也可以,只是MoveIt現(xiàn)在沒有針對Navigation做規(guī)劃器。 

怎么用MoveIt做移動機(jī)器人3D Navigation 

相對于傳統(tǒng)Navigation包,MoveIt中可以做3D的碰撞檢測,但是它尚未加入適合移動平臺的規(guī)劃算法。大概做法如下: 

  • 修改FCL,開放出碰撞檢測函數(shù)(最新版本好像已經(jīng)可以直接調(diào)用了); 

  • 寫一個規(guī)劃器:最簡單的就是自己寫一個A*或Dijkstra,也可以想辦法將SBPL用起來(我沒在移動機(jī)器人上試過),這樣就可以進(jìn)行全局規(guī)劃了; 

  • 寫一個action server,接受規(guī)劃結(jié)果,同時將其轉(zhuǎn)換成Navigation包的gloal_planner相同格式,利用Navigation的local_planner完成路徑跟蹤;當(dāng)然,這一步也可以自己寫local_planner。 

怎么用MoveIt做飛行器或潛艇的路徑規(guī)劃 

這個與上個問題類似,MoveIt沒有針對剛體的規(guī)劃算法,如果可以接受RRT的規(guī)劃結(jié)果,那么理論上講是可以直接使用的。 

| 如何在MoveIt上使用自己的規(guī)劃算法 

我只嘗試過先在OMPL中寫自己的規(guī)劃器,之后通過修改moveit_planner中的ompl_interface,將自己的規(guī)劃器用到MoveIt中; 如果是非Sampling-based方法,那就要去看看MoveIt的Plugin怎么改了,這部分我沒經(jīng)驗(yàn)。 

如何學(xué)習(xí)MoveIt 

關(guān)注我的公眾號(劃重點(diǎn)); 

  • 學(xué)ROS基本概念:三種消息機(jī)制等; 

  • 學(xué)教程:按照官網(wǎng)教程走一遍; 

  • 遇到問題,先在ROS問答區(qū)或MoveIt的mail lists搜索是否有同類問題,如沒有,則自己在上述平臺提問; (至此, 你已經(jīng)會用MoveIt了,但用得效果肯定不好) 

  • 看MoveIt各部分API,闡釋其高級功能; 

  • 根據(jù)自己需要,修改部分源碼(例如開放出FCL的各種功能),之后再M(fèi)oveIt官方github上提出修改源碼請求(PR); (至此,你已經(jīng)掌握了MoveIt這個工具,可以充分發(fā)揮MoveIt的功能) 

  • 根據(jù)自己的研究內(nèi)容,寫自己的Plugin,充分發(fā)掘MoveIt的潛力; 

  • 如果效果好,那么在IROS/ICRA發(fā)paper,會議中找MoveIt的作者們聊天,回家后到github上將自己的代碼開源,并PR到MoveIt上。 

如何利用ROS MoveIt快速搭建機(jī)器人運(yùn)動規(guī)劃平臺? 

機(jī)器人,走你!                        

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

分享:
相關(guān)文章

專欄作者

上海交通大學(xué)機(jī)器人所博士生,本科畢業(yè)于清華大學(xué)機(jī)械工程系,主要研究方向機(jī)器視覺與運(yùn)動規(guī)劃,個人微信公眾號:Nao(ID:qRobotics)
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說