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)))
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
dusty-nv/jetson-containers: Machine Learning Containers for NVIDIA Jetson and JetPack-L4T を使用し以下のオプションでイメージをビルドすることで、ROS2-jazzy や OpenCV (CUDAあり) が使用可能なイメージを作成 (numbaやpytorch、gsplat はただの個人の趣味で、今のところロボットとしての動作には使っていない)。
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の有効化
カメラドライバとの共存が難しかったため、以下の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) を特定

0 件のコメント:
コメントを投稿