Moveit工作流程
- Moveit進行避障規劃運動時,首先利用RRT算法規劃出一個空間軌跡(此時只有位置信息,即關節的角度),
- 然後採用規劃器的TOPP算法給這條路附加上速度,時間等信息,(即進行了關節的插補)
主體流程:在moveit中得到運動軌跡,再利用插補算法計算出路徑上個點對應的各州的 角度,然後發給伺服驅動,完成運動,
Moveit的規劃軌跡是關節空間,即對應於各軸的位置、速度、加速度,ROS自帶的插補算法在ros_controller 功能包中,有源碼參考,
古月老師的做法是:將moveit規劃的多關節空間的軌跡點,然後發到機器人的控制器端,控制器端爲滿足EtherCAT實時性和穩定性,沒有用ROS,控制器端根據相鄰的軌跡點(各軸角度)用五次曲線做插值,然後週期性通過EtherCAT控制伺服輸出。
https://blog.csdn.net/lingchen2348/article/details/80261161
使用moveit!控制真實機械臂(3)——修改moveit配置文件來控制真實機械臂(9月27日更新):https://blog.csdn.net/lingchen2348/article/details/80300069
詳細解析瞭如何從虛擬的機器人修改相應文件以滿足真實機器人的控制需求,適用於所有的機器人
moveit採用action的方式來控制機械臂,本文相當於action的客戶端,
在下一篇文章(4)(5)中寫了action服務端的實現,只有兩邊全實現了,才能真正控制機械臂,而服務端的action實現過程通用性要差的多
使用moveit!控制真實機械臂(4)——瞭解moveit!所使用的action
https://blog.csdn.net/lingchen2348/article/details/80260973
1.action的基礎內容可以先看一下ros 官網和古月的博客,可以這樣簡單理解:action打包了同一行爲下的多個消息,使用action可以將你從繁瑣的消息訂閱與發佈編程中解放出來,並且使節點間的信息交互能力大大提升,
moveit扮演的角色是客戶端(即發送運動參數的,),服務端(接受運動參數的)纔是我們需要編寫的部分,不要搞反了。
它的內部有一個重要成員 trajectory,當你使用moveit規劃了一個機械臂運動路徑時,它記錄了機械臂運動的各個軌跡點,每個軌跡點以機械臂關節角的形式表述,這個數據也是我們最終控制機械臂所想要的最終數據,
使用moveit!控制真實機械臂(5)——編寫真實機械臂節點中的action服務程序https://blog.csdn.net/lingchen2348/article/details/80379166
1.預備條件:
1)、機械臂底層驅動已經完成。
無論你的機械臂是從大牌公司買來的還是自己造的,請預先完成好底層驅動控制部分,這裏假設你的驅動控制程序不包括ROS相關代碼,沒有消息、沒有action等等這些ROS纔有的東西,僅僅是用C++語言控制機械臂的基本運動(比如運動到指定關節角、機械臂末端運動到指定位置和姿態)。這很重要,因爲我們的目標是使用moveit控制真實機械臂,如果底層驅動還有問題,那後續內容就無從談起了
2、機械臂能夠按照路點(軌跡)運動。
具體改造過程:
1、用ROS封裝你的驅動程序。
(4)初始化這個服務端對象
先來看看官網是怎麼初始化action服務端對象的,
官網中,action的實現是在一個類裏,as_作爲這個類的一個成員變量,as_的初始化寫在了該類構造函數的初始化列表裏(即構造函數冒號後面的內容),這一點很關鍵,因爲服務端對象as_的初始化要先於包含它的類,因此,as_的初始化寫錯位置是要報錯的