USB-C Ethernetアダプタ1本でmechArm 270が自律動作した日|Pythonスクリプト制御
USB-C Ethernetアダプタが届いた。たった1本のケーブルが、セットアップの複雑さを根本から変えた。
💡 Key Takeaway
有線Ethernetによる永続的なSSH接続を確立し、r2r2r_loop.py のSSH自動実行を実装した。mechArmの電源とケーブル1本だけで、以降のすべての操作がMacのターミナルから完結する。
発生した問題 | 現場判断 | 結果 |
|---|---|---|
再起動後にeth0がDOWNになる | rc.localの | 永続化完了・再起動後も192.168.2.1で有線接続確認 |
r2r2r_loop.pyに10.42.0.1が見つからない | grepで全スクリプトを検索、SSH実行自体が未実装と判明 | paramikoによるSSH自動実行・SFTP転送を新規実装 |
r2r2r-scriptsがgit管理外だった | git initから実行し個別ファイルをadd | [LOG131] SSH自動実行実装としてcommit完了 |
ロボットの「次」を考えた
実機作業の前に、今後の設計を整理した。テーマはUnityシミュレーションとリアル実機のデータ共通化だ。
2つの世界をつなぐ橋は今のところ「関節角度(6軸)」だけだ。UnityがCSVで生成した角度列を send_angles() で流し込む——この構造はLOG97から変わっていない。次のフェーズに向けて、何が共通化できていて、何がまだ断絶しているかを整理した。
Unityにあってリアルにないもの:配置誤差(place_err)、関節遅れ(j_lag)、エンドエフェクタの3D座標。リアルにあってUnityにないもの:グリッパーの実際の把持状態、カメラROI輝度、物理的なズレ(摩擦・ケーブル抵抗・サーボ個体差)。2つの「成功」の定義がまだ別物として動いている。これをどこかで翻訳する必要がある。
ROS2の位置付けも改めて確認した。「ロボットの制御ソフト」というイメージがあったが、実態は「複数のプロセスをつなぐ通信インフラ」だ。今のR2R2Rは「順番にやる」設計で成立しているため、ROS2が本当に必要になるのは「同時に複数のことが起きる」場面——動いているものを追跡しながら掴む、力を感じながら止まる、2台のアームが協調する——そういったケースが出てきてからの話だ。今はまだそこではない。
2台連携の話も出た。ペイロードの問題を2台のリレーで解決するというアイデアはロボティクスとして正しい発想だが、今は1台のループを完全に証明することが先だ。「頭の片隅に置く」段階として整理した。
USB-C Ethernetケーブルが届いた
Amazon発注済みだったUSB-C Ethernetアダプタが届いた。
Mac側で確認すると en8 として認識されていたが、IPは 169.254.83.6——DHCPで正式なIPが取れなかった時の自動割当だ。PiのEthernet側にIPが設定されていないため繋がらない状態だった。
WiFi経由でPiに入り、eth0に静的IPを設定した。Mac側にも対応するIPを設定し、有線SSHを試みた。
ssh ubuntu@192.168.2.1 -i ~/.ssh/id_rsa_pi繋がった。ログイン画面に IP address for eth0: 192.168.2.1 と表示されている。
永続化との格闘
再起動後に設定が消えないよう永続化を試みたが、ここで予想外の壁に当たった。
netplanに設定を書いて sudo netplan apply しても、再起動後にeth0が DOWN のまま。原因を追うと、/etc/rc.local の先頭行が #!/bin/sh -e になっていた。-e は「エラーが出たら即終了」の指定だ。
このPiのrc.localには sudo ip link set can0 up という行がある。can0デバイスは存在しないためこの行でエラーになり、その後に書いた ip link set eth0 up に届かずスクリプトが終了していた。
#!/bin/sh -e を #!/bin/sh に変更——たった2文字の削除で解決した。
IP address for eth0: 192.168.2.1 ← 有線Ethernet(永続)
IP address for wlan0: 10.42.0.1 ← WiFi(継続)SSH自動実行の実装
有線接続が確立したので、r2r2r_loop.py のSSH自動実行を実装した。これまでは「ブロックをPICK位置に置いてください」と表示して手動入力待ちになっていた箇所を、paramikoによる自動実行に置き換えた。
SSH_HOST = "192.168.2.1"
SSH_USER = "ubuntu"
SSH_KEY_PATH = os.path.expanduser("~/.ssh/id_rsa_pi")
REMOTE_SCRIPT = "~/pick_and_place_fixed.py"実装した処理は3段階だ。SFTPで pick_and_place_fixed.py をPiに転送、SSH経由で python3 ~/pick_and_place_fixed.py を実行、終了コードを取得してsuccess/failを判定——既存のログ機能・fail_step入力・CSV記録はそのまま維持した。
[main e6e9075] [DAY131] SSH自動実行実装 有線Ethernet経由 192.168.2.1
1 file changed, 220 insertions(+)モニター・キーボード・マウスが不要になった
この日の変化を一言で言うと、セットアップの複雑さが消えた。
以前の手順:WiFiホットスポットを確認 → SSH接続 → 場合によってはモニター・キーボード・マウスが必要。
今後の手順:mechArmの電源を入れる → Ethernetケーブルを繋ぐ → ssh ubuntu@192.168.2.1 -i ~/.ssh/id_rsa_pi
それだけだ。モニター・有線キーボード・マウスはすべて不要になった。セットアップが簡単になるということは、ループを回す回数が増えるということだ。
ケーブル1本が、ロボットとの距離を縮めた。
