在 Gazebo ROS 中,你可以使用 ros_gazebo
提供的 topics 來控制機器人的位置、方向,或改變連結狀態。以下提供具體範例,展示如何透過 ROS 指令或 Python 程式來控制機器人。
方法 1:使用 /gazebo/set_model_state
來移動機器人
這個方法可以讓你直接改變機器人的位置,而不需要透過控制器 (如 cmd_vel
)。
1.1 使用 rostopic pub
指令來移動機器人
你可以用 rostopic pub
來將機器人傳送到指定位置,例如:
🔹 說明:
model_name: "robot_name"
→ 這裡要填你的機器人名稱,可以在/gazebo/model_states
找到。pose.position.x/y/z
→ 設定機器人新位置。pose.orientation.x/y/z/w
→ 設定機器人旋轉角度 (四元數)。twist.linear / angular
→ 設定機器人的速度 (這裡設為0.0
表示靜態移動)。reference_frame: "world"
→ 參考座標系 (通常設為"world"
)。
1.2 使用 Python 控制機器人移動
你也可以使用 Python 腳本來發送 set_model_state
指令:
🔹 執行方式:
- 儲存為
move_robot.py
- 給予執行權限:
- 執行:
方法 2:使用 /cmd_vel
控制機器人移動
如果你的機器人使用 差速驅動 (如 TurtleBot),你可以透過 /cmd_vel
來讓機器人移動,而不只是改變位置。
2.1 發送速度指令
🔹 說明:
linear.x = 0.5
讓機器人向前移動。angular.z = 0.3
讓機器人向左旋轉。-r 10
代表每秒發送 10 次指令。
2.2 使用 Python 發送速度指令
🔹 執行方式:
- 儲存為
move_cmd_vel.py
- 給予執行權限:
- 執行:
方法 3:使用 /gazebo/set_link_state
移動機器人的部件
如果你只想移動機器人的某個 連結 (link),例如讓機械臂某個關節變動,可以使用 /gazebo/set_link_state
。
3.1 使用 rostopic pub
設定某個 Link 的狀態
🔹 說明:
link_name: "robot::arm_link"
→ 設定某個 link (替換成你的 link 名稱)。pose.position.x/y/z
→ 設定新位置。pose.orientation
→ 設定旋轉角度。
結論
方法 | 適用情境 | 指令 |
---|---|---|
/gazebo/set_model_state | 直接改變機器人位置 | rostopic pub or Python |
/cmd_vel | 讓機器人移動 (類似遙控車) | rostopic pub or Python |
/gazebo/set_link_state | 只改變某個連結的位置 | rostopic pub or Python |
如果你想讓機器人立即跳躍到某個位置,用 /gazebo/set_model_state
會比較簡單;如果你想模擬機器人的移動行為,使用 /cmd_vel
會更貼近真實機器人的運動方式。
你可以根據你的需求選擇最適合的方法來控制 Gazebo 中的機器人!🚀
沒有留言:
張貼留言