0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10年後のITとロボット〜UnityでIKを自作する理由

Last updated at Posted at 2025-12-06

産業の未来を探る!国際ロボット展とITエンジニアの関わり

長年IT業界に身を置いていると、クラウドやAIの話題は日常ですが、ロボットやOT (Operational Technology) の世界は、どこか遠い存在に感じられます。しかし、約35年のキャリアの中で、10年ごとに訪れる技術の転換期が、ビジネスモデルや求められる人材を大きく変えてきたのを目の当たりにしてきました。今、目の前で静かに始まっている「フィジカルAI」の波は、私たちITエンジニアにも再び大きな変化をもたらすのではないでしょうか?

数年前にIoTブームが到来した際、電子工作をかじり、回路設計や手製のIoTデバイスでの実験を通じて、フィジカルな世界の面白さに魅了されました。この興味と、将来への危機感も抱きつつ、先日「国際ロボット展」を訪れました。

会場は熱気に包まれ、巨大な産業用ロボットがダイナミックに動く光景は圧巻でした。これは間違いなく巨大なビジネスです。その中で、まだ小さくではありますが、フィジカルAI領域の新しいビジネスも始動しています。

ITエンジニアもこのOTの世界に関わることになるのか?

それとも、OTエンジニアに閉じた世界として進化していくのか?

この疑問への答えを探る第一歩として、まずは「触れてみる」ことから始めたいと思います。

Unityでロボットを動かす!IK (Inverse Kinematics) 自作への挑戦

展示会で見た、産業用ロボットの精密で力強い動きを、自分の手で再現してみたい。手始めに、ゲームエンジンUnityを使って、ロボットシミュレーションに挑戦します。

ここで正直に申しますが、私はロボット工学を専門に学んだことはありません。 完全に自学自習として、ITエンジニアが持つ数学とプログラミングのスキルだけで、フィジカルAIの世界に飛び込んでみます。

シミュレーションでロボットを特定の位置に正確に動かすために必須となるのが、IK (Inverse Kinematics:逆運動学) です。IKは、「手先(エンドエフェクタ)の位置・姿勢」 から、それを実現するための「関節(ジョイント)の角度」を求める手法です。

UnityにはIK機能も存在しますが、今回はロボット特有の幾何学的な構造を理解し、数学的に解くというアプローチを採ることで、より深くフィジカルAIの世界に足を踏み入れたいと考えました。

ロボットの構造解析と余弦定理によるIK設計

数年前にBlenderで作成し、IKアニメーションを付けた産業用ロボットの3Dモデルを、今回はUnity上で動かすための設計図とします。

【YouTube: Blenderで制作したロボットアニメーション】

以下、このロボットの3Dモデルを、Blender上で設計図風に表現したものです。

Bones of the robot.jpg

このロボットの各ジョイント角度を、目標位置 $A$ から求めます。

Bones of the robot (4).jpg

ロボットの回転の決定

(ベースのヨー軸:$\theta_2$)の決定

Bones of the robot (5).jpg

まず、ロボットを鉛直軸の上から見た図で水平方向の回転を考えます。目標位置が $A$ であるため、ここでは図に示されている座標 $A(x, z)$ を目標点として利用します。ロボットの回転の中心を原点 $C$ とした場合、目標点 $A(x, z)$ までの角度は $\theta_1$ を用いて表現されています。この図に基づき、目標点 $A(x, z)$ が既知であるとき、角度 $\theta_1$ は、原点 $C$ から見た $A$ の位置の偏角として、アークタンジェント (Atan2) を使って解くことができます。$$\theta_1 = \operatorname{atan2}(A_z, A_x)$$ここで、$\theta_2$ は、ロボットのベース軸(図中 $C$ を中心とした回転)と、ジョイント $A$ の位置を結ぶ線 $CA$ から、さらにアームのオフセット(図中 $AB$)によって生じる角度 $\theta_3$ を差し引いた角度として定義されています。図中の数式より、まず、線分 $AC$ の長さを求めます。これは三平方の定理より、$$AC = \sqrt{A_x^2 + A_z^2}$$次に、アームのオフセット($AB$ は既知のロボット寸法)を用いて角度 $\theta_3$ を求めます。$$\theta_3 = \arcsin(AB / AC)$$最終的に、ロボットのベースの回転角 $\theta_2$ は、図に示される関係式から求められます。$$\theta_2 = \theta_1 - \theta_3$$

ロボットのアームの角度決定

アームの角度($\theta_4, \theta_7$)

Bones of the robot (6).jpg

次に、ロボットを横から見た鉛直平面での動きを解析します。今回は「ロボットの手(エンドエフェクタ)は常に鉛直方向を向いている」というシンプルな制約を設けました。これは、以前作成した油圧ショベルのBoomやArmと同じ動作であり、余弦定理で解けるという確信につながります。この鉛直平面でのポーズを、図中の極座標として表現します。目標位置 $G(x, y, z)$ が決まると、図中の幾何学的要素である距離 $r$ (ジョイント $F$ と $D$ の間の距離) を算出できます。$$r = \sqrt{BC^2 + GF^2}$$アームの長さ $L_{ED}$ (Boom) と $L_{FE}$ (Arm) が既知の辺として、三辺 $L_{ED}, L_{FE}, r$ で構成される三角形 $FED$ を考えます。この三角形に余弦定理 (The Law of Cosines) を適用し、関節の角度 $\theta_6$ (ジョイント $D$) と $\theta_7$ (ジョイント $E$) を求めます。余弦定理による関節角度の算出ジョイント D の角度 ($\theta_6$) の算出:$$\theta_6 = \operatorname{arccos}\left(\frac{FE^2 - ED^2 - r^2}{- 2 \cdot ED \cdot r}\right)$$ジョイント E の角度 ($\theta_7$) の算出:$$\theta_7 = \operatorname{arccos}\left(\frac{r^2 - FE^2 - ED^2}{- 2 \cdot FE \cdot ED}\right)$$最終的なブーム角度 ($\theta_4$) の算出最後に、水平線とアームの角度を組み合わせることで、ブームの最終的な角度 $\theta_4$ を求めます。水平線と $r$ の間の角度 $\theta_5$ を算出します:$$\theta_5 = \operatorname{atan2}(GF / BC)$$ジョイント $D$ の絶対角度 $\theta_4$ は、$\theta_5$ と $\theta_6$ の合計として算出されます。$$\theta_4 = \theta_5 + \theta_6$$

Unityで動作確認

算出した$\theta_2, \theta_4, \theta_7$の角度値をUnity上のロボットへ適用したところ、ワーク(目標位置 $A$)の位置にロボットの手先がピタッと合致しました。数学的な裏付けをもって、自作のIKでロボットを制御できることが確認できました。

Bones of the robot (7).jpg

次なるステップ:フィジカルAI時代のエンジニアへ

今回の自作IKは、最も基本的な幾何学的IKのアプローチで実現しました。

今後の展開として、より複雑な姿勢制御(手先の角度固定を解除)や、関節の可動域制限を考慮した解析的IK、あるいは計算負荷の高い数値解析的IKなどにも挑戦していく予定です。

フィジカルAIの時代は、ITエンジニアにとって、物理世界との境界を越える絶好の機会です。数学とUnity、そしてロボットの知識を組み合わせ、この新しい波を乗りこなしていきましょう。

次回は、今回解析したIKロジックをUnityのC#スクリプトとして具体的に実装したコードを紹介したいと思います。

そして最終的には、この位置決め技術を基盤として、Gemini Robotics ERを使い、ここで作った位置決めとAIを連動させてみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?