Help us understand the problem. What is going on with this article?

Jetson NanoにJetPack 4.4を入れてTensorFlow・物体検出・姿勢推定・ROS2(Realsense)・ROS1動かしてみた

Jetson Nanoに満を持してJetPack 4.4を入れてみました

 からあげといいます。半年ほど前に「Jetson Nano超入門」という本を共著で書きました。詳しくは以下ブログ記事参照ください。

共著で書いた本「Jetson Nano超入門」が12/21に発売されます

 ただ、この手の本の宿命として、書いたタイミングと発売するタイミングで基本ソフト(JetPack)のバージョンが異なり、本の通りにやってもうまく動かないということがありました。一応本やサポートサイトでは、古いバージョンのソフトでの動作を推奨しているのですが、気づかない人も多いし、最新のソフトで動かしたいのが人情というものですよね。

 というわけで、ずっと先延ばしにしていたJetPack 4.4を入れて、本に書いてあることを色々試してみました。書籍のサポートという位置付けで記事を書きたいと思います。

 以下のまとめ記事の方も、JetPack 4.4に関して追記していますが、この記事ではJetPack 4.4に特化して情報をまとめています。
Jetson Nano関係のTIPSまとめ

JetPack4.4で変わったこと

 JetPackはバージョンごとで、変更が結構あります。、今までJetPack 4.2以前しか使っていなかったのですが、4.2以降の変更として、以下が影響大きそうです。

  • TensorFlow 1.x -> 2.x
  • OpenCV3.x -> 4.x

 TensorFlowは 1.x系をインストールする方法があるのですが、今回は漢らしく2.xにしました(嘘です、間違えてうっかり2.xをインストールしてしまいました)。
 その他、いつのバージョンからの変更か分からないハマりどころも色々ありました。まとめて紹介します。

 なお、最初に書いておくと現状以下の2点の理由でJetPack4.4はオススメできません。JetPack4.3か4.2を入れる方が良いと思います。

  • TensorFlow2.xの問題が多い(フォーラムでも議論されている)
  • カメラが遅れる(現状原因不明)
     

    JetPack 4.4でやったこと

     以下を実施しました。順に説明していきます。

  • TensorFlowセットアップ

  • 物体検出

  • 姿勢推定

  • ROS2(+Realsense)セットアップ

 使用している画像は、古いJetPackを使用したものもありますが、全部JetPack4.4で動作確認をしています。

TensorFlowのインストール

 色々変わっていたので、JetPack 4.4用のセットアップスクリプトを作成しました。以下を実行すればセットアップできます。

$ git clone https://github.com/karaage0703/jetson-nano-tools
$ cd jetson-nano-tools
$ ./install-tensorflow-v44.sh

参考にしたのは以下の公式情報です。

Jetson NanoへのTensorFlowセットアップ方法(公式)

追記:JetPackでのTensorFlow2.x系ですが、本記事のコメントにもあります通り、正直挙動が相当怪しいです。JetPack4.4では、当面ver1.x系を使用した方が無難かもしれません。ver1.x系のセットアップ方法に関しては、上記の公式情報を参照ください。私自身は、JetPackでTensorFlow1.x系に関しては動作未確認となります。すみません。

物体検出

 TensorFlowのObject Detection APIというソフトを使いやすくする、拙作のソフト「Object Detection Tools」を使用します。以下コマンド実行すれば、物体検出がうごきます。

$ cd && git clone https://github.com/karaage0703/object_detection_tools
$ cd ~/object_detection_tools/models
$ ./get_ssdlite_mobilenet_v2_coco_model.sh
$ cd ~/object_detection_tools
$ python3 scripts/object_detection.py -l='models/coco-labels-paper.txt' -m='models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb' -d='jetson_nano_raspi_cam'

 実行結果のイメージ画像です。写真の人物は私ではなく、友人のロンスタさん(変デジ研究所)です。

object_detection_tools.png

 Object Detection Toolsに関して詳しく知りたい方は、以下ブログ記事やQiita記事も参照ください。

TensorFlowの物体検出用ライブラリ「Object Detection API」を手軽に使えるソフト「Object Detection Tools」を作ってみた

姿勢推定

 以下でセットアップします(./install-tensorflow-v44.shは実行済みでしたら実行不要です)。

$ git clone https://github.com/karaage0703/jetson-nano-tools
$ cd jetson-nano-tools
$ ./install-tensorflow-v44.sh
$ ./install-pose-estimation-v44.sh

 姿勢推定のソフト「tf-pose-estimation」がTensorFlow2.xでそのまま動かなかったので、色々ソフト修正しています。基本的にはコメントアウトしまくっただけです。推論だけなら不要なコードが多いので動いています(学習はできなくなっていると思います)。

 ラズパイカメラモジュールを使用する場合は、以下実行してください。

$ cd ~/tf-pose-estimation
$ python3 run_jetson_nano.py --model=mobilenet_v2_small --resize=320x176

 普通のWebカメラの場合は、以下実行してください。

$ python3 run_webcam.py --model=mobilenet_v2_small --resize=320x176

 ラズパイカメラモジュールが接続されている状態でWebカメラを使用する場合は、以下となります。

$ python3 run_webcam.py --model=mobilenet_v2_small --resize=320x176 --camera=1

 実行した結果のイメージ図は以下です。

openpose.gif

 姿勢推定(骨格検出)に関して、詳細は以下記事参照ください(JetPack4.4に関しても追記してあります)。

Jetson Nanoに骨格検出を実現するソフト「tf-pose-estimation」をセットアップする方法

ROS2のインストールとRealSense D435のセットアップ

 過去ROS1を使っていたので、今回は初めてROS2をセットアップしてみました。セットアップスクリプトは以下です。

$ git clone 
$ cd jetson-nano-tools
$ ./install-ros2-dashing.sh

 あとは亀のシミュレータを動かします。以下でインストールして起動します。

$ sudo apt install ros-dashing-turtlesim
$ source /opt/ros/dashing/setup.bash
$ ros2 run turtlesim turtlesim_node

ros2_turtle.jpg
 亀出ました

 続いて、3DカメラモジュールのRealSense D435を動かしてみます。RealSense D435のROS2ラッパーをインストールします。

 Intelの公式リポジトリのREADME通りでセットアップできました。intel/ros2_intel_realsense

 以下はREADMEからの抜粋した、実行したコマンドです。最新のセットアップ方法に関しては、公式のREADMEを確認するようにしましょう。

$ sudo apt-get install ros-dashing-cv-bridge ros-dashing-librealsense2 ros-dashing-message-filters ros-dashing-image-transport
$ sudo apt-get install -y libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
$ sudo apt-get install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
$ sudo apt-get install ros-dashing-realsense-camera-msgs ros-dashing-realsense-ros2-camera

 あとは、Rvizの設定ファイルもダウンロードしておきます。

$ wget https://raw.githubusercontent.com/intel/ros2_intel_realsense/master/realsense_ros2_camera/rviz/ros2.rviz

 起動は、以下実行すればOKです。

$ source /opt/ros/dashing/setup.bash
$ ros2 run realsense_ros2_camera realsense_ros2_camera

 Rvizというソフトで可視化してみましょう。別のウィンドウを開いて、以下コマンドでダウンロードした設定ファイルを読み込んでRvizを起動します。

$ source /opt/ros/dashing/setup.bash
$ ros2 run rviz2 rviz2 -d ros2.rviz

 ババーンと、カラーカメラ情報、デプス情報、赤外線画像が表示されます。赤外線画像は、奥行き推定のために照射している赤外線のランダムドットパターンが見えますね。

ros2_realsense.jpg

 PCL(Point Cloud)をみるときは、少し注意が必要です。何故か、 ROS1では繋がっていた camera_depth_optical_framecamera_linkのフレームが繋がっていないので、Fixed Frameにcamera_depth_optical_frameを指定して、/camera/depth/color/pointsを指定する必要があります。

 設定と表示した様子は以下となります。

rviz2_pcl.jpg

 単純に、リアルセンス単体の動作を確認する場合は、以下のコマンドでもOKです。

$ rs-capture

 また、ファームウェアのバージョンアップに必要なrealsense-viewerが含まれているlirealsenseは、ダウンロードしておいた方がよいでしょう。以下記事も参考にしてみてください。

Jetson NanoでIntel Realsense D435を使う方法(ROS対応)

Jetson NanoでRealsenseのPythonラッパーPyRealsenseを使用する方法

 ちなみにJetPack4.4でROS1が動くかや、ROS2と共存できるかはまだ確認していません。

 今回のセットアップに参考にしたのは、以下のサイトです。

ROS1のインストール

 JetPack 4.4でROS1もRealsenseも動きました。特に問題なくROS2とも共存できるようです。

 セットアップ記事は以下参照ください。

Jetson NanoにROSをインストールする方法

Jetson NanoでIntel Realsense D435を使う方法(ROS対応)

JetPack4.4でのハマりどころ

 JetPack4.4でのハマりどころのまとめです。TensorFlow2.xになったことでのハマりどころもたくさんありますが、それはJetPackの問題ではないので割愛しています(エラーメッセージでググりましょう)。

tf.__version__でエラーが発生する

JetPack4.4で発生しました。Twitterで教えてもらいましたが、tf.version.VERSIONでバージョンが確認できるようです。何故…Twitter情報だと JetPack4.3では発生しないとのこと。何故…

とりあえず使いたいソフトにtf.__version__がある場合は、コメントアウトするなりしましょう。自分のソフトに関しては、tryで囲んでます。

ラズパイカメラモジュール(RaspiCamV2)が動かない

いつからかは不明ですが、解像度設定 3280 x 2464ではラズパイカメラが動かなくなっていました。解像度を 1920 x 1080 に落とすことで解決しました。自分で作成したソフトは、解像度1920x1080に修正しています。

参考:カメラ画像をJetson nanoで表示させたい

ディープラーニングで推論するとカメラが遅れる

 カメラが数秒遅れます。Twitterで対策をフォロワーさんに教えてもらいました。私自身は試せていませんが、参考情報として教えてもらった対策方法を紹介いたします。 試しました。両方とも効果ありです!

 手っ取り早くは、キャプチャのreadを何度か空打ちすれば良いようです。Gstreamerのバッファがたまってしまっているのが問題ではないかとのことです。

    while(cap.isOpened()):
        # ret, frame = cap.read()
        for i in range(5):
            ret, frame = cap.read()
        if ret == False:
            print('VideoCapture read return false.')
            break

参考にしたコード

 もしくは、gstreamerのオプション変更でも対応できるそうです。こっちのほうがスマートそうですね。

まとめ

 Jetson NanoをJetPack4.4に対応してみました。バージョンアップするだけで、ソフトがそのままでは色々動かなくなるのはOSSの宿命とはいえ、なかなか辛いものがありますね。ただ、最新の技術に触れる良い機会でもありますね、色々発見もありました(不毛な時間も多いですが)。そこまで理由がなければ、JetPack4.2か4.3を使用した方が良いかなというのが自分の感想です。

 最後に「Jetson Nano超入門」はJetson Nanoの入門書としては有用な数少ない書籍と思いますので、もしよろしければ合わせてご購入検討ください。書籍の紹介や、サポートサイトへのリンクは以下参照ください。

共著で書いた本「Jetson Nano超入門」が12/21に発売されます

 まあ、本を買わなくても今回の記事の内容は、記事読めば全部できちゃうんですけどね、HAHA!

関連記事

Jetson Nano関係のTIPSまとめ

「Jetson Nano超入門」サポートページ

変更履歴

  • 2020/06/05 ROS1のインストールに関して追記
  • 2020/06/02 カメラが遅れる問題に関して実機確認結果を追記 / ROS2のPCL表示に関して追記
  • 2020/06/01 ディープラーニング使用時にカメラが遅れる問題に対する対策追記
karaage0703
闇のエンジニア/変なデジカメ開発中/ディープラーニング芸人/Raspberry Piとからあげ大好き/はてなブログ書いてます
https://karaage.hatenadiary.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした