Translate

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

2020年2月17日月曜日

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

Donekycar (v3.1.1マスタブランチ)コードには
RealSense T265用パーツクラス
donkeycar.parts.realsense2.pyRS_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_T265run すると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.pyIMAGE_HIMAGE_WIMAGE_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実行バイナリのパスは環境に合わせて変更すること

Donkeycar をJetson Nanoへインストール中 pip install -e .[nano] したら、AttributeErrorが出た件

Donkeycar の公式ドキュメント通りJetson Nano上へDonkeycarをインストールしていたら、python donkeycar パッケージの pip install 中に以下のような Attribute Errorが発生した。


(env) hogehoge@fugafuga: ~/projects/donkeycar$ pip install -e .[nano]
Obtaining file:///home/hogehoge/projects/donkeycar
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from donkeycar==3.1.1) (1.13.3)
Requirement already satisfied: pillow in /usr/lib/python3/dist-packages (from donkeycar==3.1.1) (5.1.0)
Collecting docopt
  Using cached docopt-0.6.2.tar.gz (25 kB)
Collecting tornado
  Using cached tornado-6.0.3.tar.gz (482 kB)
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from donkeycar==3.1.1) (2.18.4)
Collecting h5py
  Using cached h5py-2.10.0.tar.gz (301 kB)
Collecting moviepy
  Using cached moviepy-1.0.1.tar.gz (373 kB)
Collecting pandas
  Using cached pandas-1.0.1.tar.gz (4.9 MB)
  Installing build dependencies ... done
Getting requirements to build wheel ... error
ERROR: Command errored out with exit status 1:
   command: /home/hogehoge/env/bin/python /home/hori/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpf4z2oxsg
       cwd: /tmp/pip-install-ycyri24h/pandas
  Complete output (10 lines):
  Traceback (most recent call last):
    File "/home/hogehoge/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 257, in
      main()
    File "/home/hogehoge/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 240, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/home/hogehoge/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 85, in get_requires_for_build_wheel
      backend = _build_backend()
    File "/home/hogehoge/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 76, in _build_backend
      obj = getattr(obj, path_part)
  AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'
  ----------------------------------------
ERROR: Command errored out with exit status 1: /home/hogehoge/env/bin/python /home/hogehoge/env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpf4z2oxsg Check the logs for full command output.
(env) hogehoge@fugafuga: ~/projects/donkeycar$

上記のpip install は何度もやり直しているので、すでにインストールしたパッケージはダウンロードゲージが出ていない。

調べると setuptools の Issue#1694 https://github.com/pypa/setuptools/issues/1694 に情報が乗っていた。

ああ、pip install する際に、 --no-use-pep517 をつければいいんだ..

とおもい、つけて実行してみると..

cannot cytonize without Cython installed.

..今度は Cythonパッケージ無しで cythonizeしようとしているとかいうエラーが出た..

しょうがないので

pip install cython を実行し、pip install -e .[nano] --no-use-pep517 を実行したら..


うまくいった。


----
cythonってpythonモジュールをCで開発したモジュール並みの速度で実行できるやーつだったっけ..




とりあえず、先に進んでみるか..

2020年1月9日木曜日

Jetson Nano へ Donkeycar アプリケーションをインストール方法のメモ(2019/01/09時点)

■必要なもの

  • Jetson Nano Developent Kit(Jetson開発ボード)+USBケーブル
  • 5V2A以上を出力するUSB ACアダプタ
  • インターネット接続可能なAterm MR05LN+USBケーブル
  • HDMIモニタ+HDMIケーブル
  • USB日本語キーボード
  • USBマウス
  • SDカード

■セットアップ手順

  • https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write にある「Jetson Nano Development Kit SD Card Image」のリンクを選択して圧縮ファイルをダウンロード
  • ダウンロードしたファイルからisoイメージファイルを展開
  • SDカードをフォーマット
  • Echer https://www.balena.io/etcher をダウンロード
  • Echerを実行し、isoイメージファイルをSDカードへ書き込み(書き込み完了すると大量のダイアログが出るが、すべて閉じる)
  • SDカードを取り出し
  • Jetson NanoにUSBキーボード(日本語)、モニタ(HDMI)、USBマウスを接続
  • Jetson Nanoのmicro-USBコネクタとACアダプタ(5V2A)をつなぐ
  • ライセンスを了承する場合、チェックボックスにチェックを入れContinueボタン押下
  • 日本語を選択し次へ
  • キーボードは日本語・日本を選択し次へ
  • ユーザ情報sudo可能アカウント情報を入力し次へ
  • 変更せず次へ
  • セットアップを実行
  • 完了したらウィザードの右上ボタンを押し、ウィザードを終了させる
  • 左上のUbuntuボタンを押し、検索フィールドに「term」といれ、最初のアイコンを選択
  • sudo fallocate -l 4G /var/swapfile
  • sudo chmod 600 /var/swapfile
  • sudo mkswap /var/swapfile
  • sudo swapon /var/swapfile
  • sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
  • sudo shutdown -h now
  • ACアダプタを抜く
  • Aterm MR05LNの電源を入れる
  • Aterm MR05LNをJetson NanoのUSBコネクタに接続
  • ACアダプタをコンセントに接続
  • 起動したら先程のユーザ情報を入れログイン
  • 左上のUbuntuボタンを押し、最初のアイコンを選択
  • sudo apt update
  • sudo apt upgrade -y
  • sudo apt install build-essential python3 python3-dev python3-pip libhdf5-serial-dev hdf5-tools nano ntp -y
  • sudo apt install cmake unzip pkg-config -y
  • sudo apt install libjpeg-dev libpng-dev libtiff-dev -y
  • sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
  • sudo apt install libxvidcore-dev libx264-dev -y
  • sudo apt install libgtk-3-dev -y
  • sudo apt install libatlas-base-dev gfortran -y
  • sudo apt install python3-numpy -y
  • cd ~/
  • pip3 install virtualenv
  • python3 -m virtualenv -p python3 env --system-site-packages && echo "source env/bin/activate" >> ~/.bashrc
     && source ~/.bashrc 
  • mkdir projects/cv2
  • cd ~/projects/cv2
  • wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip
  • wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
  • unzip opencv.zip
  • unzip opencv_contrib.zip
  • mv opencv-4.1.0 opencv
  • mv opencv_contrib-4.1.0 opencv_contrib
  • cd opencv
  • mkdir build
  • cd build
  • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=~/projects/cv2/opencv_contrib/modules  -D PYTHON_EXECUTABLE=~/env/bin/python -D BUILD_EXAMPLES=ON ../
  • make -j2
  • sudo make install
  • sudo ldconfig
  • cd /usr/local/lib/python3.6/site-packages/cv2/python-3.6
  • ls cv2.cpython-36m-* (ファイル名の確認)
  • mv cv2.cpython-36m-xxx-linux-gnu.so cv2.so (xxxは環境によってかわる)
  • cd ~/env/lib/python3.6/site-packages/
  • ln -s /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.so cv2.so
  • cd ~/projects
  • git clone https://github.com/autorope/donkeycar
  • cd donkeycar
  • git checkout master
  • pip install -e .[nano]
  • pip install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3
  • donkey createcar --path ~/mycar
  • cp /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so ~/mycar/


numpyはエラーになるので、pipではなくapt管理のパッケージをインストールする 
make -js は思っている以上に時間がかかる

2020年1月8日水曜日

Jetson Nano をWiFiでつなぐ方法を考える

年明けに、Jetson Nanoを手に入れた。

厳密には、Raspberry PiインターフェイスとしてブレイクアウトするJetson Nano 開発ボードを手に入れた。

この開発ボードにはEtherコネクタはついているがWiFiは装備されていない。

ためしに手持ちのBuffalo製WiFi/BLEドングル BSBT 4D200BK をつないでみたが、なぜかSSIDが表示されない..
#ちなみに使用しているUbuntuはJetpackをそのまま使った

厳密にはsudo nmcli device wifi list しても、SSIDを隠しているWiFiルータだけしか表示されない..

どうも調べてみると、Jetpackが正式サポートされているのは
  • Intel 8265NGW Dualband Wireless AC M.2 2230 Device
  • Edimax EW-7811Un USB Wireless Networking Adapter
だけらしい..

JetpackはUbuntuベースだから、比較的新しめなデバイスでもつながるかなと思っていたが、アテが外れてしまった..

上記後者はUSBドングルのようだが、前者はPCIeだ。
一体どこにつなげるのか..とおもっていたら、Jetson Nano本体と開発ボードの間に刺すらしい..しかもサイズがそれほどないのでPCIeでも8265NGWでないと入らないのか..

上記のいずれかを入手すればつながるが、上記以外は独自デバイスドライバをGitHubなりで探し出すか、自分で作るかしなくてはならない..

もっと手近にあるもので..とおもって手元にあるAterm MR05LN をUSBケーブル経由で有線接続したら..つながった..

USB経由でWiFiが使えるようになった。

注意:JetpackをSDカードへ書き込み、最初に起動する際にAterm MR05LNを接続するとブートしない
注意:最初にログインした際の画面ウィザードを終了させないとsudo apt updateしてもエラーになる
注意:クレードル経由(ルータモード)でEtherケーブルを使ってつないだがNGだった。どうもUSBテザリングONだけしか動作しないらしい..

もしやとおもい、HUAWEI-13EAもつないでみたが、こっちはだめだった..

Aterm MR05LNなら最近宣伝している楽天モバイルでも買えるから、この方法なら手っ取り早そうだ..

でも..IoTデバイスとしては、USBコネクタを一つ消費するし(ドングルもそうだけど)、ルータ自体は独自給電だけど、USBデバイスとしてつなぐとおそらくUSB給電になるとおもうので、電源への負担が大きい..ただでさえJetson Nanoの5V電源の動作アンペアがRaspberry Piより大きいので、正直負担だ..

それなら、Buffalo製ホテルルータ(ざっくりいうと有線Etherの口をモバイルルータ化する) WMR-433W2-BK とかでEtherコネクタを消費させたほうがマシかも知れない..さて、どうするかな..





p.s.

ちなみに楽天モバイルで購入したAterm MR05LNだが、初期設定ではAPN設定があやまっていて、自分でAPN設定し直さないとつながらなかった..

 SIMカードがへばりついている紙に「rmobile.jp」にしろって書いているのに、デフォルト設定では「rakuten.jp」になっていた..

カード審査に30分かけるくせに、疎通動作すらしてないで渡すかね、楽天モバイルグランツリー武蔵小○店は..

しかも、オプション品のクレードルおいてなかったし..




p.s. その2

その後、正常動作リストにあったIntel 8256NGW PCIeボードを入手。
つないでみたら、SSIDが全部見えるようになり、すなおにWiFi接続できてしまった..




..やっぱドキュメントを先に読むべきだな..

【ハーネスエンジニアリングを始める前に】gpt-oss:20b の入出力データから、LLMの動作を理解する

  1. はじめに 最近は、 Cursor や Antigravity などのAIエージェント前提の統合開発環境や、 Claude Desktop や Codex アプリ などのPC上のオブジェクト操作が可能なデスクトップアプリ、 Open Claw といったPC全体の...