ロボット工学6
note Item Type Metadata
note
ロボットの座標系と関節制御
1. ロボット制御の歴史と発展
1.1 古代から現代への発展
ロボットを動かす場合、たくさんの関節があり、これを自由自在に動かしたいと考える。
紀元前の伝承などには、ゴーレムや自動人形が意のままに動く存在として登場する。これらはまだ神話や伝説の域だが、「人が命令すれば自由自在に複雑な動きを実現する人形(ロボット)」という構想は古くから存在していた。例えばギリシャや中国の古代にも、ゼンマイや重り・水力などを利用した「からくり人形」や機械仕掛けの自動装置の記録が残されている。これらは特定の動きしかできなかったが、人の操作や命令によって"自在に"多様な動きをさせたいという夢は、古くから工学者や発明家によって追い求められてきた。この「自由自在に動かす」構想が、現代のロボット工学や制御理論の原点のひとつとなっている。
1.2 現代のコンピュータ制御
現在はこれをコンピュータのプログラムによって動かしている。
- 関節数が少なければ、アナログ回路によっても動かせる可能性がある
- ただし、特定の動き(からくり人形、茶運び人形=歯車の組み合わせによってある動きを再現)に限定される
- いろいろな動きをさせたいのでコンピュータによって動かすようにする
- 数式によって計算する必要がある
2. ロボット関節の種類と表記法
2.1 関節の基本分類
ロボットの関節の主な種類には、以下の2つがある。
2.1.1 回転関節(Revolute Joint)
- 定義: 軸の周りに回転する関節
- 記号: R、θ
- 運動パラメータ: 角度(度またはラジアン)
- 例: θ₁, θ₂, θ₃ ...(各関節の回転角)
- 機構例: ヒンジ、ベアリング、サーボモータ
2.1.2 直動関節(Prismatic Joint)
- 定義: 一直線に動く関節
- 記号: P、d
- 運動パラメータ: 距離(mmやmなど長さ単位)
- 例: d₁, d₂, d₃ ...(各関節の直線移動距離)
- 機構例:
- ラックとピニオン
- ピストンとシリンダー
- ボールスクリュー(ねじのようなもの)
- リニアガイド
2.2 関節の組み合わせと表現
これらの組み合わせによって、多様なロボット動作を実現できる。理論的には、回転関節と直動関節のみで一般的な機械的運動を表現できるが、構成方法や数によって再現可能な動作範囲が異なる。
注意: ロボットのほとんどは回転関節によって作成されている。
2.3 国際標準表記法
国際的な標準であるデナビット-ハーテンバーグ(DH)表記法でも「R」と「P」が関節タイプを示すために用いられている。
2.3.1 デナビット-ハーテンバーグ(DH)表記法とは
DH表記法は、ロボットアームの各リンク間の関係を4つのパラメータで記述する標準的な方法である:
- a (リンク長): 前の関節軸から次の関節軸までの距離
- α (リンクねじれ角): 前の関節軸を次の関節軸に回転させる角度
- d (リンクオフセット): 前のリンクの長さに沿ったオフセット
- θ (関節角): 前のリンクを次のリンクに回転させる角度
この表記法により、複雑なロボットアームの運動学を体系的に記述できる。
記号まとめ:
- R(Revolute): 回転関節、運動パラメータ=角度 θ
- P(Prismatic): 直動関節、運動パラメータ=距離 d
構成例:
- RRP(回転-回転-直線): 2つの回転関節と1つの直動関節
- RRR(回転-回転-回転): 3つの回転関節
- PPP(直動-直動-直動): 3つの直動関節
3. ロボットの座標系
3.1 直交座標系(デカルト座標系)
3.1.1 基本概念
デカルト座標で見ると、xとyの値によって座標を求める方法(2次元)
デカルト座標の3次元で見るとx、y、zによって座標を求める方法(3次元)
特徴:
- 全ての動きが直動関節で動く
- 座標変換が楽なため計算も簡単である(三角関数が不要なため変換が簡単)
- ただし可動部よりもロボットが大きくなりやすい
- 仕組みが簡単なため壊れにくく、繰り返し作業が多いラインロボットのような工作機械に多い
3.1.2 直交座標系ロボットの応用例
直交座標系(直動関節のみ、または主に直動関節を使う機構)は、以下の製品や分野で広く用いられている。
主要な応用分野:
- 直交ロボット(XYロボット、ガントリーロボット): 部品搬送や組立工程などに多用される
- CNC工作機械(マシニングセンタ、フライス盤など): 3軸(X,Y,Z)で直線運動を行う
- 3Dプリンタ(特にFDMやCartesian型): X,Y,Z軸それぞれが独立して直動
- 自動倉庫のピッキング装置(自動ピック&プレース機器): 積み下ろしや仕分けに使われる
- パレット搬送装置: 工場などで多数見られるXY平面で移動する装置
これらは各軸が直動する構造(XYZデカルト座標系)であり、可動領域の計算や制御がシンプルなため、精密位置決めや繰り返し動作を要する自動化設備に数多く採用されている。
3.2 極座標系
3.2.1 2次元極座標系
全ての関節が回転関節で構成される座標系
2次元極座標系の図: ・←P / / / ー・ーーーーーー基線 ↑ O 図2: 2次元の極座標系
基本要素:
- 原点(O): 基準点
- 基線: 角度0の基準線
- 距離r: 原点からの距離
- 点P: その場所
角度0の基準(基線)とその場所とそこからの距離Rで場所を特定する。
3.2.2 直交座標系との関係
このままだとわかりにくいため、直交座標系と重ねて表現することが多い。
デカルト座標と重ねた図では:
- x軸を基線と重ねる
- x軸とy軸の原点と原点を重ねて表示することが多い
点Pの座標はx,yの座標でも表すことができ、RとΘの2つの表し方がある。
(極座標系と直交座標系は互いに変換できる(誤差もあるが))
直行座標表現から直行座標系
(r,Θ)➡(x,y)
この問題をかんがえるための三角形を考える
◢
三角関数を使うことにより変換できる:
- sinΘ = y/r
- cosΘ = x/r
- tanΘ = y/x
2次元の場合の変換式:
- x = r cosΘ
- y = r sinΘ
これらからrと三角形の角度Θからxとyの値を求めることができる
直行座標系から直行座標表現
(x,y)➡(r,Θ)
三平方の定理から
x^2 + y^2 = r^2
これらにより
r = sqrt(x^2 + y^2)
よってrを求めることができる
tanΘ=y/x
よって
Θ=tan^-1(y/x)手計算ではアークタンジェントの値はテイラー展開で求めることができるxが4yが3の時にテイラー展開のXにy/xを入れて計算するとラジアンの値が出るあとはそれを180/πで割れば度に変換できる。
から
三角形の角度Θを求めることができ、
よってΘとrが求まるため座標変換が完了する
しかし以下の問題点がある
y/x=2/1=2
y/x=-2/-1=2
個の変換ではこの2パターンのように正負の区別ができず同じ値になったり、x=0のときに計算ができない問題がある
直行座標系ではマイナスになる値も一意なため極座標ではそれ以外のパラメータで正負と0のの値を判別する必要がある
例えばx=0,x<0,x>0の三パターンに場合分けして考える。
整理すると以下のようになる:
- Θ = tan⁻¹(y/x) (x > 0)
- Θ = π + tan⁻¹(y/x) (x < 0)
- Θ = π/2 (x = 0, y > 0)
- Θ = -π/2 (x = 0, y < 0)
- 不定 (x = 0, y = 0) r = 0の時には角度が求められない
角度の単位変換
- 360度 = 2πラジアン
- 180度 = πラジアン
- 90度 = π/2ラジアン
|
|
|
|90度(π/2rad)
ーーーーーーーー
|-90度(ーπ/2rad)
|
|
|
|
3.2.4 プログラミングでの座標変換
プログラミング言語で座標変換を行う際には、多くの場合atan2()関数が利用されている。atan2(y, x)はx座標とy座標の符号を考慮し、-π〜πの範囲で正しい角度Θを返す関数である。通常の逆正接関数tan⁻¹(y/x)(またはatan(y/x))ではx=0の時に計算できない、もしくはx,yの正負の違いによる象限判定ができないという問題があるが、atan2()ではこれを自動的に判別してくれる。そのため、atan2()を使うことで極座標θの計算に関するプログラムが簡単かつ安全に記述できる。多くの言語(例:C言語、Python、Java、MATLAB等)に標準搭載されている。なお、関数の結果はラジアン単位となるため度数法が必要な場合は変換も行う。
例:Pythonの場合
import math theta = math.atan2(y, x) # y, xは任意の座標値 theta_deg = math.degrees(theta) # 度数法変換
このようにして、任意の点の角度を正しく求めることができる。
3.2.5 3次元極座標系
3次元の場合、以下の3種類の変数によって表すことができる:
- 距離r: 原点からの距離
- 水平角度φ: 水平面内での角度
- 垂直角度Θ: 垂直方向の角度
3.3 その他の座標系
3.3.1 円筒座標型ロボット
- 高さ方向: 直交座標系(1軸)(直動運動)
- 水平方向: 極座標系(2次元)(回転運動)
- これらによって作成されるロボットのこと
3.3.2 多関節型ロボット
極座標系の連鎖によって多軸制御するもの
3.3.3 スカラ型ロボット
- 高さ方向: 直交座標系(1軸)(直動運動)
- 水平方向: 多関節型(2軸が多い)(回転運動)
4. ロボットアームの自由度
4.1 自由度の定義
自由に動かすことのできる関節の数(しかし数え方に注意)
4.2 6自由度の概念
一般的に6自由度あれば任意の空間の位置と姿勢をとることができる。
6自由度の構成:
- 位置の自由度(3自由度): X, Y, Z
- 姿勢の自由度(3自由度): Θ_x, Θ_y, Θ_z
4.3 自由度の応用
- 3自由度: 位置のみ制御(例:ピック&プレースロボット)
- 6自由度: 位置と姿勢の両方を制御(例:産業用ロボットアーム)
- 7自由度以上: 冗長自由度(例:ヒューマノイドロボット)
4.3.1 冗長自由度とは
冗長自由度とは、6自由度を超える余分な自由度のことである。これにより以下の利点がある:
利点:
- 障害物回避: 同じ目標位置・姿勢でも複数の軌道が可能
- 特異点回避: ロボットが特異姿勢(制御が困難な姿勢)を避けられる
- 最適化: エネルギー効率や速度を最適化できる
- 人間らしい動作: ヒューマノイドロボットで自然な動作が可能
例: 7自由度アームでは、目標位置・姿勢に対して無限の解が存在し、その中から最適な解を選択できる。
5. 実装時の注意点
5.1 座標変換での数値誤差
実装時に座標変換を行う際は、以下の点に注意が必要である:
数値誤差の原因:
- 浮動小数点演算: コンピュータでの計算では微小な誤差が発生
- 三角関数の精度: sin、cos、tan関数の計算精度の限界
- 累積誤差: 複数回の変換で誤差が蓄積
対策:
- 適切なデータ型: double型を使用して精度を確保
- 誤差許容範囲: 許容できる誤差範囲を設定
- 正規化: 角度を適切な範囲に正規化
5.2 関節制限と特異点
ロボットの実装では、物理的制約を考慮する必要がある:
関節制限:
- 可動範囲: 各関節の最小・最大角度/距離
- 速度制限: 関節の最大角速度/線速度
- トルク制限: モータの最大出力トルク
特異点の問題:
- 定義: ロボットが制御困難になる姿勢
- 例: アームが完全に伸びた状態や、関節が一直線になった状態
- 対策: 冗長自由度の活用、軌道計画での回避
5.3 座標系選択の指針
実装時に適切な座標系を選択するための指針:
直交座標系を選ぶ場合:
- 精密な位置決めが必要
- 繰り返し作業が多い
- 計算の簡素化が重要
極座標系を選ぶ場合:
- 回転中心からの距離制御が重要
- 円形の作業エリア
- コンパクトな設計が要求される
6. 現代のロボット制御技術
6.1 Robot Operating System (ROS)
現代のロボット開発では、ROS(Robot Operating System)が広く使用されている:
6.1.1 ROSの基本概念
ROSは、ロボットソフトウェア開発のためのオープンソースフレームワークである。2007年にスタンフォード大学とWillow Garage社によって開発され、現在はOpen Roboticsが管理している。
ROSの設計思想:
- モジュラー設計: 機能ごとに独立したノード(プログラム)で構成
- 言語非依存: C++、Python、Java、Lispなど複数言語をサポート
- プラットフォーム非依存: Linux、Windows、macOSで動作
- オープンソース: 無料で使用・改変・配布可能
6.1.2 ROSのアーキテクチャ
分散アーキテクチャ:
- ノード(Node): 個別の処理を行うプログラム単位
- マスタ(Master): ノード間の通信を管理する中央制御システム
- パラメータサーバ: 設定値を格納・管理するサーバ
- ROSグラフ: ノード間の接続関係を可視化
通信メカニズム:
- トピック(Topic): 一方向の非同期通信(パブリッシュ/サブスクライブ)
- サービス(Service): 双方向の同期通信(リクエスト/レスポンス)
- アクション(Action): 長時間実行されるタスクの非同期通信
- パラメータ(Parameter): 設定値の動的変更
6.1.3 ROSの主要ライブラリ
座標変換ライブラリ:
- tf2: 座標系間の変換を自動管理
- geometry_msgs: 位置・姿勢・速度などの幾何学メッセージ
- sensor_msgs: センサデータの標準メッセージ形式
軌道計画ライブラリ:
- move_base: ナビゲーション用のパスプランニング
- dwa_local_planner: 動的ウィンドウアプローチによる局所計画
- global_planner: グローバルパスプランニング
センサ処理ライブラリ:
- laser_geometry: レーザースキャナデータの処理
- image_geometry: カメラ画像の幾何学処理
- pcl_ros: ポイントクラウドデータの処理
6.1.4 シミュレーション環境
Gazebo:
- 物理エンジン: ODE、Bullet、DARTによる高精度物理シミュレーション
- センサシミュレーション: カメラ、レーザー、IMUなどの仮想センサ
- 環境モデリング: 3D環境の構築と動的物体の配置
- ROS統合: ROSノードとして動作するシミュレーション
6.1.5 座標系での応用
TF(Transform)システム:
- 座標系ツリー: 親子関係による座標系の階層管理
- 動的変換: リアルタイムでの座標変換計算
- 座標系可視化: RVizによる座標系の視覚化
- 変換チェーン: 複数座標系を経由した変換の自動計算
URDF(Unified Robot Description Format):
- ロボット構造: リンクと関節の階層的記述
- 視覚的表現: 3Dモデルとマテリアルの定義
- 衝突検出: 衝突形状の定義
- 動的特性: 慣性パラメータと物理特性
MoveIt:
- 運動計画: 逆運動学と軌道計画の統合
- 衝突回避: 障害物を考慮した動作計画
- 最適化: エネルギー効率や時間最適化
- 可視化: 計画された軌道の3D表示
6.2 リアルタイム制御
現代のロボット制御では、リアルタイム性が重要である:
6.2.1 リアルタイム制御の基本概念
リアルタイム制御とは、システムが外部からの要求に対して決められた時間内に応答することを保証する制御方式である。ロボット制御では、センサデータの処理からアクチュエータへの指令まで、すべての処理が時間制約内で完了する必要がある。
リアルタイム制御の重要性:
- 安全性: 人間との協働ロボットでは、衝突回避のための即座な応答が必要
- 精度: 制御周期のばらつきが位置精度に直接影響
- 安定性: 制御ループの遅延がシステムの不安定化を引き起こす可能性
- 協調制御: 複数のロボットやシステムとの協調動作
6.2.2 リアルタイム制御の分類
ハードリアルタイム:
- 定義: 時間制約を満たさないとシステム全体が失敗する制御
- 例: 航空機の制御、医療機器、原子力プラント制御
- 要件: ミッションクリティカルな応用での使用
- 保証: 最悪実行時間(WCET)の厳密な保証が必要
ソフトリアルタイム:
- 定義: 時間制約を満たさなくてもシステムの品質が低下する制御
- 例: マルチメディア処理、ネットワーク通信、一般的なロボット制御
- 要件: 統計的な応答時間の保証で十分
- 許容: 偶発的な遅延は許容される
6.2.3 リアルタイム制御の要件
決定論的応答:
- 予測可能性: 処理時間の変動を最小限に抑制
- スケジューリング: 優先度ベースのタスクスケジューリング
- リソース管理: CPU、メモリ、I/Oの効率的な管理
- 干渉回避: 異なるタスク間の相互干渉の防止
制御周期の厳密な遵守:
- 周期制御: 一定間隔での制御ループ実行
- ジッター制御: 周期のばらつきを最小化
- デッドライン管理: 各タスクの実行期限の管理
- オーバーフロー処理: 処理時間超過時の対応
6.2.4 実装技術
RTOS(リアルタイムオペレーティングシステム):
- 代表例: RT-Linux、QNX、VxWorks、FreeRTOS
- 特徴: 優先度ベースのプリエンプティブスケジューリング
- 機能: タスク間通信、同期、タイマー管理
- 適用: 産業用ロボット、自動車制御、航空宇宙
FPGA(Field Programmable Gate Array):
- 並列処理: 複数の処理を同時実行
- 低レイテンシ: ハードウェアレベルでの高速処理
- 決定論的動作: クロック同期による確実な動作
- 適用: 高周波制御、信号処理、画像処理
GPU(Graphics Processing Unit):
- 並列計算: 数千のコアによる並列処理
- CUDA/OpenCL: 汎用計算用のプログラミング環境
- 適用: 深層学習、画像認識、大規模シミュレーション
- 制約: リアルタイム性の保証が困難な場合がある
6.3 人工知能との統合
現代のロボットはAI技術と統合されている:
6.3.1 機械学習の応用
軌道学習:
- 模倣学習: 人間のデモンストレーションから動作パターンを学習
- 強化学習: 試行錯誤を通じて最適な動作を獲得
- 転移学習: 既存の知識を新しいタスクに適用
- 例: ピッキング動作、歩行パターン、操作技能の学習
適応制御:
- パラメータ調整: 環境変化に応じた制御ゲインの自動調整
- モデル同定: システムの動特性をオンラインで推定
- 外乱補償: 未知の外乱に対する適応的補償
- 例: 負荷変動への対応、摩耗による特性変化への適応
予測制御:
- モデル予測制御(MPC): 将来の状態を予測して最適制御を計算
- 最適化: 制約条件下での性能指標の最適化
- 予測ホライズン: 将来の時間範囲での制御計画
- 例: 自動運転、ロボットマニピュレーション、エネルギー管理
6.3.2 深層学習の活用
視覚認識:
- 物体検出: YOLO、R-CNN、SSDによる物体の検出と分類
- 位置推定: 6DOF姿勢推定による物体の位置・姿勢の特定
- セマンティックセグメンテーション: 画像の各ピクセルの意味を理解
- 例: ピッキング対象の識別、障害物の検出、品質検査
動作計画:
- 深層強化学習: DQN、A3C、PPOによる動作の最適化
- 模倣学習: GAIL(Generative Adversarial Imitation Learning)
- 階層的学習: 高レベル計画と低レベル制御の分離
- 例: ゲームAI、ロボット歩行、マニピュレーション技能
異常検知:
- 時系列解析: LSTM、GRUによる時系列データの異常検出
- 異常スコア: 正常パターンからの逸脱度の定量化
- 予測保守: 故障の事前予測による予防保全
- 例: モータ異常の検出、センサ故障の予測、システム状態監視
6.3.3 AI統合の実装例
ROSとAIの統合:
- TensorFlow ROS: TensorFlowモデルのROSノード化
- PyTorch ROS: PyTorchモデルのリアルタイム実行
- OpenCV ROS: 画像処理とAIの統合
- Gazebo AI: シミュレーション環境でのAI学習
エッジAI:
- Jetson Nano: NVIDIAの組み込みAIコンピュータ
- Intel NCS: ニューラルコンピュートスティック
- Google Coral: Edge TPU搭載のAI推論デバイス
- Raspberry Pi AI: 小型ボードでのAI実行
クラウドAI:
- AWS RoboMaker: クラウドベースのロボット開発環境
- Azure IoT: MicrosoftのIoT・AI統合プラットフォーム
- Google Cloud AI: 機械学習サービスのクラウド提供
- 分散学習: 複数ロボットでの協調学習
7. まとめ
本資料では、ロボットの座標系と関節制御について以下の内容を整理した:
- ロボット制御の歴史: 古代のからくり人形から現代のコンピュータ制御への発展
- 関節の種類: 回転関節(R)と直動関節(P)の特徴と表記法
- 座標系の種類: 直交座標系、極座標系、円筒座標系、多関節型、スカラ型
- 座標変換: 数学的変換式とプログラミングでの実装方法
- 自由度: 6自由度の概念とその応用
- 実装時の注意点: 数値誤差、関節制限、特異点への対策
- 現代技術: ROS、リアルタイム制御、AI統合
これらの知識は、ロボットの設計、制御、プログラミングにおいて重要な基礎となる。
8. 参考文献・参考資料
8.1 書籍
- Craig, J.J. "Introduction to Robotics: Mechanics and Control" (4th Edition)
- Siciliano, B. et al. "Robotics: Modelling, Planning and Control"
- Spong, M.W. et al. "Robot Modeling and Control"
8.2 オンラインリソース
- ROS Wiki: https://wiki.ros.org/
- MoveIt Documentation: https://moveit.ros.org/
- Gazebo Simulator: http://gazebosim.org/
8.3 学習目標の確認
この資料を学習した後、以下のことができるようになることを目標とする:
- ロボットの関節タイプを分類できる
- 座標系間の変換を計算できる
- 適切な座標系を選択できる
- ロボットの自由度を理解できる
- 実装時の注意点を考慮できる
- 現代のロボット制御技術を理解できる
コメント