お久しぶりです。もう11月になってしまいましたね…!
私は高専5年生なのであと4か月で卒研発表が終わり、卒業してしまいます。(専攻科に進学するので学校自体は同じなのですが…)
前回の投稿から1か月以上空いてしまいましたが、この1か月の間に中間発表レジュメと学会発表レジュメと学会発表があり、特に最近2週間は忙しかったです。
3密を避けるために学会も全部オンラインでできるので移動コストが全くかからないのが救いかもしれませんが。今年度だけで4回の学会発表する(うち2回は終了)ので、まだまだキツイですが引き続き頑張りたいと思います。というよりオンラインじゃない学会に行ってみたい。
ここから本題
今回は、人を検出して移動するロボットが仮完成したので紹介します。このロボットはどちらかというと後輩向け教材として作っているのですが、自分の卒業制作(仮)として自分でも参考にするので気づいたところがあれば連載みたいな感じで投稿していこうと思っています。
このロボットには、オムニホイールユニット(自作コントロール基板付き)のほかにJetson TX2とRealsense D435iとバッテリー類、ディスプレイを搭載しています。かなりシンプルな構造です。ただ大きさの割に重いです。JetsonのOSはUbuntu18(Jetpack)で、ros-melodicが動いています。実装したコードはすべてPython2.7です。
主な動きとしては、
- Realsenseで取得した画像から人を1人YOLO v3 (darknet_ros) で見つける。
- YOLO v3が出力するバウンディングボックスの中心座標の深度を調べる。
- 操作量を計算する。
- Wi-Fi経由でESP32にTwistデータを送りESP32がモータを制御する。
となります。移動経路の計算はしていません。
人を検知して接近するロボットはとりあえず完成。
— Ar-Ray (@Ray255Ar) November 3, 2020
実際にプログラム書いて組み立てしたのたぶん4日(6時間x4)くらいしかかかってないから、自分にしてはよくできたほうだと思う。
(そもそもYOLOv3がTX2にとって重いことと、モータ制御が雑なので綺麗には動きません。) pic.twitter.com/IxkEQ0Irzo
人が端にいればちゃんと旋回します。(メカナムの意味はあんまりないかもしれませんが…)
ただツイートの通りあまり動きはよくありません。これは、デフォルトのyolov3.launchがJetson TX2では2.5fps程度しかないことと、モータ制御を雑にしているからだと思います。あと、あまりモータパワーが不足しているような気もします。そもそもJetson TX2やバッテリーをたくさん乗せるものでもないですが。
これから
ロボットをアップデートしたらその都度ブログに書こうと思っています。つまりシリーズ化する予定です。まずは、少し苦戦したESP32のrosserialの環境構築について書こうかなと思っています。