前一講python介面中提到moveit_commander 包。這個包提供了用於運動規劃、笛卡爾路徑計算以及拾取和放置的介面。
moveit_commander 包還包括一個命令列介面程式moveit_commander_cmdline.py. 可以通過一些簡單的命令來替代程式設計。
先開啟 panda 機械臂模型
cd ARM/ cd ws_moveit/ source devel/setup.bash roslaunch panda_moveit_config demo.launch
然後在新視窗中(可以不必切換到ws_moveit 包下)
rosrun moveit_commander moveit_commander_cmdline.py
就可以看到以下畫面:
這個命令列工具可以啟動move_group的一些運動範例。
首先需要指定我們要控制的規劃組:
use panda_arm
這會連線到指定的move_group 結點,接下來的命令都是在這個規劃組上進行的。
顯示當前狀態
current
記錄某個狀態並命名
rec init
#相當於把當前關節記為 init
# 顯示: Remembered current joint values under the name init
#輸入vars可以顯示所有命名狀態。
這就相當於前面提到過的 move_group.getCurrentState()
,然後就可以通過修改關節值來進行規劃。
進行運動規劃 (正向運動學)
最近偶然翻閱《ROS機器人進階範例》P309,發現這種修改關節值的方式就是正向運動學,而另一種指定目標姿態的即逆向運動學。
goal = init goal[1] = 0.2 go goal
python介面 提到過,go()是 plan + execute,所以也可以用後者替代:
goal[0] = 0.2 goal[1] = 0.2 plan goal execute
看起來多了一步,但視覺化了規劃的過程,在某些時候會派上用場,比如分析機械臂的奇異解。
更多的功能可以輸入 help
來查閱。
此外,關心這些功能如何實現,可以看一看moveit_commander_cmdline.py 的原始碼。
最後,退出命令列工具可以輸入 quit
或者Ctrl+C
這部分比較簡單,就是幾個命令而已。而且感覺不是很實用,我最關心的是,如何通過命令列工具的命令,快速讓機械臂達到某個狀態或者實現某個運動。
比如我寫好了一個抓取瓶子的程式,如何將其封裝成一個簡單的命令呢?