はじめまして、CuGoV1ユーザの橋本です。
今回は、CuGoV1を用いて収穫サポートロボットを製作していきたいと思います。
製作背景・目的
一昨年の冬頃にみかん収穫をお手伝いする機会があり、1週間くらい毎日てぼ(収穫したみかんを入れる籠)を肩にぶら下げながら、みかんを収穫していました。しかしながら、私はもともとヘルニア持ちでこの作業が非常に身体的にしんどかったです。そこで、その作業の負担を軽減するシステムが必要です。今回私は、CuGoV1を用いた収穫サポートロボットを用いることで収穫中の負担を軽減することを試みました。
手法
概要
作業中の腰の負担の原因の一つとして、重たいかごを持ちながら作業していることが挙げられます。なので、今回はその収穫かごをロボットに持ってもらい、常に後ろから追従してもらいます。人は赤色のものを身に着け(今回は赤色のビブスを使用しました)、ロボットはカメラから得られた映像の中から常に赤色のものに追従するようにします。
色追従アルゴリズム
次にロボットが赤色の物体を認識して、どのようにして追従するかについて説明します。ロボットはカメラから得られた映像の中から常に赤色のものに追従するようにします。しかしながら、人は常に動くのではなく、止まっている時間もあるのでその時は、カメラ映像から認識した赤色の物体の大きさに応じてロボットは追従するべきか止まるべきか判断します。具体的には、カメラ映像から赤色の物体を円で近似し、赤色の物体の面積を計算します。この面積は、赤色の物体が遠ざかれば小さくなり、赤色の物体が近ければ大きくなります。そして、ある閾値を設定し、現在の赤色の面積が閾値以上であれば、赤色のものを身に着けた人に近づきすぎているので、ロボットは停止します。一方、閾値以下であれば、人は離れすぎているのでロボットは人に追従します。また、人が曲がるときも赤色の物体がカメラ映像の右部分に映れば、ロボットは右に旋回し、左部分に映れば、左に旋回することで赤色の物体に常に追従します。
製作方法
準備物
今回使用した主な部品を以下の図に示します。

全体構成図
その他の細かい部品については以下の通りです。ナットやL字金具、ねじなどはご自分の用意したパーツに合わせてご準備ください。また、直接ラズパイやモータドライバをロボットに乗せるわけにはいかないので、今回は3Dプリンタを使ってケースを自作しました。バッテリーのスイッチ部分も自作です。
- アルミフレーム 20×20, 15×15
- モータ用バッテリーのスイッチ
- ジャンパーワイヤ(ラズパイとモータドライバ、モータとモータドライバを繋ぐのに必要です)
- L字金具
- Tナット
製作手順
- Raspberry Pi 4にUbuntu18.04とROS(Melodic)をインストールする
まずは以下のURLからUbuntu18.04をインストールする。
https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#5-install-a-desktop
次にラズパイをディスプレイに繋ぎ、Ubuntuを起動します。そしてUbuntuにROS(Robot Operation System)をインストールする。ROSは、ソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しています。詳しい内容については以下のURLを参照下さい。ROSを今まで触ったことがない方は、まずは下記サイトのチュートリアルの初級までを行うことを推奨します。
http://wiki.ros.org/ja - Githubからソースコードをダウンロードし、ビルドする
以下のコマンドをターミナルから実行してください。
cd ~/catkin_ws/src
git clone https://github.com/ShunjiHashimoto/cugo
簡単にそれぞれのコードの役割を説明します。Cubaseは、その名の通りCubase(現在はCuGo V1にあたる)を動かすためのソースコードで、PWM制御を使ってモータを動かします。もう一つのコードは、色検出アルゴリズムを実装したソースコードです。前述したアルゴリズムの通り、カメラ映像から赤色の物体を検出し、ロボットを赤色に追従させるためのコードです。これらのソースコードをダウンロード出来たら、ターミナルを立ち上げなおし、以下のコマンドを使ってビルドします。ビルドした際、エラーが生じることがありますが、基本必要なパッケージが足りていないことが多いので、エラーメッセージから必要なパッケージを調べ、ダウンロードしてください。
cd ~/catkin_ws && catkin_make
また、最後にラズパイをディスプレイに接続せずSSH設定することで、遠隔でラズパイを動作させる設定を行います。なので、いちいちラズパイをディスプレイに繋いでファイルを書き換えたり、コマンドを実行したりするのでなく、ほかのPCからラズパイにログインし、遠隔でラズパイを動かすことが出来ます。詳しいsshの設定方法は、ネット上に多くあるので今回は省略します。 - 配線チェック
ビルドが通れば、一度ラズパイをshutdownして、配線を行います。ラズパイとモータドライバの配線図と全体の配線図は以下の通りです。
ラズパイとモータドライバの配線図
全体の配線図
配線が終われば、一度正常に動作するか確認します。モータドライバに下図のようにスイッチが4個ついています。これは各モータの正転・逆転スイッチになっており、これを押すことで、モータが正常に回転するのか確認できます。
また実際にロボットを動作させるために、今回は、主にミスミのアルミフレームを使い、実際のみかんの収穫かごに合わせてロボットを組み立てました。
- 実行
上記の配線が終了し、ハードウェアも完成すれば、実際にロボットを動かしていきます。ラズパイにSSH接続し、以下のコマンドを実行します。
roslaunch cubase cubase.launch
roslaunch
とは、ノードを一斉に立ち上げることができるコマンドで、PWM制御を行うノード、カメラを起動するノード、画像処理するノードを一斉に立ち上げます。無事実行することができれば、成功です。あとは、ゲームパッドの下図のボタンを押すことでモード切替を行います。
結果
以下の動画のように赤色のビブスを来た人に常に追従することが出来ました。※動画は3倍速です
また、実際の作業を模したデモの様子は本記事の冒頭に記載しています。
課題と今後の予定
一方で、課題もいくつかあります。例えば、ロボットは常に赤色に追従するのですが、逆光になったとき、赤色が認識することができず、正常に動作することが出来ません。なので、色だけに頼るのでなく、人間をロボットに学習させ、特定の人間に常に追従させる”人認識”の機能を実装することで追従精度が向上するのではないかと考えています。また、坂道などではCuGo V1では力不足になる可能性があるので、クローラ部分をCuGo V3に取り換えることで、幅広い環境でこのロボットを使用できると考えています。