JetPack のインストール
https://www.jetson-ai-lab.com/initial_setup_jon.html に従う。micro SDカードは128GBのものを使用
ArduCam用のライブラリのインストール
https://docs.arducam.com/Nvidia-Jetson-Camera/Jetvariety-Camera/Quick-Start-Guide/ に従う。
OpenCV 4.11 等を使う場合、サンプルコードそのままだとuint8型の配列として結果が返ってくるので、後処理でuint16配列に変換。
if frame.dtype == np.uint8 and frame.size == int(w) * int(h) * 2:
frame = np.frombuffer(frame, dtype=np.uint8)
frame = frame.view(np.uint16).reshape((int(h), int(w)))
大会会場でラップトップPC→JetsonのSSH接続
自宅で使用しているルーターを持ち運び、自宅と同様の無線LAN環境を構築することで対応。インターネット接続が必要な作業はスマホのテザリングで対応。
Docker
2025年6月時点の最新のjetpack だと iptable 関係のエラーが出るので、docker をダウングレードして対処。 https://forums.developer.nvidia.com/t/error-with-nvidia-container-runtime-with-docker-integration-on-agx-orin-with-jp6-2/324558/16
sudo apt-get install -y docker-ce=5:27.5.1-1~ubuntu.22.04~jammy --allow-downgrades
sudo apt-get install -y docker-ce-cli=5:27.5.1-1~ubuntu.22.04~jammy --allow-downgrades
sudo apt-mark hold docker-ce=5:27.5.1-1~ubuntu.22.04~jammy
sudo apt-mark hold docker-ce-cli=5:27.5.1-1~ubuntu.22.04~jammy
LSB_RELEASE=24.04 jetson-containers build --name=my_ros2 pytorch numba opencv gsplat ros:jazzy-desktop
GPIOの権限については、ホスト側でgpio グループのGID を201000 (自動設定されるGIDと被らない)に設定したうえで、コンテナ側のユーザーubuntu (1000:1000)を2010000のグループに設定することにより、 Docker 内の一般ユーザーubuntuからGPIOを叩くことが可能になる。
ハードウェア仕様
PWMの有効化
sudo /opt/nvidia/jetson-io/jetson-io.py で設定できる。
カメラドライバとの共存が難しかったため、以下のGPIO Output と同様にレジスタを直接操作することで設定。REVD0 を GP に、 PUPD を PD に、 GPIO_SF_SEL を SFIO に設定すればいい。
変調周波数がかなり離散的にしか設定できず、ステッピングモータの駆動(パルス信号生成)に使うのは厳しかったため、最終的にモータ駆動用にESP32を外付けした。今回の用途には合わなかったが、DCモータの駆動や回転速度を気にしないステッピングモータ駆動であれば十分使えると思う。
GPIO Output の有効化
リファレンスマニュアルを見てGPIO Output を有効にしたいレジスタのアドレスを特定し、busybox devmem でレジスタの値を直接書き換える。
1. Carrier Board Specification と Pinmux Config Template のConsumer Usage を押すと出てくる一覧を確認し、設定したいピンのTechnical Reference Manual (TRM) での名称 (Pin 31 の場合、SOC_GPIO33)を特定
2. TRM 内で検索し、GPIO設定用レジスタのオフセット (Pin 31の場合 0x70) を特定