これを作ろうと思ったきっかけは、とても楽しく使わせて頂いていたもくもく会等の勉強会で、
少しでも楽しく過ごせる環境を構築できないか考えたところ、お菓子を配るロボットを作ることが
自分の得意分野とマッチ出来ると思いました。
その発想から作り上げたロボットがこちらになります。
https://protopedia.net/prototype/1684
しかしこのロボットには致命的な欠陥がありました。。。
【欠陥点】
①モータトルクが少なく、すぐにガタガタ音を立てて動かなくなる
②地面がキレイな平坦でないと、メカナムホイールの特徴を活かせず水平移動できない
③ロボット単体で3次元点群情報を処理できない
これらを解消すべく今回のロボットを作りました。
【改善点】
①モータトルクが少なく、すぐにガタガタ音を立てて動かなくなる
→ステッピングモータからDCギアドモータにすることで高トルク、高効率化した。
モータには敢えてエンコーダを付けず、ZED2からの姿勢情報でロボットをコントロールすることにした。
これによってロボットの構成を大幅に簡素化した
②地面がキレイな平坦でないと、メカナムホイールの特徴を活かせず水平移動できない
→サスペンションを取り付けることで地面のギャップを吸収し、4輪全てが地面に接地できるようにした
③ロボット単体で3次元点群情報を処理できない
→メインボードをLattePandaAlphaからJetsonXavierNXに変更したことで、ロボット自身で3次元点群を
処理できるようになった。
これらの結果、上記の動画が出来きました!パチパチ!
これからももっと動作精度を高めるため、細かなパラメータのチューニングをしたり、
新しい動作に向けたプログラムを作成しようと思っています!
この頃オフラインでのもくもく会等の勉強会はメッキリと減っていまいましたが、再開された際にはお菓子を配って回れるロボットを持ち込むことをモチベーションにして作製しました。そしてもし一人で寂しくモクモクしている人にロボットでお菓子を渡してあげたい!そんな心優しいロボットを作りたいというのが自分の思いです!
現在このロボットで出来ることは以下の通りです。
①デプスカメラ(ZED2)によって人物を3次元認識し、掴んでいるお菓子を自動で渡す。
②デプスカメラ(ZED2)と色覚フィルタを用いて物体を3次元認識し物を掴む
③環境地図を作成し自動航行させる
【メカ設計編】 添付図 メカ設計変遷
メカ設計は添付図にある様な変遷を辿りました。
①まずは使いたい部品をざっくばらんに配置して、どんな形状になるか確認
②もう少し詳細の部品も入れ、配置検討する。
③ロボットの筐体となるカバーも取り付けてみたが、ダサ過ぎて廃案にする。自分の才能の無さにうなだれる。
④気を取り直し、メカナムホイール4輪が地面をしっかり設置できる機構を考え、機能美を追求できる形状を考案する
⑤今回のロボットにアームを追加したく、どんな配置が良いか模索する。
⑥ロボットアームの追加案が見えてくる、しかしデプスカメラの位置が低く
視野が限定されてしまうことを恐れた。またカメラの角度を後でも変えたいと思う様になる。
更に試しに買ったサスペンションの反発力が少ない事に気付く
⑦デプスカメラの固定を見直し、よりロボット感が出るように配置。サスペンションも倍の本数を取り付けた。
更にカラーリングも考慮し始める。
⑧サスペンションの固定方法、内部部品配置を確定させる。リアルなCGを作って実際の出来栄えを模索する。
ダサい。正面のグリルがダサい!
⑨正面グリルのデザインを変え、内部にあるJotsonXavierNXやバッテリー、モータドライバの発熱を
考慮した通気口を空けて完成に至る。
【エレキ編】
システム構成の図で表しました。
①JetsonXavierNXをメインボードとする
②ZED2をUSB3.0で接続し3次元点群を取得する。その他にもIMU情報を取得し環境地図作成、
自己位置認識に使用する
③M5AtomLiteをUSB接続し rosserialで通信したデータを使ってロボットアームを動かす。M5系のマイコンでは rosserialでの通信負荷が大きい様で、ROSでの通信量を極力少なくし動作を安定させた
④Teensy4.0をUSB接続し rosserialで通信したデータを使ってメカナムホイールを動かす。今回使った
DCモータドライバは減速時の逆起電力をうまく処理できない様で、ゆっくりとした減速となるよう
PID制御を用いたチューニングで問題解消させた
【ソフト編】
以下の手順の様に基本的なROSパッケージとsteleoLabsが提供しているZEDのROSパッケージを使いつつ、それらをロボットの動きと繋ぎ合わせるプログラムを作成しました。
①ROS navigationパッケージ(https://github.com/ros-planning/navigation)による自動航行を導入
②steleoLabsが提供しているZEDのパッケージ(https://github.com/stereolabs/zed-ros-wrapper)を利用し、 点群描画+3次元人物認識を実施
③ROS jsk_recognitionパッケージ(https://github.com/jsk-ros-pkg/jsk_recognition)を利用し、3次元点群に
色覚フィルタを付け、ZED2から得られた点群に対し、特定の色の点のみを抽出出来るようにした
④①〜③とロボットの動作を繋ぐノードを作成する