ユニット 2 / 9

ロボティクスとモーションコントロールにおける人工知能

利益:

  • AI の助けを借りて、順方向/逆方向の運動学および軌道計画の問題を設定および解決する能力
  • プロンプトのコンテキストとしてロボットの関節制限、速度、加速度の制約を与えることにより、安全な軌道を生成する機能
  • AI によって生成された運動学および軌道出力を数値的および物理的に検証する機能

ロボット アームの端にあるグリッパーを空間内の特定の点に、特定の向きで移動させます。単純そうに聞こえますが、その背後には運動方程式、関節の制限、特異点、軌道計画が存在します。ここでメカトロニクスエンジニアは三角法、線形代数、制御理論を併用します。人工知能は、このプロセスにおいて強力な助けとなります。人工知能は、順運動学の方程式を確立し、逆運動学の解決策を提案し、速度/加速度の制約に従って軌道をパラメータ化することができます。ただし、ロボット工学はメカトロニクスの分野の中で最も物理的なリスクが高い分野の 1 つです。 AIが生成した角度シーケンスが検証されずにロボットに送信されると、アームが自身や環境、またはオペレーターに衝突する可能性があります。この単元では、AI を使用して運動学と軌道計画を設定および検証する方法を見ていきます。

順運動学と逆運動学

順運動学 (FK): 関節角度がわかっている場合、エンドエフェクターの位置と方向を見つけます。解決策は 1 つだけあり、それは直接的なものです。

逆運動学 (IK): 最終関数の望ましい位置がわかっている場合、これを提供する関節角度を見つけます。通常は複数の解 (肘の上げ下げなど) がありますが、解がない場合 (到達不能点) や、無限の解がある場合 (特異点) もあります。

コンセプト

入力

出力

解の数

順運動学

関節角度

極端な位置/方向

独身

逆運動学

極端な位置/方向

関節角度

複数/なし/無限

2 関節平面アームの場合、AI で逆運動学を設定し、次のように手動で検証できます。

import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """2 関節平面アームの IK。角度をラジアンで返します (肘から下の解)。""" r2 = x**2 + y**2 # アクセシビリティ チェック: ポイントはワークスペース内にありますか? if np.sqrt(r2) > (L1 + L2) または np.sqrt(r2) < abs(L1 - L2): raise ValueError("ポイントはアクセス可能な作業領域の外にあります") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) #数値セキュリティ t2 = np.arccos(cos_t2) # 肘を下ろします t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# 検証: L1=L2=1、ターゲット (1,1) -> 期待t2=90 度print(inverse_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

ここでの重要な行は、AI がしばしばスキップする箇所です。到達可能性チェック (ワークスペース内のポイント) と「np.clip」(丸め誤差により arccos 入力が ±1 を超えるのを防ぎます) です。これら 2 つの保護がないと、コードは NaN を生成するか、無効なポイントでクラッシュします。

ヒント: IK 解像度を要求するときは、AI に「アクセシビリティ コントロールを追加し、アークコス入力をクリップに制限する」ように明確に指示します。これら 2 行は、現場で最も頭痛の種となるサイレント エラーを防ぎます。

結合限界、特異点、および複数の解

実際のロボットの各関節には角度範囲 (例: -170° ~ +170°)、速度制限、および加速度制限があります。 IK が数学的に有効な角度を与えたとしても、その角度がジョイントの物理的な範囲外の場合は使用できません。さらに、ロボットは一部の構成で特異点に陥ります。2 つの軸が整列し、1 つの自由度が失われ、先端がわずかに動くだけで関節速度が無限大に達しようとします。

だからこそ、HR ソリューションだけでは十分ではありません。すべてのソリューションは許容フィルターを通過する必要があります。

def solution_gecerli_mi(acilir_deg,limits_deg): """pains: [t1,t2,...]、limits: [(min,max),...]""" 痛みの場合、zip(aciliar_deg,limits_deg) の (amin, amax): そうでない場合 (アミン <= 痛み <= amax): False を返す、f"関節制限を超えました: {pain:.1f} deg ({mine},{amax}) 以外" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0],limits)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0],limits)) # (False, 「共同制限を超えました...」)

AI は IK の「数学的」解決策を与えることができます。ただし、ジョイントの制限と特異点の回避はシステムに固有のものであり、プロンプトのコンテキストとして指定する必要があります。

軌道計画

ロボットを点 A から点 B に移動させることは、2 つの角度の間に直線を引くことではありません。急激な速度変化により機械的衝撃や振動が発生します。代わりに、ソフト プロファイルが使用されます。台形速度プロファイル (一定の加速度 - 一定の速度 - 一定の減速度) または S 字カーブ (より滑らかで、加速度も制限されます)。 AIに軌道を生成させる際には、目標、継続時間、制約を与える必要があります。

import numpy as npdef Trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """単一ジョイントの台形速度プロファイル。位置配列が返されます。""" 距離 = abs(q1 - q0) 方向 = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0.5 * a_max * t_speed**2 if 2 * distance_speed > distance: # 三角プロファイル (v_max に到達不可) t_speed = np.sqrt(距離 / a_max) t_constant = 0.0 v_peak = a_max * t_speed else: t_constant = (距離 - 2 * 距離速度) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... 各 t の位置計算 (加速/定常/減速フェーズに基づく) return t, T, v_peak,duration, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"合計継続時間: {duration:.3f} s、ピーク速度: {vz:.1f} 度/秒")

ここでのロジック チェックは次のとおりです。距離が短い場合、モーターは v_max に到達せず、プロファイルは台形から三角形に変わります。 AI がこの条件を見逃すと、短い動きに対して間違った持続時間が計算されます。これを確認するには、既知の値 (たとえば、非常に短い距離) を使用してコードをテストします。

弱いプロンプト / 強いプロンプト

WEAK:「ロボット アームを A から B に移動する軌道を書き込みます。」(制限なし: 速度制限、加速度、ジョイント間隔、ブラインド出力。)STRONG:「6 軸ロボットのジョイント スペースで 2 点間の軌道を生成します。各ジョイントの速度制限は 90 度/秒、加速度制限は 180 度/秒^2、角度範囲は表に示されています。場合は、台形速度プロファイルを使用します。距離が短い場合、各ジョイントの出力は次のようになります。また、ジョイントの制限を超えていないことを確認する検証関数も作成します: {{table}}"

検証:シミュレーションからロボットまで

AI によって生成された軌道は、ロボットに移動する前に次の順序で検証されます。

  1. 数値: 各ステップの関節角度、速度、加速度は制限内にありますか?
  2. 衝突: 軌道に沿って、アームはそれ自体または環境と衝突しますか (可能であれば視覚化/シミュレーションします)。
  3. 特異点: 軌道は特異点領域を通過しますか (ヤコビアン行列式はゼロに近づきますか)?
  4. 低速ハードウェア テスト: ロボットを低速 (例: 10%) で動作させ、視覚的に監視します。
  5. 段階的な速度増加: すべてが確認されると、速度は公称値まで段階的に増加します。
注意: 新しい軌道でロボットを初めて起動するときは、速度オーバーライドを常に低くし、非常停止を使用できるようにする必要があります。 AI の出力が「数学的に正しい」場合でも、物理セットアップのオフセット、逆軸、またはケーブルの引っかかりは、時間をかけてテストしないと明らかになりません。

ミニケース

オートメーション エンジニアの Ece は、ピック アンド プレイス アプリケーションのジョイント スペースでの軌道コードを AI に要求します。 AI は台形プロファイルを生成しますが、Ece が短距離移動をテストすると、時間がマイナスであることがわかりました。コードは、v_max に到達できない三角形プロファイルのケースを処理していませんでした。 Ece は、プロンプトに「距離が短い場合は、三角形のプロファイルに陥る」と指示してこれを修正します。次に、AI が検証機能を通じて指定したジョイント角度を独自の制限テーブルと照合して実行し、ジョイント 5 がある時点で +125° を必要としていたのに対し、制限は +120° であることがわかりました。彼は軌道を再計画して監視し、今回はロボットを 10% の速度で実行します。最初のラウンドでは、グリッパーがテーブルに近づきすぎていることに気づき、Z オフセットを修正します。 AI は数分で作業概要を返しました。しかし、3 つの個別の検証 (三角形プロファイル、ジョイント制限、低速テスト) では、3 つの個別の実際の問題が見つかりました。

よくある間違い

  • ジョイント制限やアクセシビリティ制御を行わない IK ソリューションの使用。
  • arccos/arcsin エントリはクリッピングされませんが、丸め誤差の場合は NaN が生成されます。
  • 速度/加速度を制限せず、機械的衝撃を与えずに軌道を要求します。
  • 特異点ゾーンを無視してジョイント速度を急上昇させます。
  • 台形三角形のプロファイル遷移を短距離でスキップし、間違った時間を計算しました。
  • 最初の軌道試験を全速力で非常停止アクセスなしで実施。

要約すると

  • 順運動学には 1 つの解決策があります。逆運動学は、複数の、存在しない、または無限の解を生成する可能性があります。
  • IK ソリューションは、ジョイント制限、アクセシビリティ、特異性の観点から必然的にフィルタリングされます。
  • 軌道計画。台形や S カーブなどのソフトなリミット互換プロファイルを使用します。
  • 近距離では、プロファイルは台形から三角形に変化します。これはコード内で処理する必要があります。
  • AI は計算を高速化します。制限と物理的な設置コンテキストがプロンプトに表示されます。
  • 新しい軌道は常に、最初は低い速度比とアクセス可能な非常停止で実行されます。

アプリケーションタスク

2 関節または 3 関節のアーム モデル (実数または虚数のリンク長と関節制限を含む) を選択します。このコンテキストを使用して、AI に逆運動学関数と軌道プランナーを生成させます。次に、(1) 既知のターゲットを使用して IK 出力を手動で検証します (角度を元に戻して FK と同じポイントに戻りますか)、(2) ターゲットを超える少なくとも 1 つのアクセスできないポイントと 1 つのジョイント制限を指定して、コードがそれらをキャプチャすることをテストします、(3) 短距離での軌道時間が妥当であることが判明することを確認します。コードの最初のバージョンで見つかった検証の問題の数と、各問題をどの層が検出したかを書き留めます。