ラズパイをJetson Nanoのサブボードとして使う方法(電源供給とシリアル通信)

f:id:karaage:20200126135706j:plain:w640

ラズパイをJetson Nanoのサブボードとして使いたい

 久しぶりに、ちょっとマニアックな電子工作ネタを書いてみます。みなさん、Jetson Nano使っていますか?Jetson Nano便利ですよね。ただ、Jetson Nanoですが、自分の場合以下のようなケースで困ることがあります。

  • 重いディープラーニングと、リアルタイム性必要な処理を同時に走らせるときに負荷分散したい
  • 標準でアナログオーディオ出力※がないので、オーディオが必要なアプリを作りづらい

 そんなときに良いなと思ったのが、Jetson Nanoとラズパイの組み合わせです。ラズパイならオーディオ出力含めた、豊富な入出力がありますし、かなりの計算能力があり負荷分散も可能です。

 特に、Jetson Nanoとラズパイは、ピンコンパチなので、Jetson Nanoから電源供給してシリアル通信すれば、Jetson Nanoのサブボードとして使えそうです。Jetson Nanoとラズパイの組み合わせは、かなり便利そうですね。

 もちろん通信だけなら、Ether経由でもできるのですが、直接コンパクトに接続できる点は、シリアル通信の利点だと思います。今回の内容は、半田付け無しで簡単に接続できるので、初心者にもオススメの内容となっています。

 なお、本文の最後に記載していますが、私の環境ではJetson Nanoからラズパイに電源供給した際は、Jetson Nanoでディープラーニング等の重い計算処理を走らせるとシリアル通信が正しくできない問題が発生しました。その場合は、ラズパイの電源を外部から供給することで解決できます。

追記 ※Jetson Nano、HDMI経由のオーディオ出力は可能です。HDMIアダプター等を使えば、オーディオ信号を取り出すことは可能です。具体的な周辺機器に関しては、以下記事を参照下さい。

ハードウェアのセットアップに関して

Jetson Nanoとラズパイ(Raspberry Pi)のハードウェアのセットアップに関して

 Jetson NanoとラズパイはRaspberry Pi4を使用しました。

 それぞれのハードウェアの購入先、セットアップ方法は以下記事を参照下さい。セットアップ記事では、ディープラーニングの環境構築まで説明していますが、この記事に関しては、それぞれ起動するところまでセットアップすればOKです。

 イメージは以下を使用しています。

  • Jetson Nano: JetPack 4.2.2
  • Raspberry Pi 4: Raspbian Buster with desktop 2019-09-26

 それぞれ、他のバージョンのイメージでも基本的には問題ないと思います。

 ラズパイのハードウェアに関しては、後述しますが、ラズパイ3だとシリアル関係でハマりどころがあるので注意して下さい。

Jetson Nanoとラズパイの接続方法

 Jetson Nanoとラズパイの接続方法は、以下の図の通りジャンパワイヤで接続するだけです。

f:id:karaage:20200126135729j:plain:w640

 ジャンパワイヤは、以下のようなメス-メスのものが使用できます。

ジャンパワイヤ(メス~メス) 10本セット

ジャンパワイヤ(メス~メス) 10本セット

  • メディア: おもちゃ&ホビー

 接続するピンは、以下の通りです。

Jetson Nano ラズパイ
2pin(5V) 2pin(5V)
6pin(GND) 6pin(GND)
8pin(UART TX) 10pin(UART RX)
10pin(UART RX) 8pin(UART TX)

 UARTは送信(TX)と受信(RX)が入れ替わるのに注意して下さい。

 また、ラズパイの電源をJetson Nanoから供給せずに別電源とする場合(5Vを繋がない場合)でも、電位を合わせるためにGNDは接続するようにして下さい。

 Jetson Nanoとラズパイのピン配置に関しては以下が見やすいです。

NVIDIA Jetson Nano J41 Header Pinout - JetsonHacks

Raspberry Pi GPIO Pinout

Jetson Nanoとラズパイのソフトウェア設定

Jetson Nano側の設定

 Jetson Nanoでシリアルを使うために、以下コマンドを実行します。詳細に関しては、Jetson Nano – UARTのページを参照下さい。

$ systemctl stop nvgetty
$ systemctl disable nvgetty
$ udevadm trigger
$ sudo apt-get install python3-serial

 シリアルポートは、/dev/ttyTHS1になります。書き込み権限が必要なので、起動のたびに以下コマンドで実行権限を与える必要があります。

$ sudo chmod 666 /dev/ttyTHS1

 毎回実行するのが面倒くさい場合は、udevを設定して下さい。以下コマンドで設定できます。

$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/udev_rules/55-tegraserial.rules
$ sudo mv 55-tegraserial.rules /etc/udev/rules.d/

 udevについて詳しく知りたい人は、「udev rules」などで検索してみて下さい。Linuxで複数のUSBデバイスやシリアルデバイスを使うときに便利な仕組みです。

Raspberry Pi側の設定

 以下コマンドでRaspi-configを起動します。

$ sudo raspi-config

 以下の通りUARTをEnableにします。

5 Interfacing-Option -> P6 Serial -> Enable

 続いて/boot/cmdline.txtconsole=serial0,115200を削除します。

 シリアルポートは、/dev/serial0になります。

シリアル通信実行

 通信の受け手側(今回はRaspberry Pi)で以下のコマンドを実行します。

$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/uart_recieve.py
$ python3 uart_recieve.py

 送信側(今回はJetson Nano)で以下コマンド実行します。

$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/uart_send.py
$ python3 uart_send.py

 Raspberry Pi側のターミナルに b'test'と表示されたら、正しくJetson NanoとRaspberry Piが通信できています。

 シリアルデバイス名を修正すれば、受信側と送信側を入れ替えても同じことができると思います。

うまく動かないとき(ハードウェアデバッグ)

 うまく動かないときは、ソフトウェア、ハードウェア両面でのデバッグが必要となります。以下記事を参考にデバッグにチャレンジしてみて下さい。

 ちなみに、私の場合はJetson Nanoでディープラーニングをしているときにだけ、シリアル通信がうまく動かないという問題がありました。Jetson Nanoの通信波形をロジアナやオシロで確認したのですが、問題無かったので絶望していたのですが、もしやと思ってラズパイの電源を、Jetson Nanoからの供給から、別電源に切り替えたら解決しました。ずっと通信を疑っていたら解決できなかったと思います。こういう問題の切り分けに、測定器は非常に便利です。

f:id:karaage:20200126135808p:plain:w640

f:id:karaage:20200126135828j:plain:w640

まとめ

 ラズパイとJetson Nanoの組み合わせて使う方法を紹介しました。電源供給から通信までできると、色々できることの組み合わせが広がりそうですね。今回は、説明しきれませんでしたが、通信に関しては「ラズパイ x ラズパイ」「Jetson Nano x Jetson Nano」といった組み合わせにも応用できると思います。ちなみにArduinoとの組み合わせだと、電圧が異なるためレベル変換が必要となるため、USB経由でのシリアル通信が手軽でオススメです(過去にコチラに記事を書いています

 今後、この組み合わせだからできるアプリケーションも紹介していきたいなと思います。

 最後に、便利なこれらマイコンを解説した本「Jetson Nano超入門」を書いたり、「ラズパイマガジン」に寄稿していますので。この記事に興味を持った方、役に立ったという方は、よければこちらも是非ご覧になって下さい!

Jetson Nano超入門

Jetson Nano超入門

ラズパイマガジン 2020年2月号 (日経BPパソコンベストムック)

ラズパイマガジン 2020年2月号 (日経BPパソコンベストムック)

  • 作者:
  • 出版社/メーカー: 日経BP
  • 発売日: 2020/01/14
  • メディア: ムック

参考リンク

Jetson Nano - UART - JetsonHacks

Raspberry Piのシリアルコンソール設定について

Rubyを使ってRaspberry Pi3でシリアル通信(UART通信)をする - mcommit's message

関連記事

変更履歴

  • 2020/01/27 オーディオ出力に関して、修正と追記