LimeDemo

サンプルアプリケーションでは、Limeの特性を生かすことを目的として、ピック&プレースをとりあげ、基本的なものから順次拡張を試みます。最初に、コーラ缶に限定したプログラムを作ります。そこでは、

  • 地図情報による領域の形状を考慮し、適切な探索場所を自動的に決定します
  • RealSense画像を用いて、コーラ缶を探索します。深層学習による画像処理は用いず、OpenCVを用いて検出、座標計測を行います
  • Nav2による通常のナビゲーションによりコーラ缶に接近した後、ビジュアルフィードバックでコーラ缶の位置を正確に計測しながら、把持位置まで移動します
  • 把持位置でアームを把持位置に移動した後、コーラ缶に正対しながらさらに数センチ程度接近し、把持します
  • コーラ缶を持ち上げて、定位置まで移動し、パレット上に搬送し、プレースします

を実現しています。

〇 前提

Limeサンプルコードは、実機、および、シミュレーションによるLime動作を対象としています。その最初の版がGitHubにある、LimeDemoLimeSimulDemoです。(実機用のLimeDemoは、Lime販売開始後に公開予定)

これは、ある程度の規模のPCを使用します。32GB程度のメモリを持つことがのぞましく、Linux、あるいは、Windows 10,11 OS(Docker Desktop使用)で動作します。LimeSimulDemoは、PC単体で動作します。LimeDemoは、さらに、Lime本体を必要とします。その場合、両者は、WiFiで接続されていることを想定します。

サンプルコードを実行するためには、ある程度のROSの知識が必要です。ここでは、過去にTurtleBot3のシミュレーション等を行ったことがあるものと想定します。

〇 シミュレーション版のインストール

以下では、Windowsを用いてシミュレーションを行う例を示します。まず、WSL、Docker Desktop、Visual Studioをインストールします。Xサーバも別途インストールした方がいいです。VcXsrvを使用します。Xサーバは、

xhost +

コマンド等を用いて、異なるIPアドレスのクライアントからも表示が行えるようにしておいてください。VcXsrvでは、起動ウェザードから行えるようになっています。

まずWSLの端末を開き、環境をととのえます。エディタを用いて、~/.bashrcに以下の行を加えてください。Docker内部からXサーバにアクセスするために必要です。

waddr2() {
        grep /etc/resolv.conf -e nameserver | awk '{print $2}'
}
export DISPLAY=`waddr2`:0.0

次に、作業ディレクトリを作成します。

$ mkdir lime
$ cd lime

Gitを用いて、コードをダウンロードします。

$ git clone https://github.com/momoiorg-repository/LimeSimulDemo.git

dockerのビルドをして、dockerを起動します。

$ cd LimeSimulDemo
$ docker compose build

完了したら、dockerを起動します。X端末が表示されるはずです。

$ docker compose up

以下の作業は、あらたに表示されたX端末から行います。まず、初期ビルドを行います。

# build_moveit
# rrev

内部でmoveid2をビルドするのでかなり時間がかかりますが、1回実行するだけで済みます。

次に、実行環境への、サンプルプログラムの登録を行います。

# cd pytwb
# pytwb
create cm1
Y

これで、シミュレーションを開始する準備が整いました。

〇 シミュレーションの実行

続いて、X端末から、

# run_all

を実行すると、Gazeboによるシミュレーション画面が現れるはずです。初期には何度か失敗する可能性がありますが、繰り返し行っていると成功します。

Gazeboのウェインドウに続いて、Rvizの画面が2つ現れます。一方が、ナビゲーション用、もう一方がアーム制御用です。ナビゲーション用の画面から、初期姿勢を指定します。これで、アプリケーションプログラム実行の準備が整いました。

〇 コーラ缶の配置

Gazebo中に表示されたworldにコーラ缶を配置します。ロボットの定義では、重いコーラ缶は持ち上げられないので、従量設定を変えます。Insetタブのプルダウンからcoke_canを選択して、一旦任意の場所に配置します。これを右クリックで選択して、Edit modeを開きます。再度左ダブルクリックでコーラ缶を選択すると、従量設定Massのフィールドが表示されるので、現在の0.39kgを、0.039kgに変えます。cntl-xで抜けて、保存名をして終了です。

ここで、一旦run_allをcntl-cで終了し、run_allを再実行します。このように定義したコーラ缶を、world内のどこかに配置しておいてください。

〇 サンプルアプリの実行

docker内で、サンプルアプリを実行します。直接実行もできますし、Visual Studioをアタッチして行うことも可能です。プログラムを開発する際には、Visual Studioから行うのが楽です。いずれの場合でも、~/pytwb_ws/src/cm1/__main__.pyをPythonで実行すれば、アプリが起動し、コマンドプロンプト’$’が表示されます。

ここで、actorやBehavior Treeの名前を指定するとそれらが実行されます。たとえば、bt_pickを実行すると、コーラ缶の探索とピッキングの実行が開始されます。このとき、別ウィンドウからrqtを実行すると、ピッキングの状況がよく見えます。

その他のBehavior Treeは、~/pytwb_ws/src/cm1/cm1/treesの下にあります。たとえばbt_pick_placeは、ピック&プレースの全工程を実行します。その要素として、

bt_search, bt_find: コーラ缶の探索
bt_catch: コーラ缶のピッキング
bt_carry: コーラ缶の搬送とプレース

があり、それぞれ独立に実行することができます。

〇 bt_find概要(bt_searchはそのサブセット)

bt_findは、world(環境)中の任意の場所におかれたコーラ缶を探索するプログラムです。実行前にコーラ缶を置いておく必要があります。その状態で、コマンドプロンプトからbt_findを入力すると、ロボットはworld中を動き回ってカメラを用いてコーラ缶を探索します。コーラ缶を発見すると、ピッキング動作が可能な位置まで移動して停止します。

 

 

〇 bt_catch概要

bt_catchは、コーラ缶のピッキングを行うプログラムです。起動時に、視野にコーラ缶があることが前提です。なるべく正面にあることが望ましいです。コマンドプロンプトからbt_catchを入力すると、前進してコーラ缶に近づきます。ある距離まで近づくと、アームを降ろし、接近のモードを変え、速度を落とすとともに、通常のNav2による移動から、カメラを用いたビジュアルフィードバックによる移動モードに移行します。コーラ缶を掴み、持ち上げた状態で停止します。

〇 実機の実行

実機の販売が開始された後、デモの実行方法を公開いたします。