AIの片隅で(13) Jetson NanoでLチカ

JosephHalfmoon

前回、AI業界の “Hello World!” である MNISTをやってしまったので、遅ればせながらマイコン業界の “Hello World!”である Lチカを Jetson Nanoにもやっていただくことにいたしました。128個のCUDAコアをもつJetson Nanoには恐れ多い仕事ですが、エッジでAI狙いのJetsonですからIOくらい制御していただいても文句は言いますまい。

最初に失敗談を申し述べます。

/opt/nvidia/jetson-gpio/samples

にgpio操作のサンプル(Pythonスクリプト)が存在します。ですから素直にREADME.md を読んで、その通りにすれば Jetson NanoからGPIOを操作するなど失敗するわけないのです。しかし、例によって早とちりしました。まずサンプルソースを開いてみたところこんな感じ(サンプルの一つの一部を引用させていただきます)

先頭を見ればNVIDIA社のソースに間違いありません。それでいて下の方、

import RPi.GPIO as GPIO

これみて早合点してしまいました。

嘘!、RPi.GPIO で制御できるの??

言っておきますが、できるわけありません。しかし数時間前、私はPIP3でRPi.GPIOをJetson nanoにインストールしたあげく、あえなく、ラズパイでしか走らないもんね、と拒絶されました。ちゃんと README.md 読みましょう。

RPi.GPIO くりそつの Jetson.GPIO というモジュールがあるのです。それこそ必要なもので、これをインストールさえすれば、

RPi.GPIO という名で Jetson.GPIO を呼ぶことができる

よって、さもラズパイ上のGPIOプログラムが走るように見えるのでした。ただし、私のように本物のRPi.GPIOをインストールしてしまうと、それがJetson.GPIOの別名を隠してしまうので、RPi.GPIOをアンインストールしておかねばなりませぬ。そんなことをする人はいないだろうけれど、念のため。

ピンの呼び方にもラズパイへの配慮があり、モードを

GPIO.BCM

に設定すれば、ラズパイのCPU-SoCであるBCM2835とその後継機と互換のピン番号で操作できるようになります。勿論、Jetson Nanoのボードに書かれているピン番号で呼ぶことも可能(全4通りの呼び方可能)。

端の3.3Vの電源と近くのGPIOを一本だけつかってLEDを光らせるサンプルがこちら。led_pinで指定しているのは、Raspberry Pi上でのピン番号であります。そして、あえてJetson.GPIOのインポートをコメントアウトし、RPi.GPIOというお名前で呼び出してます。GPIO.outputでLOW出力していますが、LOWでLED ON, HIGHでLED OFFです。

頭の方でGPIO.setwarnings(False)しているのは、onとoffを別のプログラムから制御していると、その度にうるさい警告がでるので、それを抑止するためであります。RPi.GPIO同様 実行には特権必要です。

$ sudo python3 led_on.py

といった具合。実際、Jetson Nanoから配線引き出してLEDを光らせているところがこちら。

すみません、Lチカで、ここまで引っ張ってしまいました。本日はこれまで。

AIの片隅で(12) Jetson NanoでChainer へ戻る

AIの片隅で(14) Jetson Nano、nvprof へ進む