Translate

ラベル Realsense の投稿を表示しています。 すべての投稿を表示
ラベル Realsense の投稿を表示しています。 すべての投稿を表示

2022年3月16日水曜日

DonkeycarにIntel(R) Realsense T265 を使った経路追跡機能がついたらしい

Donkeycarのバージョンが4.3.6になったので、すごく久しぶりに公式ドキュメントを読んでみた。

 すると

 

というページができていなので、とりあえず勝手に翻訳してみた。

 以下、翻訳した内容である。

参照される方は at your own risk でお願いします。

--------

Intel (R) Realsense T265センサによる経路追跡


Donkeycarは、標準的なカメラを使ってネットワークを学習させながら運転するのではなく、Intel(R) Realsense T265「トラッキングカメラ」を使って経路を追跡することをサポートしています。このアプリケーションでは、手動で一度だけ道を走れば、Donkeycarはその道を「記憶」し、自律的にそれを繰り返すことができます。

Intel T265は、ステレオカメラと内蔵の慣性計測ユニット(IMU)、そして独自のMyriad Xプロセッサを組み合わせて、視覚的慣性オドメトリを行います。これは、移動しながら周囲の光景を見て自分の位置を把握し、それをIMUのセンシングと関連付けることで自分の位置を特定し、GPSセンサと同様にX、Y、Z位置をドンキーに出力するという凝った方法です(ただし理想的にはもっと正確に、センチメートルの精度で出力されることが必要です)。
 

注意

Realsense T265は Nvidia Jetson Nanoでも使用できますが、Raspberry Pi(メモリ4GB以上のRPi 4を推奨)を使用すると、もう少し簡単にセットアップが可能です。

また、Intel Realsense D4XXシリーズは、通常のカメラとしてDonkeycarでも使用できますので(深度センシングデータの利用は近日中)、準備ができ次第その手順も追加します。

ステップ1:Ubuntuマシン上にLibrealsenseをセットアップ


RPi上で最新版のRaspberry OS (Busterでテスト済) を使う場合、こちら の手順でIntelのRealsenseライブラリ(Librealsense)と依存関係を設定します。これらの手順は、別のRealsenseセンサについて述べていますが、T265でも同様に動作します。また、ビデオによる説明 もあります。

ステップ2:Donkeycarのセットアップ

こちらの標準的な手順 に従ってください。経路追跡では、Tensorflowをインストールする必要はありませんが、numpy/upgradeをインストールしてから `pip install -e .[pi]` を実行します。

ステップ3:Donkeycarの経路追跡アプリを作成


donkey createcar --path ~/follow --template path_follow

ステップ4:config 設定の変更/確認


cd ~/follow
sudo nano myconfig.py


デフォルト値のまま同意するか、好みに合わせて調整してください(例:"throttle"や"steering"、PIDなど)。
変更した行をアンコメント(#を削除)します。
nano で cntrl-o を押してファイルを保存し、cntrl-x を押して終了します。

ステップ 5:Donkeycar 経路追跡アプリの実行


以下のコマンドを実行します。

ssh pi@<your pi’s IP address or "raspberrypi.local">
cd ~/follow
python3 manage.py drive


アプリの実行中に表示される出力を見るために、ターミナルを開いておいてください。

T265が見つからないというエラーが表示された場合は、センサを一旦抜き、挿し直して再試行してください。
ゲームパッドがオンになっており接続されていることも確認してください(青いランプがコントローラについています)。

起動したら、ノートパソコンでブラウザーを開き、URLバーに次のように入力します: `http://:8890`

運転すると、Webインターフェースに経路が赤い線で、ロボットの位置が緑の円で描かれます。もし、緑の点は表示されるが、赤い線が表示されない場合は、パスファイルがすでに書き込まれていることを意味します。
`donkey_path.pkl` を削除( `rm donkey_path.pkl` )、再起動すると、赤い線が表示されるはずです。

PS4 ゲームパッドの場合、次のような操作を行います:
 
control action
share toggle auto/manual mode
○ save_path
△ erase_path
× emergency_stop
L1 increase_max_throttle
R1 decrease_max_throttle
options toggle_constant_throttle
□ reset_origin
L2 dec_pid_d
left_stick_horz set_steering
right_stick_vert set_throttle

ステップ6:運転上の注意事項

  • ロボットのスタート地点に印をつけてください。スタートするたびに、必ずそこに戻してください。
  • 車をループ状に走らせます。赤い線が道を示しています。
  • PS3/4コントローラの○を押して、経路を保存します。
  • ロボットをスタート地点に戻します。
  • 次に、PS3コントローラの "select "ボタン、またはPS4コントローラの "share "ボタンを2回押し、パイロットモードにします。これで道なりに走り出します。速くしたり遅くしたりしたい場合は、`myconfig.py` ファイルの次の行を変更します:


THROTTLE_FORWARD_PWM = 400

`myconfig.py` の下の方に、微調整するための設定項目があるので確認してみてください。
PID値、マップオフセット、スケールなどです。
私のリポジトリにある `myconfig.py` をダウンロードして使うことから始めるといいかもしれません。

ヒント:

  • 起動すると、緑の点がボックスの左上隅に表示されます。中央の方がいいかもしれません。その場合は、`myconfig.py` ファイルの `PATH_OFFSET = (0, 0)` を `PATH_OFFSET = (250, 250)` に変更します。
  • 小さなコースの場合、パスが小さすぎてよく見えないということがあるかもしれません。その場合は、`PATH_SCALE = 5.0` を `PATH_SCALE = 10.0` に変更します(必要であれば、それ以上の値でもかまいません)。
  • 自動モードで実行しているときは、緑のドットが青に変わります。
  • デフォルトでは0.3mごとにパスポイントを記録するようになっています。より滑らかにしたい場合は、`myconfig.py` のこの行でより小さな数値に変更することができます: `PATH_MIN_DIST = 0.3`

-------

経路追跡なので、自動運転だけど機械学習ではなくあくまで手動運転したときの座標移動になるようにPID制御するようだ。

機械学習、AIの勉強を目的とした人は、使うことはないかもしれない。

それになによりIntel(R) Realsense T265 の販売価格が全然安くないこと。初売り価格でたしか5万円弱で、執筆時点のネット通販価格が8万円台が一般的のようだ。

Donkeycar本体が3万円くらいでつくれるので、さらに同額以上をカメラデバイスにかけるのか..と考えると、あまりやろうとする人は少ないかもなあ..

 

2020年2月27日木曜日

Raspberry Pi 4B(Raspbean buster lite) へ pyrealsense2 をインストールする

DonkeycarでIntel RealSense T265 トラッキングカメラを使おうと思ったのだけど、ドキュメントにUSB3.0推奨とある記述をみつけだ。

どうもUSB2.0でも動作するのだけど、イメージストリームを使う場合などは3.0のほうが良いのだろう。白黒の800X848イメージ2個を200MHzで送信するくらい2.0でもできそうだとは思うのだけど..

で Donkeycar のベースコンピュータは Raspberry Pi 3B+ を使うのが一般的なのだけど、librealsenseのGitHub Issueに4Bサポートしましたとの記述も発見した。

ただ..4BはRaspbean Liteイメージをstreachではなくbusterを使うように書かれている。ということで、busterでlibrealsenseとpython3ベースのpyrealsense2(librealsenseのpythonラッパ、Donkeycar上のT265用パーツクラスが使用している)をインストールしてみた。

以下、その手順(参照の際はAT YOUR OWN RISKでお願いします)。



  • 最新版のRaspbean Lite buster をSDカードへ書き込む
  • SDカードに対してSSH有効・WiFiを設定し、Raspberry Pi4Bへ刺して起動
  • sudo vi /etc/dphys-swapfile を実行しCONF_SWAPSIZE=2048と書き換え保存
  • sudo /etc/init.d/dphys-swapfile restart swapon -s
  • sudo raspi-config を実行
  • "7.Advanced Options" > "A7 GL Driver" > "Y" > "G2 GL (Fake KMS)" を選択
  • "7.Advanced Options" > "A1 Expand Filesystem"
  • 終了時rebootを選択し、リブート実行
  • sudo apt update && sudo apt upgrade -y
  • sudo apt install -y libdrm-amdgpu1 libdrm-dev libdrm-exynos1 libdrm-freedreno1 libdrm-nouveau2 libdrm-omap1 libdrm-radeon1 libdrm-tegra0 libdrm2 libglu1-mesa libglu1-mesa-dev glusterfs-common libglu1-mesa libglu1-mesa-dev libglui-dev libglui2c2 mesa-utils mesa-utils-extra xorg-dev libgtk-3-dev libusb-1.0-0-dev cmake libprotobuf-dev libtbb-dev build-essential i2c-tools avahi-utils joystick libopenjp2-7-dev libtiff5-dev gfortran libatlas-base-dev libopenblas-dev libhdf5-serial-dev git ntp libilmbase-dev libopenexr-dev libgstreamer1.0-dev libjasper-dev libwebp-dev libatlas-base-dev libavcodec-dev libavformat-dev libswscale-dev libqtgui4 libqt4-test
  • (python3 を使う場合) sudo apt install -y python3 python3-dev python3-opencv python3-pip python3-protobuf python3-opengl python3-virtualenv python3-numpy python3-picamera python3-pandas python3-rpi.gpio
  • sudo -H pip3 install pyopengl
  • sudo -H pip3 install pyopengl_accelerate
  • cd ~/ && mkdir -p projects && cd projects
  • git clone https://github.com/IntelRealSense/librealsense.git
  • cd librealsense
  • sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
  • sudo udevadm control --reload-rules && sudo udevadm trigger
  • sudo reboot
  • vi ~/.bashrc を実行し以下の2行を末尾に追加、保存する
  • export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  • export PYTHONPATH=$PYTHONPATH:/usr/local/lib
  • source ~/.bashrc
  • cd ~/projects/librealsense
  • mkdir build && cd build
  • (python3を使う場合) cmake .. -DBUILD_EXAMPLES=bool:true -DCMAKE_BUILD_TYPE=Release -DFORCE_LIBUVC=bool:true -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=$(which python3)
  • make -j4
  • sudo make install
  • sudo ldconfig


librealsense2 の Radspberry Pi 3へのインストールドキュメントをそのまま実行するとインストールできない。(執筆時点で)以下の点に注意が必要である。

  • busterパッケージリポジトリにはデバッガオプション付きライブラリ(末尾-dbg)がない
  • udevadm trigger は sudo をつけて実行(リブートすれば大丈夫?)
  • cmake、TBB、protobuf、OpenCV はbusterパッケージリポジトリのものを使っても動作する
  • make は時間がかかるので一度にpythonラッパpyrealsense2のインストールまで一気に行う

あと私の場合は make -j4 でも大丈夫だった。落ちた場合は、make cleanしてやりなおしになる。3B+よりは早いが時間がむちゃくちゃかかる。



次にT265の動作確認をするのだけど、realsense-viewerが使えない(liteを使ってるのでそもそもXサーバが別途必要になる、あればDISPLAY環境変数を設定すれば動くはず)。なので、pythonのサンプルコード t265_example.py で行う。


  • lsusb ※接続前の状態を確認(接続後との比較用)
  • dmesg |grep -i usb ※接続前の状態を確認(接続後との比較用)
  • Raspberry Pi 4B の青い USB3.0 コネクタにT265を接続し、電源を接続して起動
  • lsusb
※私の環境の場合、接続後以下のメッセージが追加
Bus 001 Device 003: ID 03e7:21XX Intel Myriad VPU [Movidius Neural Compute Stick]
  • dmesg |grep -i usb
※私の環境の場合、接続後以下のメッセージが追加
[  133.058275] usb 1-1.2: new high-speed USB device number 3 using xhci_hcd
[  133.189229] usb 1-1.2: New USB device found, idVendor=03e7, idProduct=21XXX, bcdDevice= 0.01
[  133.189245] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  133.189258] usb 1-1.2: Product: Movidius MA2X5X
[  133.189271] usb 1-1.2: Manufacturer: Movidius Ltd.
[  133.189283] usb 1-1.2: SerialNumber: 03e72XXX
  • cd ~/projects/librealsense/wrapper/python/example
  • python3 t265_example.py を実行しエラーがないことを確認


上記手順では/usr/bin/python3を使用している。Donkeycar用python3のvirtualenv環境は上記手順の後に作成すれば、再度env環境上でpyrealsense2をインストールしなくても使用可能になる。donkeycar及び関連パッケージとTensorFlowはenv環境下でインストールされるので、deactivateすればインストール前の状態の環境に戻ることができる。


  • cd ~/
  • python3 -m virtualenv -p python3 env --system-site-packages
  • echo "source ~/env/bin/activate" >> ~/.bashrc
  • source ~/.bashrc
  • cd ~/projects
  • git clone https://github.com/autorope/donkeycar
  • cd donkeycar
  • git checkout master
  • git pull
  • pip install -e .[pi]
  • pip install tensorflow==1.14.0
  • sudo shutdown -h now

この記事執筆時点ではまだPyPIに登録されていなかった。ので上記手順ではlibrealsenseからソースコードビルドしている。
PyPI登録されているかもしれないので pip3 search pyrealsense2 して確認のこと。



ちなみに4BをUSBハブ経由で動かすと電力不足のメッセージが頻出した。PC直付けにしたらエラーが無くなったので、4Bって結構電源にシビアなのかもしれない..

..これまでRaspberry Pi3B+環境でつかっていたモバイルバッテリが、4B&T265の電力消費に対応できるか..だけど、これは実際に繋いで試してみるしか無いか..


2020年2月17日月曜日

Jetson Nano 上で RealSense T265 用 Donkeycar パーツを試す

Donekycar (v3.1.1マスタブランチ)コードには
RealSense T265用パーツクラス
(donkeycar.parts.realsense2.pyのRS_T265という名前のクラス)
がすでに用意されている。

realsense2.py は、pythonパッケージ pyrealsense2 を先に導入しておかなくてはならない。

通常のUbuntuなら pip install pyrealsense2 でインストールするのだが、Jetson Nano用のJetpack (v43)アーキテクチャ用whlモジュールがPyPIに登録されていないので、シェアードライブラリ含めてソースコードビルドを選択せざるを得ない。

Donkeycar環境を構築済みのJetson Nanoへ

GitHub: IntelRealSense/librealsense
https://github.com/IntelRealSense/librealsense

上記のリポジトリからソースコードビルドした。
#ビルド方法の概要は前記事のps以下を参照のこと

python -c "import pyrealsense2" を実行してエラーが出なければ、python ラッパパッケージ pyrealsense2 のインストールが成功しているかがわかる。

また、librealsense/wrapper/python/examplesにある t265_example.py を実行(JetsonにUSBケーブル経由でT265をつないで起動し、python t265_example.pyを実行)することで、実際に値が取れているかどうか疎通確認テストができる。

以下のコードは、Veichleフレームワークを使ってRS_T265パーツを動かすサンプルである。

    import donkeycar as dk
    V = dk.vehicle.Vehicle()

    from donkeycar.parts.realsense2 import RS_T265
    rs = RS_T265(image_output=False)
    V.add(rs, outputs=['pos', 'vel', 'acc', 'image_array'], threaded=False)
    class PrintIMU:
        def run(self, pos, vel, acc):
            print('pos:({:.5g}, {:.5g}, {:.5g}) vel:({:.5g}, {:.5g}, {:.5g}) acc:({:.5g}, {:.5g}, {:.5g})'.format(
                pos.x, pos.y, pos.z, vel.x, vel.y, vel.z, acc.x, acc.y, acc.z))
    V.add(PrintIMU(), inputs=['pos', 'vel', 'acc'])

    V.start(rate_hz=20, max_loop_count=20 * 60)


RS_T265 を run すると6軸IMUデータ+位置座標(位置座標(X, Y, Z)、速度(X, Y, Z)、加速度(X, Y, Z))とイメージが取得できる。

ただし、RS_T265クラスのコンストラクタ引数に何も指定しない場合(デフォルトの場合)は、イメージ配列が出力されない(Noneで出力される)。

T265カメラの画像のイメージ配列を取得したい場合は、RS_T265(image_output=True)と指定するとnd.array形式の配列として出力される。

ただし、2つあるカメラの片方(多分..左側かな..)のみでかつnd.array形式のshapeが(800, 848)となる(白黒画像なので2次元配列)。

Donkeycar のカメラの代替として使用する場合は、myconfig.pyのIMAGE_H、IMAGE_W、IMAGE_DEPTHを書き換えるか、イメージ配列を加工して(120, 160, 3)にreshapeするパーツクラスを作成すれば良い。


なお pyrealsense2 パッケージを直接使うと、四元数(qw, qx, qy, qz)が取得できる。
詳細は librealsense/wrapper/python/examples/t265_rpy.py を参照のこと。


RS_T265クラスのコンストラクタのデフォルト引数がイメージを使用しない仕様から、おそらくカメラは既存のデバイスを使って、IMU(MPU6050)がわりにT265を使い、機械学習モデル'imu'で動かすことを想定して作成されたものと推測できる。

それならMPU6050のほうが安上がりだ。位置情報もSLAMを使うにはDonkeycarの機械学習モデル自体の入力層をいじらなくてはならないし..


..やはりROSで使うのが、一般的なのかな..
シェアードライブラリのみ(Pythonラッパなし)や
ROS上で動作する T265モジュール(melodic)も
apt で入れられるし..

2020年2月12日水曜日

Jetson Nano 上で Realsense T265 を動かす


Intel Realsense トラッキングカメラ T265 をJetson Nanoにつないで使いたい。
Donkeycarで使用するには、Pythonライブラリをインストールする前に、シェアードライブラリをインストールシなくてはならない。なのでとりあえずシェアードライブラリとX上で動作する realsense-viewer を動してみた。



1. Jetson Nano のセットアップ


Getting Started With Jetson Nano Development KitをもとにJetpackをセットアップ(詳細略)。


2. librealsense 及びビューアなどのインストール


Jetson Nanoを起動し、ターミナルを開いたら、以下のコマンドを実行する。

sudo apt update && sudo apt upgrade -y
sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u
sudo apt install -y librealsense2-dev librealsense2-utils  librealsense2-dbg

上記の手順でうまく行かない場合は、情報が更新されているかもしれません。

[GitHub] libsense Linux Distribusionに最新情報が掲載されるので、こちらを参照してください

3. ビューアの実行


  1. Jetson Nanoをシャットダウンする
  2. USBケーブルでRealsense T265 を接続する
  3. Jetson Nanoを起動する
  4. Xがあがったら、realsense-viewer を実行する


左やや上にある赤いトグルボタンを押し緑色にすると、画像が表示される
右上の2Dリンクを押すと、左右カメラ画像、位置、速度、加速度情報が表示される

 



右上の3Dリンクを押すと、動かしたカメラの軌跡を緑線で表示される



  • Ctrl+C で終了



ps 2020/02/12 追記

..とまあ、ここまではよかったのだけど..

Jetson Nano でPython ライブラリ pyrealsense2 を使用する場合は、pip install pyrealsense2 ではインストールできない。

このため、librealsenseをソースコードからコンパイルしていかないと駄目だ。

ということで

  1. cd ~/
  2. mkdir projects
  3. git clone https://github.com/IntelRealSense/librealsense.git
  4. cd libreamsense
  5. mkdir build
  6. cd build
  7. cmake ../ -DPYTHON_EXECUTABLE=~/env/bin/python -DBUILD_PYTHON_BINDINGS:bool=true
  8. make -j4
  9. sudo make install
  10. vi ~/.bashrc を実行して export PYTHONPATH=$PYTHONPATH:/usr/local/lib を最終行に追加
  11. source ~/.bashrc

を実行しpython 上で import pyrealsense2 がエラーなく動けばOKである。
注意:PYTHON実行バイナリのパスは環境に合わせて変更すること

Google Colab相当の環境をローカルPC上のDocker Composeで実現する

 Docker Composeの有料版に、お金を払いたくない ^H^Hが使えない ため古いゲーミングPC(GeForce3080)にDocker Composeを入れてその上のコンテナでGoogle Colab相当のノート操作ができないかためしてみた: コンテナイメージとして a...