大阪大学 中島優作
本スライド(実践)、教科書(理論)の併用がおススメ
環境構築がまだの方は→環境構築はこちら
イラストが豊富で分かりやすいながらも基礎的な数式を扱っていて最初に読むのにちょうど良い
最も基本の位置制御まで扱っている
教科書「ロボット制御基礎論」を現在版にブラッシュアップ、理論的な詳しさと実装面までの手引きが充実
本スライドでは軌道制御の実装を扱います
JointTrajectoryControllerってどういう意味?
ROSのコントローラの命名則↓
ロボット関節の制御 | 指定したい座標系 | ユーザーが実現したい制御 |
---|---|---|
位置 | 関節座標系 | 位置 |
速度 | 直交座標系 | 速度 |
トルク | 力(トルク) |
position_controllers/JointTrajectoryController
参考: joint_trajectory_controller.md
position_controllers→velocity_controllersでも利用可能
position_controllers, velocity_controllersのみ使用可
effort_controllersも使用可
位置(position)+向き(orientation)=姿勢(pose)
実用上は最初と最後の姿勢をオイラー角で指定、クオータニオンに変換後に補完してROSに渡す
MoveItで使える手法一覧
https://opensource-robotics.tokyo.jp/?p=4313
MoveItのデフォルト
XYZでロボットの手先姿勢を指定したい
ただ、動かせるのはロボットの関節
そこで手先姿勢→ロボットの関節の計算をする(逆運動学,IK=InverseKinematics)
現在は汎用性が高く速度も精度も十分になったので数値解を使うことが多い
MoveItのIKソルバー(ROS Service)だけ使用可能
通信時間がかかるので数点のIKなら実用的
大量のIKはIk用ライブラリを直接使うのが良い
実際に使われている手法を紹介
※軌跡と軌道の言葉の定義は「実践 ロボット制御」での定義を使っています
参考資料: joint_trajectory_controller.md
目標姿勢の決定 | :Scipy Rotation Module |
逆運動学 | :MoveIt IK Solver(TrackIK) |
軌道生成 | :JointTrajectoryController |
軌跡生成 | :JointTrajectoryController |
実行 | :JointTrajectoryController |
関節を指定して補間するだけのシンプルなデモ
chmod +x src/ros_study/scripts/JTC_demo.py
rosrun ros_study JTC_demo.py
※避けるにはwaypoints間の関節角度に許容量を持たせる等の実装をする
# ur_joint_trajectory_controller.yaml
pos_joint_traj_controller:
type: position_controllers/JointTrajectoryController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
shoulder_pan_joint: {trajectory: 0.2, goal: 0.1}
shoulder_lift_joint: {trajectory: 0.2, goal: 0.1}
elbow_joint: {trajectory: 0.2, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 500
action_monitor_rate: 20
ここまで紹介した手法の課題
※教科書で出てくる時間多項式とスプラインは等価です
2点→時間多項式, 複数点→スプラインという違いです
補間方法 | 計算コスト | 滑らかさ | 連続性 | 適用場面 |
---|---|---|---|---|
線形補間 | 低 | 低 | C⁰ | 高速動作・簡単制御 |
3次スプライン | 中 | 中 | C¹ | 一般的なロボット制御 |
5次スプライン | 高 | 高 | C² | 高精度作業・振動抑制 |
台形補間 | 低 | 中 | C⁰ | 高速動作・効率重視 |
迷った場合は3次スプラインが無難
waypointsが少ないと波打つ
waypointsを増やす滑らか
それでも厳密な速度計算が必要という方は↓
デバッグ用にwaypointsを表示したいことはよくある、方法を紹介