2022年6月7日火曜日

知能ロボコン2022出場ロボット(親機)

親機が完成しました。
子機のクワッドコプターをスタート時保持・運搬するアーム(子機スタート装置)と、位置観測用カメラ、そしてボールを誘導するために展開する壁という3つの機能を備えています。

子機スタート装置


知能ロボコンのルール上、ロボットはスタート時にスタートエリア内かつ45cm角の大きさに入っている必要があるります。そのため子機は親機に格納しておき、そこからスタートします。Realsenseカメラは近すぎる物体は正確に検出できず、また通常のカメラ同様近くでは少しの移動で視野範囲から外れやすくなります。そのためロボット前方にアームを伸ばしてそこから離陸させます。
格納時よりおよそ37cm前方まで子機を移動させることができます。
動力にはKONDOのロボット用サーボKRS-5053HVを使用しています。これは以前二足歩行ロボット用に購入したものからの流用です。リンクの根本に黒い箱が2つ付いていますが、片方がこのサーボ、もう一方はサーボと同じ寸法で作ったベアリング固定用の部材(所謂ダミーサーボ)です。

スタートに最も近いゴールに右側からボールを誘導して転がしてくるという方法を取ります。対象物エリアから続くフィールド外周の壁はスタートエリアで途切れており、またスタートエリアからゴール開口部までの間に10cmほど距離があります。そこでスタートエリア右からゴール開口部に向けて映像のように斜め方向の壁を作ることで、ボールが壁沿いにゴールに誘導されるようにしました。
壁の展開は後から付け足したもので、アーム用のリンクの動力を利用しています。

カメラ雲台

地上からおよそ50cmの高さにカメラを保持します。また、子機の動きを追うため左右に回転します。KONDOのロボット用サーボKRS-5054HVを使用しています。回転角の指令の他、シリアル通信で現在角度を取得できるため、これをもとにカメラの姿勢を取得、床面に固定した座標系におけるロボットの位置を算出しています。モデル化およびキャリブレーション過程など、後日別記事に書こうと思います。
映像は、カメラを意図的に運動させ続けた上で子機の位置が正しく得られていることを確認しているところです。およそ正しい位置を推定してホバリングを行えているのですが、動きの切り替わりなどの際に若干誤差が出ることがあり、それが制御に悪影響を及ぼしています。

ノートPCホルダ


デプスカメラであるRealSenseのデータ取得と処理のため、ロボットにノートPCを搭載します。これにより外部にケーブルで接続された機器がなくなるため、知能ロボコンのルール上「自立型」となります。
ディスプレイを180度に開いたノートPCを上から差し込むような形で着脱します。ロボット側にUSBハブと延長ケーブルが固定されており、USBコネクタ1箇所でノートPCと接続して動作します。


2022年5月8日日曜日

木質ボード

知能ロボコン競技台などの製作にあたり木材・木質材料を使用することが多いです。ロボットの材料としても、強度や耐候性がさほど要求されず、ある程度の大きさが必要な場面では加工性とコストの観点から使いやすいのではないかと思います。ROBO-剣用ロボットでMDFや木材を使ったことがありました。

合板

薄く剥がして作った木板を乾燥後繊維方向が直角になるよう交互に積み重ねて接着したもの。(参考: https://www.nisshin.gr.jp/plywood/)

内部と表面に同じ樹種を使うものを特に共芯(ともしん)合板ということもある。例:シナ共芯合板

MDF板(繊維板)

繊維板とは木材などの植物を繊維化してから接着剤で固めたもの。
JISでは密度によりハードボード(高)、MDF(中)、インシュレーションボード(低)と分類される。

接着剤はメラミン樹脂や尿素樹脂などが使われる。レーザー加工する場合にはそれら由来の熱分解生成物の発生も考慮する必要がある。(但し、普通は換気しながら行うので結果的に対策は同じ)

参考: プラスチック燃焼性と識別(基礎知識)|KDAのプラスチック加工技術


2022年1月30日日曜日

カメラ視野の検討 その1

親機のカメラ設置方法について検討を行いました。1台のRealSense D435だけで競技台上必要な範囲をカバーできるかどうかについて。

視野角(水平方向)について

カタログスペックにはDepth視野が水平方向87度とあります。色画像の視野はもう少し狭く、69度と記されています。
大まかに図のような部分で角度を測ると、58度、78度でした。
赤紫色の線のように更に大きく迂回する場合はほぼ90度程度の範囲をカバーする必要があります。これは行きがけに対象物を動かしてしまうことを避ける必要があるかもしれないという理由で設計した経路です。
実際にはロボットには大きさがあり、また外乱によって位置が変わることもあるのでこれより広い視野が必要です。そのため、固定したカメラでは難しいと予想しました。カメラの下にモーターで制御されるパン軸(水平方向への回転)を付け、位置計測と連想させる方向で検討します。

距離について

遠くなると物体の小ささが問題となります。
Depthの解像度は1280x720とあります。視野角87度であれば、2.4m先では2*2.4*tan(87°/2)=4.56mほどの水平範囲が視野でカバーされます。仮に子機の見える部分の横幅を0.15mとすると、その横幅は視野の0.15/4.56=3.3%、およそ42ピクセル程度となります。(ピンホールカメラモデルとして計算、レンズ歪の影響はないものとする)これは感覚的には十分そうな大きさです。
またもう一つ、位置計測の精度があります。2mで2%以内となっていました。ステレオのため距離によって距離方向の位置の精度も変化すると思われますが、詳細はカタログでは示されていません。
実物での実験として、カメラから2.8mの距離で飛行させてみました。より近いときと同じフィードバックゲインのままでホバリングに成功しました。そのため、誤差と最大距離についてはおそらく大丈夫であろうと考えます。

2022年1月1日土曜日

知能ロボコン2022計画再始動

飛行型ロボットで知能ロボコンに出場したいと考えています。およそ1年前に構想・計画したものでしたが、昨年もコンテストが中止となったためハードデッドラインがなくなり、プロジェクトも事実上一旦凍結していました。




とはいえ、昨年1月ごろに子機ハードウェアは飛行可能なものができ、2月に外部からの制御の実験を始め、その後Maker Faire Kyoto / Tokyo に向けてハードウェア・ソフトウェアの改善を進めたので現状それなりに信頼できる移動機構ができた状態にあります。

2022年6月の知能ロボコン出場に向けて、大まかな計画を再作成します。

  • 1月
    • 親機: カメラ視野確認(カメラに可動軸が必要か?)
    • 親機: 子機との接続部分メカニズム検討
    • 競技台設計・木工加工など発注
    • 競技台設置場所確保(≒作業部屋の片付け)
  • 2月
    • 子機: 競技台上空飛行の実験
    • 親機: ボール誘導部等の展開機構検討
  • 3--4月
    • 親機製作
    • その他
  • 5月
    • Maker Faire Kyoto出展(開催未定)(本年開催されず)
    • 余裕があれば親機にボール分別機構を付ける
  • 6月
    • 知能ロボコン参加

2021年12月19日日曜日

パラレルリンク機構と視覚情報処理を使ったロボット

パラレルリンク機構を使ったテーブルホッケーロボットを作りました。

元々は大きなホワイトボードに字や絵を描くロボットを構想していたのですが、その前段階として要素技術の検証のために小型のものを作りました。要素技術とは、

  • パラレルリンク機構
  • 画像センサーを用いたキャリブレーション
  • ある程度高速な動作
  • ロボット用サーボモーターの速度制御機能を使う
このうちメカと画像センサーの統合までできました。

メカニズム




ABSで滑り軸受を作りました。FDM方式3Dプリンタによる成形です。



根本の2個のモーターで駆動します。KONDOのロボット用サーボモーター5000シリーズを使ってみました。これはラジコン用サーボモーターと違い、出力軸がセレーションではなくIカット形状になっていて、フレームを直接取り付けることができます。


エンドエフェクタ部分はある程度簡単に取り替えられるようにしました。なお、真ん中部分の白い点に見えるのはキャリブレーション時にマーカーを貼り付けるためのソフト粘着剤(商品名: ひっつき虫)です。

電装系


ROBO-剣用ロボットと同じく、PCからKONDO USB DUALアダプターを使用して直接ロボット用サーボモーターにコマンドを送ります。電源は12V ACアダプタまたは10.8(NiMH)または11.1V(LiPo)のバッテリーを使用。

ソフトウェア

カメラキャリブレーション

まずこれがなくては始まりません。
平面パターンを使ってカメラのレンズパラメータと地面平面に対するカメラ位置姿勢の推定を行います。
opencv.jpのサンプルプログラムをもとにしたキャリブレーションツールを自作して使っています。GitHubに、このサンプルプログラムをOpenCV2のAPIで書き換えたものを公開しています。

ロボット用サーボモーターとの通信

KONDOのUSB-DUALアダプターのICSモードを使い、仮想シリアルポートから直接サーボモーターと通信します。このライブラリはGitHubで公開しています。

物体検出

オレンジ色のピンポン玉を使ったので、次のような処理としました。
  1. 歪補正
  2. 処理時間短縮のため画像を1/2に縮小
  3. 色相と彩度で2値化
  4. 連続領域ごとにわけ、輪郭抽出
  5. 周長^2と面積の比が最も真円に近いものを選択
  6. 楕円のあてはめにより中心を求める
動画作成時の環境では0.015秒程度で処理を完了できています。
また、この後地面平面との三角測量により3次元の物理座標を求めています。今回実験ではたまたまほぼ真上から見た映像のため紛らわしいのですが、カメラで得た画像内での座標を直接処理に使っているわけではありません。遠近法の効果が出るような斜め向きにカメラを設置してもプログラムに変更は必要ありません。カメラ位置を変更した際にはカメラキャリブレーションの部分で地面平面の位置と座標軸の原点+方向を与え、この情報を使います。

ハンドアイ較正(hand-eye calibration)

カメラで計測したボールの位置に合わせてアームを動かすには、アームがどのような形状をしているのか、カメラとの相対的な位置関係はどうなっているのかの情報が必要です。事前に計測・推定しておく方法を取りました。
パラレルリンク機構の形状、リンクの繋がり方は予め与えますが、関節間の距離などは自動的に推定するようにします。
  • 根本の固定関節の位置(2×2自由度)
  • 各リンクの長さ(4)
  • エンドエフェクタのリンク内相対位置(2)
  • サーボトリム(2)
以上の12変数を推定する非線形最適化問題となります。トルク0の状態にしたサーボモーターのポテンショメータを使い、複数の点で(2つの関節角度)と(実際のエンドエフェクタ位置)の組を取得します。上記12パラメータを仮に与えれば、関節角度から順運動学計算によりエンドエフェクタ位置が計算できます。この2つの誤差を最小にするような解を求めます。cminpackによるLM法の実装を用いました。
なお、12自由度としていますが、エンドエフェクタの位置を決めるものとしては冗長で複数の解が等価となるため、これらをあてはめた表示は必ずしも実際のロボットの形状と一致しません。



移動予測 


USBカメラからの画像取得について、OpenCVのcv::VideoCpatureを使用して通常のビデオデバイスとしてキャプチャしています。使用環境においてこの方法ではおよそ100ms程度の遅延があることがわかりました。仮に機械の動作が十分速いとしても、認識処理に最低これだけの遅延が発生することになります。転がってくるボールをうまく打ち返せるようにするため、等速直線運動を仮定して未来の位置を予測し、これをもとに動かすようにしました。
白色い丸印が現在(ここでは、今取得できた画像の意味)のボール位置を、黄色い丸印が予測位置を示しています。
移動予測のために、まず直前0.2秒間程度、時間と位置のペアを記憶しておきます(上の画像上で米印で表示)。これらの点に最小二乗法による時間関数の当てはめを行います(x,y,z各座標について独立)。そして関数の外挿(要するに、未来時刻を代入して関数の値を計算)を行い、予測位置とします。※この図では時間方向の情報が入っていないため不親切ですが、この軌道(x-y平面)に対して直線を当てはめているわけではありません。
ここで使用する関数を1次関数とすれば等速直線運動、2次関数とすれば等加速度運動を仮定することになります。平面上を転がるボールの運動で、しかも0.1秒程度の短時間の予測なので、1次関数としました。(なお、こちらは上記のハンドアイ系と異なり、線形の最適化問題なので疑似逆行列の計算1回でできます。)
しかしこれだけでは、ボールが壁で跳ね返ることを反映できません。予測位置が容易にフィールド外になってしまいます。そのためまず、予測位置が範囲外となる場合は予め設定した壁のところでY座標を折り返した位置を予測位置とします。

更に、関数当てはめに使用する過去データが壁での反発の前後両方を含む場合は、そのままでは最小二乗法によるフィッティングができません。これについてはまだ対処を行っておらず、妥当ではない予測値が出ています。但し、この状態は一瞬だけなのですぐ復帰します。

動作アルゴリズム

ボールを打ち返す動作実現のために、最低限単純なルールを設定しました。X軸は前後方向、Y軸は左右方向です。
  • a) ボールが見つかった時
    • 上記の方法により0.1秒後の位置を予測する。できた場合は以降「ボール位置」をそれで置き換える。
    • a1) X座標(手前→奥の軸)が一定値より遠い側であれば、X座標を待機位置、Y座標はボール位置と同じ地点に最速で移動する。
    • a2) 近い側であれば、ボール位置からラケット半径分手前側の位置へ最速で移動する。
  • b) ボールが見つからない時
    • 待機位置にゆっくり移動する
a2になるのは通常a1の直後を想定しています。a1によりボールを追いかけ、a2によりラケットを前へ急激に出して接触することで、ボールを打ち返す動作となります。インパクト時のラケットの速度は制御しておらず、これはまだ誤魔化しているところになります。
次は速度の制御をもう少し緻密にしてみたいと思います。

2021年5月9日日曜日

子機の新規ハードウェア(機械・電子回路)

子機となるクワッドコプターの新しいハードウェアを作成しました。制御ソフトウェアを移植し、旧型子機と同等の機能を一応実現しました。

但し、使用するセンサーの違いにより、IMUによる機体姿勢推定の処理が全く変わることとなりました。旧型ではICで加速度と角速度センサーの両方を使って姿勢を推定する処理までを行っているのに対し、新型ではそれをCPUのファームウェアで行わなければならないためです。現状、一応動いてはいるものの未だ不十分な状態です。

モーターとプロペラは同じものを使い、フレームと電子回路をオリジナル設計しました。また、Telloの純正品や、Tello用としてサードパーティーから販売されているプロペラガードが使えるようにしました。
Tello純正品のプロペラガード
サードパーティー製の球状のガード

コントローラ(制御装置)にはM5ATOM Matrixを使用しました。ATOM MatrixはATOM Liteと比べてマトリクスLEDが付いていることが特徴ですが、それだけでなくIMU用センサーICのMPU6886も搭載されています。無線通信とIMU、4本以上のI/Oポートピンがあるということから、かねてより注目していたものでした。

なおATOM FlyというAtom Liteを使ったキットが既にあったのですが、これは見つけた当時既に売り切れていて、その後入荷する様子もなかったので諦めて自作に至りました。現在では廃番(end of life)となっています。


制御基板はKiCADで設計して基盤製造サービスで製造しました。昇圧DCDCコンバータ、モーター駆動用パワーMOSFET、電池電圧の分圧抵抗、リセットIC等が載っています。


I/Oポートと回路の接続にはM5ATOM裏面のピンソケット(コネクタ)を使用しますが、それだけでは足りなかったので側面のGroveコネクタからも配線を引き出しています。I^2CやUARTではなく、単なるA/D変換入力端子としての使用です。


Makerfabs基板はモーターを保持するフレームを兼ねていましたが、本機では気流を邪魔する形を避けるために基板面積は最低限とし、フレームは別の部品としました。モーター同士の間隔をTelloに合わせて設計し、3Dプリンタで作成しました。全部を一体で成形するのは難しかったため、いくつかに分けて出力した上でABS用接着剤で組み立てました。



バッテリーは新たに600mAh 50Cのものを採用しました。(コネクタは付け替えてあります)


結果的には、40%~50%ぐらいの出力でホバリングできるようになりました。ハードウェア改善としては成功ではないかと思います。
制御ソフトウェアがまだ不完全なため正確な航続時間はまだ計測していませんが、全体を覆うドーム状のプロペラガードをつけた状態において、少なくとも2分半は飛行を続けることができました。
次は制御部分の完成度を上げていきます。

2021年5月2日日曜日

Maker Faire Kyoto 2021 (オンライン)

 Maker Faire Kyoto 2021に出展予定でしたが、現地でのイベントが中止になったためオンラインイベントとなりました。これまでの製作状況をまとめた動画を作成しました。

知能ロボコン2022出場ロボット(親機)

親機が完成しました。 子機のクワッドコプターをスタート時保持・運搬するアーム(子機スタート装置)と、位置観測用カメラ、そしてボールを誘導するために展開する壁という3つの機能を備えています。 子機スタート装置 知能ロボコンのルール上、ロボットはスタート時にスタートエリア内かつ45c...