LOG284R2R2R2026/7/14

mechArm 270 Pi を ROS2 + MoveIt に載せる Log#1 | 独自スクリプトから業界標準へ

このシリーズはここまで、mechArm 270 Pi を独自スクリプトで動かしてきた。FK テーブルで姿勢を探し、補正記憶でズレを吸収し、送信前ガードで危険な関節角を止める。よく動いている。ただ、その独自路線には天井がある。

前シリーズの最後の数日は、その天井にぶつかっていた。補正記憶が単方向に暴走して狙いを実在しない座標へ押し出し、姿勢選択が手首を安全域外の角度で拾い、送信前ガードがそれを弾いて実機が止まる。ひとつずつ手で塞いだ。IK も、軌道の安全も、姿勢の選び方も、全部を手作りで再発明していたから起きていた労力だった。

この回は実機を動かした記録ではない。独自路線を続けてきた上で、それを業界標準の ROS2 + MoveIt に載せ替える価値がどこにあるのかを、対話で確かめた記録になる。方向を取り違えて訂正した箇所も、そのまま残す。考えが動いた過程が記録の本体だから。

入り口をどう掘るか、から始まった

話は「NVIDIA Isaac Sim などを扱えると、ロボット企業の業務委託の入り口になるか」という問いから始まった。単独の武器にしたいわけではなく、入り口を掘るための武器として強いのか、という意味合いだ。今のサイトの実績だけではロボット企業の入り口に入れない、という自己認識が前提にある。

— Isaac は入り口として強いのか。

市況を調べると、Isaac Sim / Isaac Lab のフリーランス求人は実在する。ただし要件を見ると、Isaac は単独スキルではなく「機械学習フレームワーク + ROS 2 + Isaac Sim + sim-to-real の実績」の組み合わせで要求されていた。修士・博士や査読論文、実機デプロイ実績を挙げる案件も多い。純粋な Isaac エンジニアとして competing すると、その要件で勝ちづらい。

一方で、求人が繰り返し要求している "bridging sim-to-real deployment" は、iPhone → Unity デジタルツイン → 実機 mechArm で毎日やっていることそのものだ。論文の代わりになる「実世界のロボットに AI を載せた実績」を、失敗も含めて公開している。検証シナリオとして挙がっていた warehouse / hospital は、並行して進めているハコブくんの病院オペレーションと直結する。

もちろん単独での武器に使いたいわけではなくて、ロボット企業の案件や業務委託などを得ていくための入り口として機能するのか。今のサイトの実績だけではロボット企業の入り口に入ることが出来ないので、さらに何か良い手を考えていきたい。

ここで優先順位が入れ替わった。Isaac は「対象企業を広げる第2波」で、入り口を最初に掘る武器としては、別のものの方が効く。

いちばん効く入り口は ROS2 + MoveIt だった

ロボット企業が業務委託を検討するとき見るのは、順に三つある。共通言語で喋れるか(ROS2 / MoveIt / URDF / sim2real)。実機で完結させた実績があるか。他人が再現できる形で示せているか。

二番目と三番目は、このシリーズで既にやっている。足りないのは一番目、共通言語だ。今の mechArm は独自スクリプトで動いていて、企業から見ると「この人はうちのスタックに乗るのか」が分からない。ROS2 + MoveIt で同じ Pick & Place を動かすと、「独自の人」から「うちの言語を話せる人」に変わる。求人要件の "ROS 2" に直接ヒットする。

ROS2 はロボット業界の共通言語で、MoveIt はアーム制御の頭脳の標準部品だ。MoveIt は四つを自動でやる。IK(この位置に手先を持っていくには各関節を何度にすればいいか)。軌道計画(スタートからゴールまでどう動かすか)。衝突回避(ぶつからない経路を選ぶ)。実行制御(計画を実機に送る)。

ここが直接刺さる。今このシリーズで手作りしているものと並べると分かる。

手作りしているもの

MoveIt での位置づけ

FK テーブル(1,659,957 点)で姿勢を探す

IK を手作りしている

j0_lock・族拘束・J4_SAFE・fk_lookup の rank

軌道計画と安全性を手作りしている

「安全な姿勢を選ぶ」問題

衝突回避と IK の標準機能の領域

数ヶ月かけて手作りしている部分が、MoveIt では業界標準の完成部品として存在している。しかもこれは前シリーズの中長期方針で「Force mode と CCD IK は構造的非互換 → 実機は ROS+MoveIt で解決」と、既に本命ルートとして位置づけていた。今の路線の技術的な天井を超える手段として、元々そこに行く計画だった。

ここで一点、立場をはっきりさせておく必要があった。ROS2 は入り口の確度を上げる手であって、入り口が開くことを約束する手ではない。案件が本当に取れるかは市場と縁次第で、そこは保証できる範囲を超える。

過去に一度、動かしていた

ROS2 化は今の Mac と mechArm 環境で成立するのか。ここは推測で語ると事故るので、実機の環境を棚卸しした。

過去のチャットを辿ると、経緯が出てきた。LOG83 以前は ROS2 + ROSKinematicSync で実機を制御していた。一度その環境は動いていた。LOG83 のデータ破損で Unity を巻き戻したとき、復元時点のシーンに ROS2 制御が含まれておらず、そのまま独自路線(CCD IK → FK テーブル)で進んだ。つまり ROS2 を捨てたのではなく、事故で外れて拾い直さないまま今に来た。

Mac は M1。Apple Silicon は arm64 ネイティブで、Pi と同じアーキだから、以前より条件がいい。「Docker で ROS2 を前に試した」という記憶があった。うろ覚えだったので、記憶ではなくログで確かめた。

docker images | grep -i -E "ros|moveit|osrf"
docker ps -a | grep -i ros

結果はこうだった。

osrf/ros:humble-desktop   8daf5355299a       4.81GB         1.07GB   U
f57fd32c1715   osrf/ros:humble-desktop   "/ros_entrypoint.sh …"   6 months ago   Exited (137) 4 months ago             ros2_sim

osrf/ros:humble-desktop は ROS2 humble のデスクトップ版で、rviz を含む GUI 一式が入っている。rviz まで出した記憶が裏取りされた。コンテナ ros2_sim は 6 ヶ月前に作られ 4 ヶ月前に停止しているが、消えずに残っている。Exited (137) は強制終了の痕跡で、コンテナ自体は保持されている。ゼロから作る話ではなく、眠っている環境を起こす話だった。

次にやること

タイトルは mechArm 270 Pi を ROS2 + MoveIt に載せる Log#1 | 独自スクリプトから業界標準へ で確定した。シリーズ名に ROS2 + MoveIt を据え、Log# は #1 に振り直す。フェーズが変わったことをシリーズ名で示し、通し番号で新章の始まりを示す。

この Log#1 は実機を動かした記録ではなく、なぜ独自路線から標準へ移るのかを確かめた記録だ。次は眠っている ros2_sim コンテナを起こし、中に過去のワークスペースが残っているかを確認する。arm64 ネイティブか x86 エミュレーションかも見る。rviz に URDF を表示し、MoveIt で計画して実機に同期させる——そこまで進めば、Log#2 の中身が実体で埋まる。

独自路線で「なぜ動くか」を体で分かった上で標準に載せる。手作りの苦労が、標準の価値を語れる裏付けになる。それが「独自スクリプトから業界標準へ」の意味だ。

※ プロジェクト名「R2R2R」は、UC Berkeley・Toyota Research Instituteの研究「Real2Render2Real」(Yu, Fu et al., 2025)の概念に触発されています。現実空間をデジタルツイン化し、仮想空間での試行から得た知見を実世界のモーター駆動へ還元する——その設計と実装過程を毎日記録しています。技術アプローチおよび目的は独自のものです。