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でお願いします)。
librealsense2 の Radspberry Pi 3へのインストールドキュメントをそのまま実行するとインストールできない。(執筆時点で)以下の点に注意が必要である。
あと私の場合は make -j4 でも大丈夫だった。落ちた場合は、make cleanしてやりなおしになる。3B+よりは早いが時間がむちゃくちゃかかる。
次にT265の動作確認をするのだけど、realsense-viewerが使えない(liteを使ってるのでそもそもXサーバが別途必要になる、あればDISPLAY環境変数を設定すれば動くはず)。なので、pythonのサンプルコード t265_example.py で行う。
上記手順では/usr/bin/python3を使用している。Donkeycar用python3のvirtualenv環境は上記手順の後に作成すれば、再度env環境上でpyrealsense2をインストールしなくても使用可能になる。donkeycar及び関連パッケージとTensorFlowはenv環境下でインストールされるので、deactivateすればインストール前の状態の環境に戻ることができる。
この記事執筆時点ではまだPyPIに登録されていなかった。ので上記手順ではlibrealsenseからソースコードビルドしている。
PyPI登録されているかもしれないので pip3 search pyrealsense2 して確認のこと。
ちなみに4BをUSBハブ経由で動かすと電力不足のメッセージが頻出した。PC直付けにしたらエラーが無くなったので、4Bって結構電源にシビアなのかもしれない..
..これまでRaspberry Pi3B+環境でつかっていたモバイルバッテリが、4B&T265の電力消費に対応できるか..だけど、これは実際に繋いで試してみるしか無いか..
どうも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の電力消費に対応できるか..だけど、これは実際に繋いで試してみるしか無いか..