工場長のブログ

日々思ったことを書いてます。

MyCobot280のサーボ交換 - STS3215 ID 書き換えを添えて

この記事は一見、IoTやSORACOMについての記事に見えますが、それは背景の説明であって、実際にお伝えしたいのは(残しておきたいのは)MyCobotのサーボの交換にまつわる困りごとやノウハウです。

MyCobotが骨折した(サーボが壊れた)

SORACOM DiscoveryのIoT プロトタイピングコーナーに「おっし、おれなりのPhysical AI像を出すぞ」ってことで「目(ソラカメ)と手(MyCobot280)を用意するから難しいことは全部AIに任せたピックアップチャレンジ!」的なノリで以下のようなものを作ってました。AIで駆動するEye-to-Hand的な構成ですね。Fable5がいればなんとかなるっしょ。って思ってました。

そんなに簡単じゃなかった

やってみると実際にはすごーく難しくてAIと以下のようなやりとりのスパイラルを繰り広げることとなりました。

  • AI:Intel RealSense入れようよ。
  • オレ:いやーそれ目新しさないじゃん。あと、専用機器を使うようなアプローチはしたくない。
  • AI:ティーチングやろう。
  • オレ:わかるけど、それ汎用性ないじゃん。デモでは「ほら、ここに好きなものをおいてAIに◯◯を拾ってって言ってみてください」ってやりたいんだよ。
  • オレ:外部カメラ1個だと2次元的(3次元的?)な位置特定が難しいなら画角を変えたソラカメ増やそうよ。
  • AI:いやーそれあんま意味ないと思う。

Depth Camera(Realsense)もティーチングもロボット業界ではめちゃくちゃデファクトスタンダードな手法。議論を進めていくと自然とやっぱりそれらをRevisitすることになったのはとても興味深かったです。

実装もAIに目と手を渡して行った

開発スタイルとしてはClaude CodeにラズパイへのSSH鍵を渡して、手元のPC上でコードを書いてラズパイにデプロイして動かす。それをソラカメで撮影させて(それもMCP経由で自分でやらせた)評価する、みたいな感じでAI自身で完全にループを回せるようにしてました。すごく楽しかったし、とても未来感を感じてました。「ロボットアームがどうしても真下に向かない、アームのサーボのテレメトリ的には真下を向いてるはずなのに」みたいなときはアームの先にBLEの加速度センサー付けて「これ、こんな型番のセンサー付けたから自分でラズパイにドライバインストールしてキャリブレーションに使ってね」っていったらほんとに望み通りの姿勢制御ができるようになったりしました。

ひとりでどんどん賢くなっていくロボットに「あれ?これスカイネットが生まれるんじゃね?」みたいな感想を持ったりもしました。

なお、当時はちょうどClaude CodeのAutoモードが出てきていたタイミングでした。世間に疎いわたしは「あーなんか最近のClaudeくん、なんかいちいち確認しに来なくなって便利だなー」くらいにしか感じていなかったw 

 

期日とにらめっこしながら仕事の隙間を縫いつつちまちま開発と改善、そして妥協を続けていく中でなんとか動くものができてきたので、あとはチューニング?キャリブレーション?でデモの精度とUXのよさをあげていこう。と思ってわたしはAIにこういいました。

「わたしは寝るからとりあえず朝までキャリブレーションを繰り返しておいて」

すごくウキウキしながら寝ました。デモもあとは性能を挙げていけばいい段階になったわけだし、それも(自分よりイケてる)AIがやってくれるわけだし。

 

でも朝起きてわたしが目撃したのは必死に立ち上がろうとする生まれたての子鹿のようなMyCobotくんでした。

 

そうなんです。

AIにこき使われすぎたMyCobotくん、骨折していました(サーボが故障していました)。

立ち上がろうとして崩れ落ちるのを繰り返すその姿は、まじで、生まれたての子鹿!!!!!!

ということで、MyCobotのサーボを交換することにしました。正直、サーボ以外の可能性もいろいろ考えたし調査もしてみましたが「まあ、やってみよう」ということで。

 

ということでここまではおまけです。

MyCobotのサーボはSTS3215。ネットで買って交換した。

2箇所くらい筐体を開けてみると、関節ごとにFeetechのSTS3215というサーボがマウントされていました。ベースにはM5Stackと専用のインターフェイスボードがあり、そこから6個のサーボがデイジーチェーンされている構成です。

にわかなわたしは全然肌感がありませんでしたが、流通している部品だということでAmazonで調達しました。1個3500円くらい。

ちなみに、サーボホーン(サーボと筐体をつなぐ部品。写真の円形のやつ)のネジ穴が、経緯はわかりませんがいま売っているSTS3215のサーボホーンがM3なのに対して、筐体(と、旧部材)のネジ穴がM2です。いろいろググって見ましたがSTS3215用のM2のサーボホーンは市場から調達できなさそうなので、MyCobotの筐体側のネジ穴を精密ドリルでM2からM3に拡張しました。ここはもしかしたら専用部品だったのかもしれません。

ネジ穴を拡張した筐体側の写真は撮り忘れた(そしていまから筐体を開けて取り直すの面倒)のですが、完全に1 way doorな作業なので慎重にやりました。2.5mmまで拡張して試して、2.8mmまで拡張して・・・というような具合に。筐体の強度が落ちたり、なんならその作業の結果クラックが発生したりするのを防ぎたかったので。

余談: 筐体をすこし補修した

これは余談ですが今回の作業で筐体をひととおりチェックしてみると、今回サーボの交換作業をしているJ2の関節周りのフレームに細かいクラックがちょいちょい見つかりました。構造的に、そこから先の重さをすべて支える関節であること、そしてMyCobotがいわゆるモノコックフレーム構造であることから筐体にもだいぶ負荷がかかっていたのだと思われます。どのくらい意味があるかはわかりませんが念の為パテ埋めしておきました。(ヤスリはかけてませんw

あれ?サーボが2つ同時に動く?

OKめでたし。これでいける。と思ってましたが、甘かったです。MyCobotのキャリブレーションを走らせてみると(交換したのはJ2、2番目のサーボ)、J1とJ2が同時に動くのです。

いろいろ動かしてみてはたと思い至ったのがJ1とJ2、同じ命令を受け取ってないか?

ということでした。MyCobotについての内部情報はあまり見つからなかったものの、LeRobot SO-101など同様のロボットの構成を調べてみると、サーボがデイジーチェーン構成になっていて根元側から6個の関節(サーボ)にそれぞれIDを1~6を割り振っているであろうと、想像的に判断されました。

ということでSTS3215のサーボIDを書き換えてみた

いろいろ調べてみるとサーボのデイジーチェーン構成はわりとよくあるプラクティスであって、ブロードキャストされるコマンドを受け取るのはIDベースでの判断になるということがわかりました。

ここから先はサーボIDの書き換えにはメーカーであるFeetechが提供している専用のソフトウェアを使って書き換えます。

↑は前述のプログラミング環境のスクショ。ID(サーボID)を出荷時のデフォルト値の1から任意の値(今回はJ2、第2関節なので2)に書き換えます。

 

もろもろのマニュアルや1st party情報は下記にあります。
https://akizukidenshi.com/goodsaffix/feetech_digital_servo_20220729.pdf

 

なお、インターフェイスボードのFE-URT-1は、いろんな面倒を自前で引き受けられるなら(例えば供給電力や物理インターフェイスなど)不要ですがわたしはそれに係る時間的なコストをはらいたくなかったので当該ボードを買って無事にIDを書き換え、結果としてMyCobotの復活となりました。

なお、STS3215のID書き換えと動作確認には6V 2A(定格)の電源供給が必要です。わたしの家は一般のご家庭なので安定化電源がありましたが、これがないとまた面倒です。

MyCobotのサーボ交換まとめ

と、余計なことしか書いて来ませんでしたが、TLDR的には、MyCobotのサーボを交換するには以下のようになります。

STS3215を買って、アームの関節IDにあわせてサーボのIDを書き換えて設置すればOK。ただし、ホーンのネジ径の物理調整の必要があり。

ここからまたオフトピックです

なぜサーボが壊れたのか考えてみる

「そりゃ、ひとばん動かし続ければ壊れるだろ」と言われればそうです。が、物理世界のエンジニアリングの経験がほぼゼロのわたしにはその肌感やサーボの動作原理についての知識がなくAIを使って数時間、負荷をかけ続けた結果こうなったというわけです。

ソフトウェアのループは実質タダみたいなものですが、物理世界のループやデューティサイクルという有限資源を消費していく。AIは疲れないけど部品は疲労する。

当たり前の話ではありますがそれを実感した経験談でした。

なにか続きを書こうと思ってます

SORACOM Discoveryへの出展は断念しましたが、せっかく直したのでこどもの夏休みの自由研究のテーマとして「AIでロボットを動かしてみる。プログラミングしてみる。」というハンズオンコンテンツに昇華をさせているところです。できあがったらまた書きます。

あと、AIを使ったPhysical開発みたいな話ももう少し掘り下げて書いてみたいなと。