皆様こんにちは!
最近、ロ技研のブログを書きすぎている21-ibukiです。
今年も9月になりました。9月と言えば「ロボットの秋」、そうキャチロボの季節です。今年もキモいロボット作ったので紹介させてもらいます。

今年もサメサメがやって来た!
去年もブログを書いているし、2025大会でエキシビションに出ていたので我々のことを知っている人も多いかと思いますが、軽く自己紹介。
今回のチームも私(21-ibuki)と友達(?)の21-horieで作りました。ハード、ソフトの分担も概ね同じ感じでやっていましたが、私がロボット制御周りにがっつり手を出したり回路作ったりして、ロボット側の諸々はほとんど私が専属で作っていました。21-horieにはもっと高いレイヤーで変なことを勝手にやっていました。
で、今年もコンセプトは変わらず
「作りたいものを作るし、やりたいことをやる」
といった感じで、ロボコンの醍醐味ともいえる勝負事には無関心な状態でロボットを作っていました。
ちなみに今回は21-horieもやりたいようにやっていたので、申し訳ないとか一切思っていないです。まあ、製作費は、また全額私持ちだけど。
ルール紹介
まずは公式のホームページを見よう(完全他責思考)
今年のワークはチップスターです。2年連続で剛体がワークに選ばれたのでやりやすいといえばやりやすくて助かりました(24年大会は瀬戸しおで、はた目から見ても大変そうだったので)

ロボット外観

Q:”何を食ったらこんなロボット作りたいと思うのでしょうか?“
今年もパラレルリンク好きすぎロボットが完成しました。去年よりもアップグレードされて、z方向の高さを変化させる部分もパラレル構造になりました。とにかく異端児すぎて今年も会場を沸かせていたと思っています(思っているだけ)

z方向はこういう感じの動きをします。展開すると意外と高さあります。
審査員から他のチームのロボットよりも背丈が低くて小さいと言われて、確かにシンプルな構造の割には展開率がデカいのは特徴です。(あんまりメリットに感じたことはなかったけど)
5節リンク
去年と大して変わっているところもないですが、Steadywin のGIM8108-8 は続投です。前回は全然モータのゲインをチューニングしていなかったのでオブジェクトを取るとその重さに耐えられずリンク形状が変化するみたいなことがありましたが、今回はかなりビタビタにゲイン決めてきたので綺麗にリンクが動いています!

いい感じでしょ~ (去年の方がおかしいんだけど……)
去年ぶっ壊れまくっていた肘の部分の部品(通称:肘)は今年は外注でめちゃくちゃ強度の出る部品に仕上げてきました。

↑これは去年のやつ
去年はFFF(いわゆる一般的な積層タイプの3Dプリンタ)で高靭性のASAを使って部品を作っていましたが、どうしても積層型だと部品強度に方位性が出てしまうので肘みたいな複雑な3D形状で強度を出すのは向いていませんでした。なので今年はMJFというめちゃくちゃ強度の出る造形方式を使った3DプリントでPA12というこれまた高靭性な材料を使って中華業者のJLCに外注しました。

結局予備も買わずに本番に突入しましたが、全く壊れる気配もなく、もはやカーボンの方が先に割れるのではと思うくらいには圧倒的な強度がありました。
一個600円くらいなのでFFFの10倍くらいの値段ですが、最強のパワーが手に入ると思えば全然安いですね。
ヨー軸
こちらも去年から続投のロボマスモータです。ドライバの残機1だったのでめちゃくちゃ大切に扱いました。去年と違ってz方向がハチャメチャに動くので傘歯車で動力伝達するようにしてモータは横向きに寝かせました。

(空中配線C610にドキドキ♡)
コンパクトでスッキリ!
z昇降
去年から一番変わったところはこのzの部分です(通称:膝)
くの字型に曲がる部分の膝の部分にQDDモータを入れて動かしています。モータは同じくSteadywin のGIM6010-8 (アリエクで1.7万くらいだったかな)です。何でこれにしたかというと、GIM8108-8とドライバが共通でodrive 互換品が入っていたから開発コストが小さかったからです。普通に扱いやすかったです。聞いた話では他のチームだとRobstride を使っているチームが多かったようですが、48V入力なのがネックだったとか聞きました。こっちのモータは標準で24V入力なのは確かに素晴らしい点です。
上物の重さが3~4kg程度あるのでここのモータの制御はかなり面倒です。本当はトルク制御でゴリゴリにフィードバック掛けたかったのですが、いつものことながら時間がなかったので位置制御でごり押しています。まあ、位置制御にすると制御ループがドライバ側で高速で回るので応答性はいいんですけど、こういう感じで動的にモーメントが変化するシステムには向いていないですよね。

おー!!
これが動いた時の感動はひとしおでした。上の荷重やかかるモーメントに応じて結構ゲインを調整しないといけないので(当然ですが)当日は試合直前までああでもないこうでもないとゲインのチューニングしていました。ファインチューニング失敗すると鬼のような音を出しながら振動するのでテストするときはいつもひやひやしています。
エンドエフェクタ(一部没案)
エンドエフェクタを作るのはいつも楽しいです。なぜって、端点なのであんまり他の機構のことを考えたりトルクとかを考える必要がないからです!
前置きはさておき、今年のワークのチップスターに対してめちゃくちゃ面白い把持の仕方をしています。
傘歯車でチップスターを包み込みながら引き寄せるという言葉で言うと何言ってるのかよくわからない構成になっています。なのでgifを見ましょう。

めっちゃ分かりにくいですが普通に挟み込む形とは違って回り込みながら把持しています。
こういう構造なので把持機構が横に広がらず、左右のチップスターを間違ってはじきにくいという特徴があったり、ワークを抑え込んだ時にワークを押しつぶす方向への変位が小さいことでチップスターをつぶさないが、強力に把持できるといった感じの特徴があります。そういう特徴があってか、大会ではチップスターの端の部分をつかんだ場合でもほぼ確実に把持できていました。
使ってるモータは去年と同じくFeetech STS3215 の7.4Vです。

分かりにくいですが、こんな感じの構造。
上のCAD見てもらうと、大会で動かしているときと違って、なんか差動構造がついていると思います。これが没案になった“完全自作BLDCドライバ内蔵波動減速機搭載差動ヨー軸ピッチ軸制御構造”です(今名前つけた)
去年もエンドエフェクタのヨー軸とピッチ軸の部分が大会では取り外されていたと思いますが、今年はその反省を生かしてい(?)エンドエフェクタの軽量化をしようと、軽いブラシレスモータに自作ドライバをつなげて制御しようと思いました。(なぜそう思ったのかは未だに謎)

ロボット紹介シートの抜粋ですが、こんな感じでBLDCに波動減速機を噛まして、その先に歯車を搭載して、傘歯車側に磁石を搭載して、ドライバ側の磁気エンコーダで絶対角を読み込んでサーボ的な制御をする基板です。もう、言ってることめちゃくちゃすぎて技術オタクにしか伝わらないと思いますが、まあ簡単に言うとキモすぎるくらいにこだわりまくった変態構造ということです。

需要があるか分からないです回路図はこんな感じで、電流フィードバックはなしです。片面実装だとこれ以上部品詰め込めませんでした。(これ多分解像度終わってて何も部品読めないんじゃね)

ちゃんと差動モードで動かせるような段階までは行っていました。
ただ、今年も残念ながらいろいろなコンポーネントが重くて自由度を取っ払って把持機構だけになりました。(去年の反省はどこに行ったんだ⁉)
色々やってみると楽しくなっちゃって、気が付いたら当初の軽量化は何処へと飛んで行ってしまいましたね~。
電装系
去年言いました、「来年は私が作ってみようかな。」ちゃんと有言実行しています。
去年使ってたM5Stack、製品としては悪くないんですけどあまりに汎用化に重きを置きすぎていてロボットを動かすうえで必要ない機能がたくさんあって使い勝手が微妙でした。なので今年はSTM32で基板起こしています。
基本的な機能は全てCANで終わるのですが、ロボマスを動かすヨー軸だけは外部にi2cの磁気センサがついているのでi2cのポートを付けています。で、今年どうしてもやりたかった構成がEtherを使う構成です。今までずっとUSBを使ってロボットを動かしてきましたが、USBはよくも悪くも抜けやすくて動きまくっているロボットにはあんまり適してないタイプのコネクタだと思っています。しかも電源ラインも入っているので電源ノイズでパソコン死ぬかも。(アイソレータ噛ませばマシだが)
なので、RJ45を使ってEtherポート経由でUDP通信する自作回路を作りました。ICはWIZnet のw5500 です。STM32で使うためのexample が公式であったりライブライがあったりとめちゃくちゃ使いやすいので初めての人にはお勧めします。

綺麗にロボットの上に乗りました。これ大会直前に配置場所変えてるんですけどね。
CANの出力ポートにXT30(2+2)を使っています。これ入手性が終わってて国内だとほとんど買えないのでアリエクが頼りです。部品面にRGBのLED2発と半田面に6発ついています。こいつら使えば夢のゲーミング基板を作れちゃいます!

コネクタ類と電解コンデンサは私が手で実装していますがそれ以外はJLCのPCBAで実装してもらっています。PCBA込みで一枚当たり5000円くらいだったのでめちゃくちゃコスパ良かったです。

回路図載せておきますが、5Vの電源ラインに結構ノイズ乗ってIC破壊しまくっていたので参考にするなら5V-GND間に47uF+1uFとかデカめのMLCC入れた方がいいです。(私は後から付けました……)
制御の話
こんにちは21-horieです。
ROS2を使用した上位レイヤーを担当してました。
今年は好きなものを作っていいといわれたので、VRでロボットを操縦してみたいなと思い、それを実現しようとしました。
変な操縦方法を考える
よくあるVRを使用した操縦方法といえばテレオペのような感じで、自分の腕の位置orコントローラの位置から各関節角がわかるので、それを使って、操縦するモノだと思います。しかし、ロボットがどういうものになるのかわからなかったのと、はたから見たときにこいつは何をしてるんだろうと思われたかったので、不思議な方法で操縦しようと考えました。その結果ワークを掴んで、それに応じてロボットが動くというものを考えました。またロボットの動作はステート管理にしており、VRコントローラーの方ではそのステートを変更しているという形になっています。
この写真が実際にVRから見えている景色です。
実際の操作方法は、実物のフィールドを縮小したような仮想的なフィールドを作成して、そこに事前に決まった位置に置かれているチップスターを再現し、それを手で移動させることで、ロボットも同様に、対応したオブジェクトをつかみに行くようにしました。
仮想フィールドは、部屋のどこにどのくらいの大きさで出したいかを4点で囲んで置く形にしました。囲んだ広さと実物の比がそのまま縮尺になるので、ロボットの操縦する実寸は変わらないようにしました。
ブラウザでVRを動かす
VRでの操縦はブラウザ上で行うようにしました。技術スタックとしてはWebXRとThreejsです。これは、Meta公式が出してるWebで動かすためのVRコードのサンプルである https://github.com/meta-quest/webxr-first-steps を参考にしました。
最初はUnityを使って、ROS2 For Unityを使用して完全にMeta Questスタンドアローンで動かしたいなと思っていたのですが、UnityはAIコーディングとの相性がまだかなり悪かったので、やめました。
また、これとROS2をつなぐためにはrosbridgeを使用しました。
ジェスチャーで動かす
コントローラーを置くと勝手にハンドトラッキングに切り替わるので、手だけでも操縦できるようにしました。チップスターを掴むのはそのまま「つまむ」で、アームを動かすのは片手で「親指を立てて人差し指で指す」形にして、指した向きへ動くようにしています。スティックが無いので、指の形そのものを入力にしているという感じです。
両手を使うものも2つあって、両手をパーにすると手のひらが向いている方向へゆっくり動いて、パーにした瞬間にグリッパが開きます。もう1つが両手サムズアップで、こっちは「位置を合わせ終えたので次へ進んでいい」という確定の合図です。傍から見ると人間が虚空に向かって親指を立てているだけでロボットが動き出すので、狙い通り変な絵になったと思います。

ROS2でやったこと
ロボットの動作にはROS2を使いました。メインでやったことは以下の4つほどです。
- DualSenseでの操作を今回のロボット用にボタンを割り振る
- 軌道を作成して、目標位置を常に更新
- マイコンとのUDP通信
- VRとPS5のどちらから来た操作も同じ経路に合流させる
今回は制御というよりは、ステート管理をしたり入力をいい感じに調整したりと、インターフェースとしての使い方がメインでした。
保険にシミュレータも作った
他にもThreejsでシミュレータを作成しました。ロボットの実機ができるのがかなり直前で、一発でVRと実機をうまく連携させられるか不安だったので、一応作ったという感じです。実際これのおかげで、実機との接続以外はある程度早めに作っておくことができました。私は21-ibukiと違って保険をかけたがるので、作っておきました。チキンですいません。
シミュレータの機能としては、ros2のtopicを一覧ですべて見られたり、目標位置をどこに設定できているかを見られたり、実際のフィールドのモデルを持ってきて、ちゃんと目標位置があっているかを確かめたりと、即席の割にはいろいろ確認できて便利でした。
本番
1試合目はVRだと動かない可能性があるからDualSenseで操縦しました。かなりちゃんと動いてびっくりしました。
軌道作成に関して、普通に直線で結んだだけでしたが、今回のロボットがr-Θ型なので、rとΘを独立に線形的に変化させていけば、滑らかな軌道ができたなと思います。まぁ直線で結んだ軌道でもなんかうまく動いたので、よしとしてますが、、、
やりたかったけどできなかったこと
本当はワークをすべて俯瞰できる位置にカメラをつけて、定期的にスキャンして、VRの仮想フィールド上に反映させるということもしたかったのですが、時間が足りず断念しました。
感想
VRを使うとロボットの状態を監視しながら動かせるので、最強のインジケーターになるなと思いました。
今回は実装に関して、アーキテクチャと仕様を私が決めただけで、実際のプログラミング等はすべてClaudeにやらせてみました。
的確に指示したら、エラーなく私の考え通りに実装してくれました。
あと実装を全部Claudeにやらせるにあたって効いたのは、決めたことと決めていないことをリポジトリのドキュメントに分けて書いておくことでした。特に実測していない寸法は「未実測」と明示して勝手に値を決めさせないようにしないと、平気でそれらしい数字を入れてくるので危ないです。
けど、今回のキャチは去年よりも開発段階での楽しさが薄れた気がします。たぶん理由は、どうせ動くとわかってるものを動かしても楽しさが半減するからだと思います。やっぱり、ロボット開発は動くかわからないものが動いた時が一番楽しいんだなと思いました。けど、効率を考えたら、人間がAIに勝つことはほぼないので、きっとAIを使う限りこの楽しさと感動は薄れていくんだなと思った。時代の変化というものか
結果報告
ここでお待ちかねの結果報告です!
なんと、今年は予選一回戦で6点、予選二回戦で4点取りました!衝撃的です。去年は1点取れただけで喜んでいたのに今回は順調に動きすぎてて怖くなりました。
んで、もちろんそんな点数では決勝トーナメントには進めず……。
と思ったら今年もエキシビションに選ばれました。こんな変なロボットが2年連続エキシビションの枠をつぶしてて申し訳ないです。
ただ、今年はエキシビションでちゃんと動いて点を取った上に、21-horieのやりたかったMeta Questでの操作をエキシビションで初めて(は?)実現できて、私もあの場で初めてフルスペックのロボットの動作を見て感動しました。(どんだけ限界開発しているんだよ)

そんなこんなで今年も審査員特別賞をいただきました!
嬉しいけど、常連になってしまってちょっと恥ずかしいなあ。
今年追加でお金をかけたのが8万行かないくらいなので金銭的にはだいぶ助かりました。
お金がなくてもロボット開発できる!いいお手本になっていればいいと思います。
まとめ
今年は去年にも増してこだわりの詰まったロボットを作ってきました。もうキャチロボに心残りはないですし、これ以上大会に出続けると流石に白い目で見られそうなので今年を集大成ということにします。もしかしたらMFTとかに改造版のロボット持っていくかもですが。
この辺の技術資料は整理した段階でgithubのリポジトリをpublicにするので少々お待ちを
>https://github.com/SameSameIndustry
今年も10月の工大祭でロボットの実演をするので大岡山までぜひぜひ見に来てください!他にもいろいろロボット見れて楽しいですよ!

最後に小話
ずっと時間がない、時間がないと言っていましたが今年は本当に時間がなくて、いろいろあって7月8月に修論に追われていたり、自由気ままに2週間海外旅行していたり、学会行ってたりとなぜこんなに予定が詰まっているのにロボットが完成したのか私も疑問に思うくらいです。大会が土曜日曜だったと思いますが、全体がアセンブルされたのが水曜日の深夜(この時点でどうにか動くレベル)で木曜日の夜には夜行バスで京都に向かっていました。21-horieの組んだROSから動かせるようになったのは金曜日でVRで動かし始めたのが土曜日です。
まあ、何が言いたいかというと大体のことはどうにかなるということですね。
おっと、忘れるところでしたが、Anthropic のclaude には絶大な感謝しかありません。ときにロボットを暴走させつつもソフトの開発速度を昨年の10倍以上に引き上げてくれたAIエージェントには頭があがらないです。

それでは、さようなら!
