welcom ! Handel home

2025年2月25日 星期二

(Robot_arm) moveit_commander 套件安裝與執行範例

 moveit_commander 套件安裝與執行範例

moveit_commanderMoveIt! 提供的 Python API,可用於控制機械臂、執行運動規劃、設定目標點等。你可以透過 moveit_commander_cmdline.py 在指令列 測試與控制機械臂,或編寫 Python 腳本來進行更複雜的操作。


1️⃣ 安裝 moveit_commander

在 ROS 1 Noetic(Ubuntu 20.04)Melodic(Ubuntu 18.04),執行以下命令來安裝 moveit_commander

bash
sudo apt update sudo apt install ros-noetic-moveit-commander # 如果是 Noetic # 或者 sudo apt install ros-melodic-moveit-commander # 如果是 Melodic

如果你使用的是 ROS 2(如 Foxy、Humble),則 moveit_commander 是內建於 MoveIt 2 的,你需要安裝 MoveIt:

bash
sudo apt install ros-humble-moveit

📌 確認安裝成功

bash
rospack find moveit_commander

如果安裝成功,會顯示:

swift
/opt/ros/noetic/share/moveit_commander

2️⃣ 測試 moveit_commander_cmdline.py

這是 MoveIt! 內建的 指令列測試工具,可用來測試機械臂運動規劃。

📌 啟動機械臂模擬環境

bash
roslaunch moveit_tutorials demo.launch

這會啟動:

  • MoveIt!
  • 機械臂(如 Panda 機械臂)
  • RViz(用於視覺化)

📌 進入 moveit_commander 交互模式

bash
rosrun moveit_commander moveit_commander_cmdline.py

你會看到類似的提示:

pgsql
MoveIt! Commander - Tools for interacting with MoveIt! Type `help` to get started.

你現在可以輸入 指令 來控制機械臂,例如:

python
>>> robot.get_current_state()

這會顯示當前的機械臂狀態。

📌 設定機械臂目標位置

python
>>> arm.set_named_target("home") >>> arm.go()

這會讓機械臂移動到預設的 home 位置。

📌 手動設定目標位置

python
>>> arm.set_position_target([0.3, 0.2, 0.5]) >>> arm.go()

這會讓機械臂移動到 (x=0.3, y=0.2, z=0.5)

📌 檢查目前機械臂的位置

python
>>> arm.get_current_pose().pose

📌 結束 moveit_commander

python
>>> exit()

3️⃣ 編寫 Python 腳本控制機械臂

除了使用指令列模式,你也可以寫 Python 程式來控制機械臂。

📌 建立 Python 檔案

bash
nano move_arm.py

📌 輸入以下程式碼

python
#!/usr/bin/env python3 import sys import rospy import moveit_commander import geometry_msgs.msg # 初始化 MoveIt Commander moveit_commander.roscpp_initialize(sys.argv) rospy.init_node('move_arm_script', anonymous=True) # 取得機械臂控制物件 robot = moveit_commander.RobotCommander() scene = moveit_commander.PlanningSceneInterface() arm = moveit_commander.MoveGroupCommander("panda_arm") # 設定目標位置 pose_target = geometry_msgs.msg.Pose() pose_target.position.x = 0.4 pose_target.position.y = 0.2 pose_target.position.z = 0.3 arm.set_pose_target(pose_target) # 執行規劃並移動機械臂 plan = arm.go(wait=True) # 停止 MoveIt! arm.stop() arm.clear_pose_targets() moveit_commander.roscpp_shutdown()

📌 執行腳本

bash
python3 move_arm.py

機械臂應該會移動到 (0.4, 0.2, 0.3) 位置!


4️⃣ moveit_commander 主要 API

函數功能
robot.get_current_state()取得機械臂的當前狀態
arm.set_named_target("home")設定機械臂到預設位置
arm.set_position_target([x, y, z])設定目標位置(只移動終端)
arm.set_pose_target(pose)設定目標姿勢(包含旋轉)
arm.go(wait=True)執行運動規劃
arm.get_current_pose()取得機械臂目前的位置

📌 總結

步驟命令
安裝 moveit_commandersudo apt install ros-noetic-moveit-commander
啟動 MoveIt! 模擬roslaunch moveit_tutorials demo.launch
進入指令列模式rosrun moveit_commander moveit_commander_cmdline.py
執行 Python 腳本python3 move_arm.py

🚀 這樣你就可以使用 moveit_commander 控制機械臂了! 🎯

沒有留言: