2025年11月3日月曜日

中部地区大会2025

 (関西地区大会とreRo杯のこと書くの忘れてた… 関西は昨年と同様大盛況だった。reRo杯は別競技が同時開催されているなど、楽しい大会です。)

2022年以来、3年ぶりに中部地区大会に参加。いつものマイクロマウス・ロボトレーサに加えて、カメラとJetsonを搭載したロボトレーサもエントリー。ロボトレースで2位に入り、マウスとカメラトレーサも特別賞をいただいた。

それぞれ課題点が判明したので、(すぐはちょっと難しいが)対応したい。

カメラ搭載ロボトレーサ JetRT

前回のreRo杯では1.4kgの文鎮になってしまっていたが、今回は何とかライントレース、マーカー検出等ロボトレース完走に必要な最低限を実装したうえで臨んだ。R10直後にコーナーマーカー、ゴールマーカーが10cm間隔で連続するところが難しく(誤ってクロスとして検出してしまう)、ひやひやしたが、何とか完走できた。Jetsonを活用しようとするチャレンジ精神を評価いただき、特別賞をいただいた。

ロボトレーサ L1S

吸引力を4.2V相当でセーブしていたのを6Vまで引き上げた。ただ結局完走できる速度設定の限界は変わっていない。色々あって本当にただ上げただけになってしまったので余裕ができたらいろいろ調べたい。2位。

マイクロマウス β2

ターン連続の後の斜めで引っ掛かり、かなり速度を落としたパラメータのみで完走。かなり速度を落としたパラメータでも結構怪しかった。要検証。非中部支部員の中で(3番目に)良い成績だったということで特別賞をいただいた。

大会を運営してくださった皆様、ありがとうございました。

2025年11月2日日曜日

Jetson Orin Nano (Super) 開発者キット セットアップメモ

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

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の有効化

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) を特定