由浅到深理解ROS(9)- 几个基本概念的理解 坐标系 包
1.坐標系
最常用的就是map,odom,base_link,base_laser坐標系,這也是開始接觸gmapping的一些坐標系。
map:地圖坐標系,顧名思義,一般設該坐標系為固定坐標系(fixed frame),一般與機器人所在的世界坐標系一致。
base_link:機器人本體坐標系,與機器人中心重合,當然有些機器人(PR 2)是base_footprint,其實是一個意思。(base_link坐標系原點一般為機器人的旋轉中心,base_footprint坐標系原點為base_link原點在地面的投影,有些許區別(z值不同))
odom:里程計坐標系,這里要區分開odom topic,這是兩個概念,一個是坐標系,一個是根據編碼器(或者視覺等)計算的里程計。但是兩者也有關系,odom topic 轉化得位姿矩陣是odom-->base_link的tf關系。這時可有會有疑問,odom和map坐標系是不是重合的?(這也是我寫這個博客解決的主要問題)可以很肯定的告訴你,機器人運動開始是重合的。但是,隨著時間的推移是不重合的,而出現的偏差就是里程計的累積誤差。那map-->odom的tf怎么得到?就是在一些校正傳感器合作校正的package比如amcl會給出一個位置估計(localization),這可以得到map-->base_link的tf,所以估計位置和里程計位置的偏差也就是odom與map的坐標系偏差。所以,如果你的odom計算沒有錯誤,那么map-->odom的tf就是0.
base_laser:激光雷達的坐標系,與激光雷達的安裝點有關,其與base_link的tf為固定的。
?
參考:http://www.ros.org/reps/rep-0105.html
2.包
??????? 在ROS中,進行導航需要使用到的三個包是:
????? (1) move_base:根據參照的消息進行路徑規劃,使移動機器人到達指定的位置;
????? (2) gmapping:根據激光數據(或者深度數據模擬的激光數據)建立地圖;(gmapping是一個比較完善的地圖構建開源包,使用激光和里程計的數據來生成二維地圖。)
????? (3) amcl:根據已經有的地圖進行定位。
3.MoveIT
moveit是ros中一系列移動操作的功能包的組成,主要包含運動規劃,碰撞檢測,運動學,3D感知,操作控制等功能。
1.move_group:move_group是moveit的核心部分,可以綜合機器人的各獨立組件,為用戶提供一系列的動作指令和服務。move_group類似于一個積分器,本身并不具備豐富的功能,主要做各功能包和插件的集成。它通過消息或服務的形式接收機器人上傳的點云信息,joints的狀態消息,還有機器人的tf tree,另外還需要ros的參數服務器提供機器人的運動學參數,這些參數會在使用setup assistant的過程中根據機器人的URDF模型文件,創建生成,包括SRDF文件和配置文件。
2.motion panning(運動規劃):在moveit中,運動規劃算法是由運動規劃器(motion planner)完成,而規劃器是作為插件來安裝的,可以通過ROS的pluginlib接口來加載需要的規劃器。運動規劃算法有很多,每一個運動規劃器都是moveit的一個插件,可以根據需求選用不同的規劃算法,move_group默認使用的是OMPL算法。
3.Planning Scene(規劃場景):可以為機器人創建一個具體的工作環境,加入一些障礙物。
4.Kinematics(運動學):運動學算法是機械臂各種算法中的核心,尤其是逆運動學算法IK(inverse kinematics)。什么是逆運動學(IK)?簡單說,就是把終端位姿變成關節角度,q=IK(p)。p是終端位姿(xyz),q是關節角度。為什么要用IK?OMPL是采樣算法,也就是要在關節空間采樣。 這與無人車的規劃有一個最明顯的區別,無人車的目標就是在采樣空間, e.g. 目標是(x,y), 采樣空間也是(x,y). 但是對于機械臂,目標是終端空間位置(xyz), 但采樣空間卻是關節空間(q0,q1,…qN)。有了IK之后,我們就可以把三維空間的目標p轉化為關節空間的目標q。那么這樣就會讓采樣算法能算的更快,具體方法不贅述,這樣的算法有RRT-Connect,BKPIECE等等雙向采樣算法。moveit使用插件的形式可以讓用戶靈活的選擇需要使用的反向運動學算法,也可以選擇自己的算法。moveit中默認的IK算法是numerical jacobian-base算法。
5.collision checking(碰撞檢測):moveit使用CollisionWorld對象進行碰撞檢測,采用FCL(Flexible Collision Library)功能包。碰撞檢測是運動規劃中最耗時的運算,往往會占用90%左右的時間,為了減少計算量,可用通過設置ACM(Allowed Collision Matrix)來進行優化,如果兩個bodys之間的ACM設置為1,則意味著這兩個bodys永遠不會發生碰撞,不需要進行碰撞檢測。
6.OMPL(open motion planning library):開源運動規劃庫,是一個運動規劃的C++庫,其中包含了很多運動規劃領域的前沿算法。雖然OMPL里面提到了最優規劃,但總體來說OMPL還是一個采樣規劃算法庫。而采樣規劃算法中,最出名的莫過于RRT(rapidly-exploring random trees)和PRM(probabilistic roadmap)。 OMPL能做什么? 簡單說,就是提供一個運動軌跡。給定一個機器人結構(假設有N個關節),給定一個目標(比如終端移到xyz),給定一個環境,那么OMPL會提供給你一個軌跡,包含M個數組,每一個數組長度是N,也就是一個完整的關節位置。沿著這個軌跡依次移動關節,就可以最終把終端移到xyz,當然,這個軌跡應當不與環境中的任何障礙發生碰撞。為什么用OMPL? 運動規劃的軟件庫和算法有很多,而OMPL由于其模塊化的設計和穩定的更新,成為最流行的規劃軟件庫之一。很多新算法都在OMPL開發。很多其他軟件(包括ROS/MoveIt)都使用OMPL做運動規劃。
7.用moveit控制機器人大概分以下幾步:
a.建立機器人URDF模型
b.建立機器人ros驅動
c.生成moveit配置文件
d.標定相機
e.修改moveit配置文件和launch文件
其中在進行仿真操作過程中,不需要b,d,e三個步驟。
?
總結
以上是生活随笔為你收集整理的由浅到深理解ROS(9)- 几个基本概念的理解 坐标系 包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10年前我国的GDP超日本后,今年有望达
- 下一篇: 【转】TFS上分支和标签的用法