メインコンテンツまでスキップ

Robotics J501 ハードウェアと入門

reComputer Robotics J501 は、高度なロボティクスおよび産業アプリケーション向けに設計された高性能エッジAIキャリアボードです。MAXNモードのNVIDIA Jetson AGX Orinモジュール(32GB/64GB)に対応し、最大275 TOPSのAI性能を発揮します。

1x 10GbEおよび4x 1GbE Ethernetポート、NVMe SSD用デュアルM.2 Key Mスロット、5GおよびWi-Fi/BTモジュール用M.2スロット、複数のUSB 3.0ポート、4系統のCANインターフェース(2ネイティブ + 2 SPI-to-CAN)、GMSL2カメラ拡張、DI/DO、I2S、UART、RS485を含む包括的なI/Oなど、豊富な接続オプションを備え、複雑なマルチセンサーフュージョンとリアルタイムAI処理のための強力なロボットブレインとして機能します。

JetPack 6.2.1 と Linux BSP をプリインストールしており、シームレスなデプロイを実現します。NVIDIA Isaac ROS、Hugging Face、PyTorch、ROS 2/1 などのフレームワークをサポートすることで、J501 は大規模言語モデル駆動の意思決定と物理ロボット制御をつなぎ、すぐに使えるインターフェースと最適化されたAIフレームワークにより自律ロボット開発を加速します。

主な特長

  • 高性能AI: Jetson AGX Orin 32/64GBモジュール、Ampere GPUおよびDLAエンジンにより最大275 TOPS
  • 豊富な接続性: デュアルM.2 Key M(NVMe)、Key E(WiFi/BT)+ Key B(5G)、1x 10GbE + 4x 1GbE、3x USB 3.0、2x USB-C
  • クアッドCAN-FD: 電気的絶縁付き 2x ネイティブ + 2x SPI-to-CAN インターフェース
  • GMSL2 ビジョン: 高速カメラ接続用シングルGMSL2インターフェース(1x)
  • 産業用設計: 19〜48V DC入力、-10〜60°C動作、絶縁インターフェース、JetPack 6.2.1プリインストール
  • ロボティクス対応: ROS 2/1、Isaac ROSサポート、DI/DO、I2S、UART、RS485、AMRおよび自動化向けに最適化

仕様

Jetson AGX Orin システムオンモジュール
仕様reComputer Robotics J5011reComputer Robotics J5012
モジュールNVIDIA Jetson AGX Orin 32GBNVIDIA Jetson AGX Orin 64GB
AI性能200 TOPS275 TOPS
GPU1792コア NVIDIA Ampere @ 930 MHz2048コア NVIDIA Ampere @ 1.3 GHz
CPU8コア Arm Cortex-A78AE @ 2.0 GHz12コア Arm Cortex-A78AE @ 2.2 GHz
メモリ32GB 256-bit LPDDR5 @ 204.8 GB/s64GB 256-bit LPDDR5 @ 204.8 GB/s
ビデオエンコーダ1x 4K60 / 3x 4K30 / 6x 1080p60 / 12x 1080p30 (H.265)2x 4K60 / 6x 4K30 / 8x 1080p60 / 16x 1080p30 (H.265)
ビデオデコーダ1x 8K30 / 2x 4K60 / 4x 4K30 / 9x 1080p60 / 18x 1080p30 (H.265)1x 8K30 / 3x 4K60 / 7x 4K30 / 11x 1080p60 / 22x 1080p30 (H.265)
CSI カメラ最大6台のカメラ(バーチャルチャネル経由で16台)
16レーン MIPI CSI-2
D-PHY 2.1(最大40Gbps)/ C-PHY 2.0(最大164Gbps)
メカニカル100mm x 87mm
699ピン Molex Mirror Mezz コネクタ
一体型サーマルトランスファープレート
キャリアボード
ストレージ2x M.2 Key-M(NVMe 2280 SSD)
1x M.2 Key-B(4G/5Gモジュール用)
ネットワーキング1x M.2 Key-E(WiFi/BT)
1x RJ45 10GbE + 4x RJ45 1GbE
USB3x USB 3.0 Type-A
1x USB 3.0 Type-C(リカバリ)
1x USB 2.0 Type-C(デバッグUART)
DI/DO/CAN1x 2x10P 3.81mm 端子台 - 4x DI @12V + 4x DO @40V + 4x CAN(CAN-FD対応、電気的絶縁)
GMSL2x Mini-Fakra コネクタ(8x GMSL2 カメラ用)(オプション)
シリアル2x DB9(RS232/422/485)
ディスプレイ1x HDMI 2.1
ファン1×12 V(2.54 mm)、1×5 V(1.25 mm JST)
ボタン1x Recovery + 1x Reset
LED3x LED(PWR、SSD、ユーザーLED)
RTC1x CR1220 電池ホルダー、1x RTC 2ピンヘッダ
電源入力5.08mm 端子台経由 19〜48V DC(電源アダプタは付属しません)
消費電力Jetson AGX Orin モジュール: 最大60W(MAXNモード)
システム全体ピーク: 75W(周辺機器を含む)
ソフトウェアJetpack 6.2.1
メカニカル

寸法: 210mm x 180mm x 87mm(スタンド含む)
重量: 200g
取り付け方法: デスク / 壁 / DINレール(DINブラケットは付属品に含まれます)
動作温度: -10℃〜60℃(25W)/ -10℃〜55℃(MAXN)

保証2年
認証RoHS、REACH、CE、FCC、UKCA、KC

GMSL 拡張ボード仕様(オプション)

デシリアライザMAX96712
GMSL インターフェース2x Robotics-Fakra オスコネクタ
GMSL 入力最大8x GMSL2 カメラ
接続方法GMSL2 Fakra 1-to-4 M-M ケーブル
POC インターフェース機能電源とデータの同時伝送をサポート

ハードウェア概要

📦 JetPack OS をフラッシュする

対応モジュール

事前準備

  • Ubuntu ホストPC
  • reComputer Robotics J501
  • USB Type-C データ転送ケーブル
備考

仮想マシンではなく、物理的なUbuntuホストデバイスを使用することを推奨します。 ホストマシンを準備する際は、以下の表を参照してください。

JetPack Version Ubuntu Version (Host Computer)
18.04 20.04 22.04 24.04
JetPack 6.x
JetPack 7.2

Note: JetPack 7.2 では、Ubuntu 24.04 はフラッシュおよびターゲット側コンポーネントのインストールのみサポートされます。ホスト開発コンポーネントが必要な場合は、Ubuntu 20.04 または 22.04 を使用してください。

Jetpack イメージの準備

ここでは、使用しているJetsonモジュールに対応するシステムイメージをUbuntu PCにダウンロードする必要があります。

Jetpack バージョンJetson モジュール GMSL Download Link1SHA256
7.2 AGX Orin 64GBDownloaddddee915df6dcd939dc05743c6e5e9df
6c2b2b6836a969ce4ae4bc02d3078d50
AGX Orin 32GBDownload6da5c7cd6c143460958a460a5f9d663
91cb49bb4da8f0e158ecbd34c0a6336f1
6.2.1 AGX Orin 64GBダウンロードB858312B9DC9EA5D43A104F478C0ABDC
AGX Orin 32GBダウンロードe868fd8c7ad05d3acc8c9808f42e1835
28f11df14f48cb6ae16464adb4f23d1f
危険

JetPack イメージファイルはサイズが大きく、ダウンロードに約 60 分かかる場合があります。ダウンロードが完了するまでお待ちください。

備考

ダウンロードしたファームウェアの完全性を検証するには、SHA256 ハッシュ値を比較します。

Ubuntu ホストマシンでターミナルを開き、sha256sum <File> コマンドを実行して、ダウンロードしたファイルの SHA256 ハッシュ値を取得します。結果のハッシュが wiki に記載されている SHA256 ハッシュと一致すれば、ダウンロードしたファームウェアが完全で破損していないことが確認できます。

⚙️ SEEED の Jetson キャリアボード用のすべての .dts ファイルおよびその他のソースコードは、次からダウンロードできます Linux_for_Tegra

強制リカバリーモードに入る

備考

インストール手順に進む前に、ボードが強制リカバリーモードになっていることを確認する必要があります。

手順

ステップ 1. USB Type-C データ転送ケーブルを USB2.0 DEVICE ポートと Ubuntu ホスト PC の間に接続します。

ステップ 2. ピンを使用して RECOVERY ホールに差し込み、リカバリーボタンを押し続けます。

ステップ 3. 電源を接続します。

ステップ 4. リカバリーボタンを離します。

ステップ 5. Linux ホスト PC でターミナルウィンドウを開き、lsusb コマンドを入力します。使用している Jetson SoM に応じて、返された内容に次のいずれかの出力が含まれていれば、ボードは強制リカバリーモードになっています。

  • AGX Orin 32GB の場合: 0955:7223 NVidia Corp
  • AGX Orin 64GB の場合: 0955:7023 NVidia Corp

以下の画像は AGX Orin 32GB の例です:

Jetson へのフラッシュ

ステップ 1: ダウンロードしたイメージファイルを解凍します:

cd <path-to-image>
sudo tar xpf mfi_xxxx.tar.gz
# For JetPack 7.2 example: sudo tar xpf mfi_recomputer-robo-agx-orin-32g-j501-7.2.0-39.2.0-2026-06-26.tar.gz
# For JetPack 6.2.1 example: sudo tar xpf mfi_recomputer-robo-agx-orin-32g-j501-6.2.1-36.4.4-2026-02-11.tar.gz

ステップ 2: 次のコマンドを実行して、JetPack システムを NVMe SSD にフラッシュします:

cd mfi_xxxx
# For example: cd mfi_recomputer-robo-agx-orin-j501x
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --massflash 1 --network usb0 --showlogs

フラッシュ処理が成功すると、次のような出力が表示されます

注記

フラッシュコマンドの実行には 2〜10 分かかる場合があります。

ステップ 3: Robotics J501 を PD から HDMI へのアダプタを使用して HDMI 入力対応ディスプレイに接続するか、PD ケーブルを使用して PD 入力対応ディスプレイに直接接続し、初期設定を完了します:

備考

ニーズに応じて System Configuration を完了してください。

🔌 インターフェースの使用方法

以下では、Robotics J501 ボードの各種インターフェースとその使用方法について紹介します。

M.2 Key M

J501 には、PCIe Gen4x4 NVMe SSD をサポートするデュアル M.2 Key M スロットが搭載されており、高速なストレージ拡張が可能です。

対応 SSD は次のとおりです

ハードウェア接続

使用手順

Jetson デバイスでターミナルを開き、次のコマンドを入力して SSD の読み書き速度をテストします。

ステップ 1. テスト用ディレクトリとファイルを作成します:

mkdir ssd
touch ~/ssd/test

ステップ 2. 書き込み性能をテストします:

dd if=/dev/zero of=/home/$USER/ssd/test bs=1024M count=5 conv=fdatasync

ステップ 3. SSD 情報を確認します:

nvme list
危険

テスト完了後は、キャッシュファイルを削除するために sudo rm /home/$USER/ssd/test コマンドを実行してください。

M.2 Key E (WiFi/BT)

M.2 Key E スロットは、Wi-Fi 6 および Bluetooth 5.x モジュールをサポートし、ワイヤレス接続を提供します。

ハードウェア接続

ヒント

注意: インターフェースを使用する前に、下図のように筐体のネジを外し、対応するモジュールを取り付ける必要があります。

使用手順

性能テスト: Wi-Fi の性能をテストするには、次のコマンドを使用します(IP アドレスはテストサーバーのものに置き換えてください):

# On server: iperf3 -s
# On client:
iperf3 -c 192.168.7.157

Bluetooth 機能は M.2 Key E スロット経由で利用できます。 Bluetooth テスト:

M.2 Key B (4G/5G モジュール)

M.2 Key B スロットは、Nano SIM カードホルダー付きの 4G/5G セルラーモジュールをサポートします。

ハードウェア接続

ヒント

注意: インターフェースを使用する前に、下図のように筐体のネジを外し、対応するモジュールを取り付ける必要があります。

使用手順

ステップ 1. ハードウェア認識を確認する

lsusb 

このコマンドは、システムに接続されているすべての USB デバイスの一覧を、メーカー(ID)、種類、その他の情報とともに表示します。たとえば、出力に Quectel Wireless Solutions Co., Ltd. EM12-G などのデバイスが表示されていれば、5G モジュールが存在していることを示します。

ステップ 2. ドライバーのロードを確認する 5G モジュールに必要な option ドライバーがロードされていることを確認することが重要です。これを確認するために lsmod コマンドを使用できます。

lsmod | grep option 

option ドライバーが正常にロードされていれば、出力にドライバーに関する関連情報が表示されます。

ステップ 3. ModemManager を設定する ModemManager はモデムデバイスを管理するためのツールであり、インストールして再起動する必要があります。

sudo apt install modemmanager 
sudo systemctl restart ModemManager

apt install コマンドは ModemManager パッケージをインストールするために使用され、systemctl restart は ModemManager サービスを再起動して、新しい設定が有効になるようにします。

ステップ 4. モジュール認識を確認する ModemManager が 5G モジュールを正しく認識できるかどうかを確認するために、mmcli -L コマンドを使用できます。

mmcli -L 

5G モジュールが認識されている場合、/org/freedesktop/ModemManager1/Modem/0 のような出力が表示され、検出されたモデムデバイスへのパスを示します。

ステップ 5. APN を設定する APN(Access Point Name)は、モバイルデバイスをネットワークに接続するために重要です。ここでは nmcli コマンドを使用してベアラープロファイルを作成します。China Mobile を例に、次のコマンドで設定ファイルを作成できます:

sudo nmcli con add type gsm ifname "*" apn "CMNET" ipv4.method  auto 

このコマンドは、新しい GSM(Global System for Mobile Communications)タイプの接続を追加し、APN を「CMNET」に指定し、IPv4 の自動設定を使用します。

ステップ 6. 接続を有効化する ベアラープロファイルを作成したら、接続を有効化する必要があります。

sudo nmcli con up "gsm" 

このコマンドは GSM 接続を有効化し、成功すると確認メッセージが表示されます。

ステップ 7. モジュール認識を再確認する APN を設定した後もモジュールが認識されていることを確認するために、再度 mmcli -L コマンドを実行します。

mmcli -L 

ステップ 8. モジュールステータスを確認する 最後に、mmcli -m 0 コマンドを使用して、IP 割り当て、キャリア、ネットワーク接続状態など、モジュールに関する詳細情報を確認できます。

mmcli -m 0 

このコマンドは、メーカー、モデル、対応および現在使用中のネットワーク技術、デバイスステータス、接続中のネットワークオペレーターなど、5G モジュールに関する包括的な情報を提供します。

Ethernet

Robotics J501 は、1x 10GbE(ネイティブ)および 4x 1GbE(PCIe スイッチ経由)の RJ45 ポートを備えています。10GbE ポートには TI TQSPH-10G PHY が搭載されており、10/5/2.5/1/0.1 GbE の 5 つの速度をサポートします。1GbE ポートは 10/100/1000M の速度をサポートします。

ポートごとの LED インジケータ:

  • 緑色 LED: 10G/5G/2.5G/1000M リンク時に点灯
  • 黄色 LED: ネットワークアクティビティ時に点滅

Ethernet ポート速度をテストするには、次のように iperf3 を使用します:

iperf3 -c <server_ip> -B <bind_ip>
備考

<server_ip> は iperf3 サーバーの IP アドレスです。クライアントはこのサーバーに接続して帯域幅テストを実行します。 <bind_ip> は、テストトラフィックの送信元として使用するローカル IP アドレスをバインドします。

LED

J501 には複数のステータス LED が搭載されています:

  • PWR LED: 電源ステータス(緑)
  • ACT LED: システムアクティビティ(黄)
  • USR LED: GPIO 制御経由

使用方法

以下では、USER LED を緑、赤、青に制御する方法を示します。

#change to red
echo 1 | sudo tee /sys/class/leds/on-board:red/brightness
echo 0 | sudo tee /sys/class/leds/on-board:red/brightness
#change to green
echo 1 | sudo tee /sys/class/leds/on-board:green/brightness
echo 0 | sudo tee /sys/class/leds/on-board:green/brightness

#change to blue
echo 1 | sudo tee /sys/class/leds/on-board:blue/brightness
echo 0 | sudo tee /sys/class/leds/on-board:blue/brightness

LED 制御の効果は、以下の図のとおりです:

USB

Robotics J501 は、4x USB 3.2 Type-A ポート(内部 USB 3.1 Gen1 ハブ経由で、高速な周辺機器、ストレージデバイス、カメラなどの接続に最大 5Gbps のデータレートをサポート)と、1x USB 2.0 Type-C デバッグポート(シリアルコンソールとして機能し、システムログへのアクセス、ブート問題のデバッグ、ファームウェア更新の実行に使用)を提供します。

USB-A 速度テスト

USB デバイスの速度をテストするスクリプトを作成します:

vim test_usb.sh

次の内容を貼り付けます:

test_usb.sh
cat <<'EOF' | sudo tee test_usb.sh >/dev/null
#!/bin/bash
set -e

MOUNT_POINT="$1"
TEST_FILE="$MOUNT_POINT/test_usb_speed.bin"

if [ -z "$MOUNT_POINT" ]; then
echo "Usage: $0 <mount_point>"
echo "Example: $0 /media/seeed/USB"
exit 1
fi

if [ ! -d "$MOUNT_POINT" ]; then
echo "Error: $MOUNT_POINT is not a directory"
exit 1
fi

echo "Write test..."
dd if=/dev/zero of="$TEST_FILE" bs=1M count=2048 conv=fdatasync status=progress

echo
echo "Drop caches..."
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

echo "Read test..."
dd if="$TEST_FILE" of=/dev/null bs=1M count=2048 status=progress

echo
echo "Cleaning up..."
rm -f "$TEST_FILE"
EOF

スクリプトに実行権限を付与してテストします:

sudo chmod +x test_usb.sh
./test_usb.sh /mnt # If your USB drive is mounted at /mnt
# Or
./test_usb.sh /media/usb # If your USB drive is mounted at /media/usb
# Or
./test_usb.sh /path/to/your/usb/mount_point
注記

まず df -h または lsblk コマンドを使用して、USB デバイスの実際のマウントポイントを確認してください!

USB 2.0 Type-C ポート

このシリアルポートを USB-C データケーブル経由で使用することで、PC 側で入出力のデバッグ情報をモニタリングできます。

ステップ 1. シリアルポートツールを開きます(ここでは例として MobaXterm ツールを使用します)。新しいセッションを作成します。

ステップ 2. Serial ツールを選択します。

ステップ 3. 対応するシリアルポートを選択し、ボーレートを 115200 に設定して "OK" をクリックします。

ステップ 4. ユーザー名とパスワードを使用して reComputer Super にログインします。

Fan

Robotics J501 には、Jetson モジュールおよびキャリアボードコンポーネントを冷却するために設計された 2 つの 4 ピン PWM ファンコネクタが用意されています:

  • 12V ファン: 2.54 mm コネクタ、最大 1.5A、高性能冷却に最適
  • 5V ファン: 1.25 mm JST コネクタ、最大 1.5A、低消費電力かつ静音冷却に最適

PWM 制御により、システム温度に基づいてファン速度を動的かつ精密に調整でき、効率的な冷却を実現しつつ、ノイズと消費電力を最小限に抑えることができます。

12V ファン ピン配置:

12V ファンコネクタ(2.54 mm)のピン配置は次のとおりです:

使用方法

手動 PWM 制御:

# Set fan speed (0-255)
sudo -i
echo 200 > /sys/bus/platform/devices/pwm-fan/hwmon/hwmon1/pwm1
注記

デフォルトのサーマルポリシーは /etc/nvpmodel.conf に事前設定されています。カスタムプロファイルについては、NVIDIA Jetson Linux Developer Guide を参照してください。

さらに、jtop ツールを使用してファン速度を手動で設定することもできます。

ターミナルで次のコマンドを入力して jtop をインストールできます。

sudo apt update
sudo apt install python3-pip -y
sudo pip3 install jetson-stats

その後、reComputer Mini を再起動します:

sudo reboot

jtop をインストールしたら、ターミナルで起動できます:

jtop

CAN

reComputer Robotics J501 には、4 つの独立した CAN インターフェース(CAN 0、CAN 1、CAN 2、CAN 3)が搭載されており、DI/DO インターフェースと J25 2x10P コネクタを共有しています。これらのインターフェースは Classic CAN と CAN FD の両方の通信プロトコルをサポートし、高い耐干渉性能とリアルタイムデータ伝送機能を備えているため、自動車電子機器、産業オートメーション、ロボティクスなどの産業用制御シナリオに適しています。

使用方法

これは CAN インターフェースの回路図です。

CAN 通信

このセクションでは、Jetson 上で CAN0↔CAN1 および CAN2↔CAN3 を接続し、Classic CAN モードと CAN‑FD モードの両方で、それぞれのペア間でデータを送受信する方法を示します。

チャンネル名インターフェース種別ピン名GPIO チップGPIO 番号終端抵抗制御
CAN0ネイティブPAA.04gpiochip14gpiochip1 line4 (PAA.04)
CAN1ネイティブPAA.07gpiochip17gpiochip1 line7 (PAA.07)
CAN2SPI-to-CAN-gpiochip210gpiochip2 line10
CAN3SPI-to-CAN-gpiochip212gpiochip2 line12

CAN0 および CAN1 の終端抵抗は、2 つのピンで制御できます。PAA.04(gpiochip1 line4 に位置)と PAA.07(gpiochip1 line7 に位置)です。

終端抵抗の制御は、次のルールに従います。

When `PAA.04 = 1`, the 120 Ω termination resistor of CAN0 is **disconnected**;  
when `PAA.04 = 0`, the 120 Ω termination resistor of CAN0 is **connected**.

When `PAA.07 = 1`, the 120 Ω termination resistor of CAN1 is **disconnected**;
when `PAA.07 = 0`, the 120 Ω termination resistor of CAN1 is **connected**.

gpiochip 1 上のピンを表示するには、次のコマンドを入力します:

gpioinfo gpiochip1

次のコマンドを参照して、PAA.04PAA.07 を 0 に設定します:

sudo gpioset --mode=wait gpiochip1 4=0
sudo gpioset --mode=wait gpiochip1 7=0

次のコマンドを参照して、PAA.04PAA.07 を 1 に設定します:

sudo gpioset --mode=wait gpiochip1 4=1
sudo gpioset --mode=wait gpiochip1 7=1

Classic CAN モード

次のスクリプトは、CAN0/CAN1 および CAN2/CAN3 間のループバック通信テストを実装しており、終端抵抗の有効化、ビットレートの設定、双方向データ送信を含みます。

配線図は以下のとおりです:

FromTo
CAN0_HCAN1_H
CAN0_LCAN1_L
CAN2_HCAN3_H
CAN2_LCAN3_L

配線図は以下のとおりです:

標準モードで CAN0↔CAN1 および CAN2↔CAN3 間のデータ送受信をテストするために、test_can.sh を作成します:

touch test_can.sh
sudo chmod +x test_can.sh
sudo ./test_can.sh

test_can.sh のスクリプトコードは次のとおりです:

test_can.sh
#!/bin/bash
set -e

PW="000000"

echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true

# Set socket buffer sizes
echo "$PW" | sudo -S sysctl -w net.core.rmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.rmem_default=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_default=524288

# Set bitrate, 1 Mbps
BITRATE=1000000
echo "$PW" | sudo -S ip link set can0 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can1 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can0 up
echo "$PW" | sudo -S ip link set can1 up

echo "$PW" | sudo -S ip link set can2 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can3 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can2 up
echo "$PW" | sudo -S ip link set can3 up

sleep 1

# Enable termination resistors
sudo pkill -f gpioset || true
gpioset --mode=time --sec=200000 gpiochip2 8=0 & # enable CAN1 120R
GPIO1_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 9=0 & # enable CAN0 120R
GPIO2_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 12=0 & # enable CAN3 120R
GPIO3_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 10=0 & # enable CAN2 120R
GPIO4_PID=$!

echo "Start candump on can0 & can1..."
candump can0 &
DUMP0_PID=$!
candump can1 &
DUMP1_PID=$!

echo "Start candump on can2 & can3..."
candump can2 &
DUMP2_PID=$!
candump can3 &
DUMP3_PID=$!

echo "Start cangen on can0 & can1 and can2 & can3 (bi-directional test)..."
# -g 10 sends one frame every 10 ms; adjust as needed
cangen can0 -g 10 &
GEN0_PID=$!
cangen can1 -g 10 &
GEN1_PID=$!
cangen can2 -g 10 &
GEN2_PID=$!
cangen can3 -g 10 &
GEN3_PID=$!

# Cleanup background processes on Ctrl+C
cleanup() {
echo
echo "Stopping CAN test..."
kill $GEN0_PID $GEN1_PID $DUMP0_PID $DUMP1_PID $GPIO1_PID $GPIO2_PID 2>/dev/null || true
kill $GEN2_PID $GEN3_PID $DUMP2_PID $DUMP3_PID $GPIO3_PID $GPIO4_PID 2>/dev/null || true
echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true
echo "Done."
}
trap cleanup INT TERM

# Wait for child processes (candump runs until you Ctrl+C)
wait
注記

CAN テストスクリプト内の PW を、ご自身の Jetson のパスワードに置き換えてください。

CAN0CAN1 間のデータ送受信が完了します:

CAN-FD モード

CAN FD は、より高いデータ伝送レートとより大きなデータフレーム長をサポートします。以下のスクリプトは、CAN FD ループバックテストを実装します。

CAN-FD モードで CAN0↔CAN1 および CAN2↔CAN3 間のデータ送受信をテストするために、test_canfd.sh を作成します:

touch test_canfd.sh
sudo chmod +x test_canfd.sh
sudo ./test_canfd.sh

test_canfd.sh のスクリプトコードは次のとおりです:

test_canfd.sh
#!/bin/bash
set -e

PW="000000"

echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true

# Set socket buffers
echo "$PW" | sudo -S sysctl -w net.core.rmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.rmem_default=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_default=524288

# ---- CAN-FD parameters ----
BITRATE=500000 # Arbitration (nominal) bitrate
DBITRATE=5000000 # Data phase bitrate (FD fast mode)

# Configure CAN-FD: arbitration bitrate + data bitrate + FD on + error reporting + auto restart
echo "$PW" | sudo -S ip link set can0 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can1 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can2 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can3 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100

echo "$PW" | sudo -S ip link set can0 up
echo "$PW" | sudo -S ip link set can1 up
echo "$PW" | sudo -S ip link set can2 up
echo "$PW" | sudo -S ip link set can3 up

sleep 1

# Enable termination resistors
sudo pkill -f gpioset || true
gpioset --mode=time --sec=200000 gpiochip2 8=0 & # enable CAN1 120R
GPIO1_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 9=0 & # enable CAN0 120R
GPIO2_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 12=0 & # enable CAN3 120R
GPIO3_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 10=0 & # enable CAN2 120R
GPIO4_PID=$!

echo "Start candump on can0 & can1..."
candump can0 &
DUMP0_PID=$!
candump can1 &
DUMP1_PID=$!

echo "Start candump on can2 & can3..."
candump can2 &
DUMP2_PID=$!
candump can3 &
DUMP3_PID=$!

echo "Start cangen on can0 & can1 and can2 & can3 (bi-directional test)..."
# -g 10 sends one frame every 10 ms; adjust as needed
cangen can0 -g 10 &
GEN0_PID=$!
cangen can1 -g 10 &
GEN1_PID=$!
cangen can2 -g 10 &
GEN2_PID=$!
cangen can3 -g 10 &
GEN3_PID=$!

# Cleanup background processes on Ctrl+C
cleanup() {
echo
echo "Stopping CAN-FD test..."
kill $GEN0_PID $GEN1_PID $DUMP0_PID $DUMP1_PID $GPIO1_PID $GPIO2_PID 2>/dev/null || true
kill $GEN2_PID $GEN3_PID $DUMP2_PID $DUMP3_PID $GPIO3_PID $GPIO4_PID 2>/dev/null || true
echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true
echo "Done."
}
trap cleanup INT TERM

# Wait for child processes (candump will run until you Ctrl+C)
wait
注記

CAN テストスクリプト内の PW を、ご自身の Jetson のパスワードに置き換えてください。

CAN0↔CAN1 および CAN2↔CAN3 間のデータ送受信が完了します:

DI/DO

reComputer Robotics J501 の DI/DO インターフェースは、J25 2x10P コネクタに統合されており、CAN インターフェースとインターフェースを共有しています。4 チャンネルのデジタル入力と 4 チャンネルのデジタル出力をサポートし、安定した信号伝送と産業グレードの電圧適応を備えているため、デジタルセンサー、リレー、その他の周辺機器の接続に適しています。

ハードウェア接続

デジタル入力(DI)チャネル

チャンネル名電圧特性GPIO ラベルピン名GPIO チップGPIO 番号
DI_12V_112V 入力適応DI_1_GPIO17PP.04gpiochip096
DI_12V_212V 入力適応DI_1_GPIO18PQ.04gpiochip0104
DI_12V_312V 入力適応DI_1_GPIO19PN.02gpiochip086
DI_12V_412V 入力適応DI_1_GPIO33PM.07gpiochip083

デジタル出力(DO)チャネル

チャンネル名電圧特性GPIO ラベルピン名GPIO チップGPIO 番号追加情報
DO_40V_1オープンドレイン出力;プルアップされていないときは約 0V(Low)、プルアップされているときは 12V(High)DO_1_GPIOPAA.04gpiochip14対応番号:320
DO_40V_2オープンドレイン出力;プルアップされていないときは約 0V(Low)、プルアップされているときは 12V(High)DO_2_GPIOPAA.07gpiochip17対応番号:323
DO_40V_3オープンドレイン出力;プルアップされていないときは約 0V(Low)、プルアップされているときは 12V(High)DO_3_GPIOPBB.01gpiochip19対応番号:325
DO_40V_4オープンドレイン出力;プルアップされていないときは約 0V(Low)、プルアップされているときは 12V(High)DO_4_GPIOPBB.00gpiochip18対応番号:324

J25 コネクタ上の DI/DO インターフェースの主要なピン定義は次のとおりです(ピン番号は物理コネクタに対応します):

ピン番号機能ラベル説明
1DI_12V_112V デジタル入力チャネル 1
3DI_12V_212V デジタル入力チャネル 2
5DI_12V_312V デジタル入力チャネル 3
7DI_12V_412V デジタル入力チャネル 4
9GND_DIデジタル入力チャネル用 GND
2DO_40V_140V デジタル出力チャネル 1
4DO_40V_240V デジタル出力チャネル 2
6DO_40V_340V デジタル出力チャネル 3
8DO_40V_440V デジタル出力チャネル 4
10GND_DOデジタル出力チャネル用 GND
注記

完全なピン配置(CAN インターフェースを含む)については、誤接続を避けるために reComputer Robotics J501 のハードウェアドキュメントを参照してください。

使用手順

デジタル出力(DO)の操作

DO インターフェースはオープンドレイン出力を採用しています。コマンドを使用して出力レベル(高/低)を設定し、リレーや LED などの周辺機器を制御できます。

DO チャンネルを有効化するには、次のコマンドを実行します(外部プルアップ抵抗および 12V 電源によって 12V を出力):

# Enable DO_40V_1 (gpiochip1 4)
sudo gpioset --mode=wait 1 4=1

# Enable DO_40V_2 (gpiochip1 7)
sudo gpioset --mode=wait 1 7=1

# Enable DO_40V_3 (gpiochip1 9)
sudo gpioset --mode=wait 1 9=1

# Enable DO_40V_4 (gpiochip1 8)
sudo gpioset --mode=wait 1 8=1

DO を High に引き上げる前:

DO を High に引き上げた後:

DO チャンネルを無効化するには、次のコマンドを実行します(出力約 0V):

# Disable DO_40V_1 (gpiochip1 4)
sudo gpioset --mode=wait 1 4=0

# Disable DO_40V_2 (gpiochip1 7)
sudo gpioset --mode=wait 1 7=0

# Disable DO_40V_3 (gpiochip1 9)
sudo gpioset --mode=wait 1 9=0

# Disable DO_40V_4 (gpiochip1 8)
sudo gpioset --mode=wait 1 8=0

デジタル入力(DI)の操作

gpioget コマンドを使用して DI チャンネルの入力レベルを読み取ります(戻り値 1 = 高レベル、0 = 低レベル)ことで、周辺機器の状態を取得できます。

DI チャンネルレベルを読み取るコマンドは次のとおりです:

# Read DI_12V_1 (gpiochip0 96) status
gpioget gpiochip0 96

# Read DI_12V_2 (gpiochip0 104) status
gpioget gpiochip0 104

# Read DI_12V_3 (gpiochip0 86) status
gpioget gpiochip0 86

# Read DI_12V_4 (gpiochip0 83) status
gpioget gpiochip0 83

SPI

ハードウェア接続

使用手順

Dupont ケーブルを使用して、対象 SPI チャンネルのコアピンを接続します(/dev/spidev2.0 を例とします): SPI2.0 の MOSI ピンをその MISO ピンに接続します(データのループバック送受信を実現)。

配線図は次のとおりです:

注記

SPI を使用するには、上図のようにドライバーを使ってデバイスの側面カバーを取り外してください。

ステップ 1: SPI カーネルモジュールのロード(前提条件) SPI インターフェースを操作する前に、spidev カーネルモジュールがロードされていることを確認します(デフォルトのシステムでは事前にロードされている場合がありますが、手動で確認することを推奨します):

sudo modprobe spidev
注記

コマンド実行時にエラーメッセージが表示されなければ、モジュールは正常にロードされています。すでにロード済みの場合、コマンドは何も情報を返しませんが、これは正常な動作です。

ステップ 2: SPI デバイスノードの確認 ターミナルで次のコマンドを入力し、reComputer Robotics J501 の SPI インターフェースにマッピングされたデバイス名を確認します:

ls /dev/spidev*

デバイスノードが表示されない場合は、spidev モジュールが正常にロードされていないことを意味します。sudo modprobe spidev を再実行し、システムログを確認してトラブルシューティングを行ってください。

ステップ 3: SPI テストコードの取得とコンパイル GitHub から spidev-test テストコードを取得し、コンパイルします:

git clone https://github.com/rm-hull/spidev-test
cd spidev-test
gcc spidev_test.c -o spidev_test

ステップ 4: SPI テストプログラムの実行 ターミナルで次のコマンドを入力して SPI テストプログラムを実行します(/dev/spidev2.0 を例とします):

sudo ./spidev_test -v -D /dev/spidev2.0 -s 100000

ステップ 5: テスト結果の確認 テストコマンドを実行した後、ターミナル上で SPI2.0 インターフェースのデータ送受信状況を確認できます。主な出力は次のとおりです:

重要な判定基準: TX(送信)データと RX(受信)データが一致していれば、SPI ループバックテストが成功し、SPI インターフェース機能が正常であることを示します。

UART

reComputer Robotics J501 には、2 つの独立した UART インターフェース(UART1 および UART2)が搭載されており、RS232、RS422、RS485 通信モードをサポートし、安定した信号伝送と周辺機器との高い互換性を備えています。

ハードウェア接続

UART インターフェースチャンネル

チャンネル名デバイスノード対応モードデフォルトボーレートGPIO 有効化コマンドモード切替方法
UART1 (DB9-1)/dev/ttyTHS1RS232, RS422, RS485RS232: 115200 bps; RS422/RS485: 9600 bpsgpioset --mode=wait gpiochip0 2=0SW3 ディップスイッチ(8 ピン DIP)
UART2 (DB9-2)/dev/ttyTHS4RS232(デフォルト)115200 bpsgpioset --mode=wait gpiochip2 15=0RS232 固定(切替不可)

ピン配置定義(DB9 コネクタ)

各 DB9 ピンの機能は通信モードによって異なります。正確な配線のため、以下の表を参照してください(ピン番号は標準的な DB9 オスコネクタ仕様に従います):

DB9 ピン番号RS232 モード機能RS422 モード機能RS485 モード機能
1-TXD-(送信データ -)Data-(差動データ -)
2RXD(受信データ)TXD+(送信データ +)Data+(差動データ +)
3TXD(送信データ)RXD+(受信データ +)-
4-RXD-(受信データ -)-
5GND(グラウンド)GND(グラウンド)GND(グラウンド)
6---
7RTS(送信要求)--
8CTS(送信許可)--
9---

モード設定(SW3 ディップスイッチ)

モード切替に対応しているのは UART1(DB9-1)のみで、SW3 ディップスイッチで設定します(UART2 は RS232 固定)。スイッチは 8 ピン DIP タイプで、回路図上では MODE_0、MODE_1、MODE_2 として示されるコア設定ピンがあります。

インターフェースは次の図のようになっています:

設定ルール

動作モードディップスイッチの組み合わせ(MODE_2, MODE_1, MODE_0)スイッチ操作
RS2320(OFF), 0(OFF), 1(ON)MODE_0: ON に切り替え; MODE_1/MODE_2: OFF のまま
RS4220(OFF), 0(OFF), 0(OFF) または 1(ON), 0(OFF), 0(OFF)MODE_0/MODE_1: OFF のまま; MODE_2: 任意(ON/OFF)
RS4850(OFF), 1(ON), 0(OFF) または 1(ON), 1(ON), 0(OFF)MODE_1: ON に切り替え; MODE_0/MODE_2: 任意(ON/OFF)
注記

ハードウェア接続が完了したら、ターミナルソフトウェア(例: CuteCom)を使用して UART 通信機能をテストします。CuteCom がインストールされていない場合は、sudo apt-get install cutecom を実行してインストールしてください。UART チャンネルが GPIO コマンドによって有効化されていることを確認してください。

使用手順

GPIO 有効化コマンド

接続前に、ターミナルで GPIO 有効化コマンドを実行し、対応する UART チャンネルをアクティブにします:

# Enable UART1 (ttyTHS1)
sudo gpioset --mode=wait gpiochip0 2=0

# Enable UART2 (ttyTHS4)
sudo gpioset --mode=wait gpiochip2 15=0

RS232 モードテスト

ここでは、USB から RS232 へのアダプタを使用してインターフェースをテストできます。テストには UGREEN USB to RS232 Adapter を使用しました。

配線図は次のとおりです:

ステップ 1: CuteCom の起動 sudo cutecom を実行して CuteCom ターミナルソフトウェアを起動します。

ステップ 2: シリアルポートパラメータの設定 シリアルポートを次のパラメータで設定します:

  • Device: /dev/ttyTHS1(UART1)または /dev/ttyTHS4(UART2)
  • ボーレート: 115200 bps
  • データビット: 8、パリティ: なし、ストップビット: 1、フロー制御: なし

ステップ 3: シリアルポートを開く "Open Device" をクリックしてシリアルポートを開きます。

ステップ 4: テストデータの送信 テストデータ(例: "232 test from jetson")を送信し、周辺機器側でのデータ受信を確認します。

RS485 モードテスト

ここでは、USB から RS485 へのアダプタを使用してインターフェースをテストできます。テストには DTech USB to RS485 Adapter を使用しました。

配線図は次のとおりです:

ステップ 1: CuteCom の起動 sudo cutecom を実行して CuteCom ターミナルソフトウェアを起動します。

ステップ 2: シリアルポートパラメータの設定 シリアルポートを次のパラメータで設定します:

  • Device: /dev/ttyTHS1
  • ボーレート: 9600 bps
  • データビット: 8、パリティ: なし、ストップビット: 1、フロー制御: なし

ステップ 3: シリアルポートを開く "Open Device" をクリックしてシリアルポートを開きます。

ステップ 4: テストデータの送信 テストデータ(例:「485 test from jetson」)を送信し、周辺機器からのデータ受信を確認します。

RS422 モードテスト

ここでは USB から RS422 へのアダプタを使用してインターフェースをテストできます。ここではテスト用に DTech USB to RS485 Adapter を使用しました。

配線図は以下のとおりです:

ステップ 1: CuteCom を起動する sudo cutecom を実行して CuteCom ターミナルソフトウェアを起動します。

ステップ 2: シリアルポートパラメータを設定する シリアルポートを次のパラメータで設定します:

  • デバイス: /dev/ttyTHS1
  • ボーレート: 9600 bps
  • データビット: 8、パリティ: なし、ストップビット: 1、フロー制御: なし

ステップ 3: シリアルポートを開く "Open Device" をクリックしてシリアルポートを開きます。

ステップ 4: テストデータを送信する テストデータ(例:「422 test from jetson」)を送信し、周辺機器からのデータ受信を確認します。

RTC

reComputer Robotics J501 には、バッテリバックアップ付きのハードウェア RTC が搭載されており、正確な時刻管理が可能です。RTC にバックアップ電源を供給する方法は 2 つあります:

  1. CR1220 コイン電池ホルダ(J14)を使用する
  2. 外部電源接続用の RTC 2 ピンヘッダ - J4 を使用する

ハードウェア接続

方法 1: CR1220 コイン電池ホルダを使用する

3V の CR1220 コイン電池を、下図のようにボード上の RTC ソケットに接続します。電池のプラス(+)側が上向きになっていることを確認してください。

方法 2: RTC 2 ピンヘッダを使用する

RTC 2 ピンヘッダは、RTC に外部電源を接続するための別の方法を提供します。

使用手順

ステップ 1. 上述のいずれかの方法で RTC バッテリを接続します。

ステップ 2. reComputer Robotics J501 の電源を入れます。

ステップ 3. Ubuntu デスクトップで右上のドロップダウンメニューをクリックし、Settings > Date & Time に移動します。Ethernet ケーブルでネットワークに接続し、Automatic Date & Time を選択して日付と時刻を自動取得します。

注記

Ethernet 経由でインターネットに接続していない場合は、ここで日付と時刻を手動で設定できます。

ステップ 4. ターミナルウィンドウを開き、以下のコマンドを実行してハードウェアクロックの時刻を確認します:

cat /sys/devices/platform/bpmp/bpmp\:i2c/i2c-4/4-003c/nvvrs-pseq-rtc/rtc/rtc0/time

ステップ 5. ネットワーク接続を切断してデバイスを再起動します。システムの電源が切れても時刻が保持され、正常に動作していることが分かります。

ディスプレイ

Robotics J501 には、高解像度ディスプレイ出力用の HDMI が搭載されています。

拡張ポート

Robotics J501 キャリアボードには、GMSL 拡張ボード用のカメラ拡張ヘッダが搭載されています。最大 4 台の GMSL カメラを同時に接続して動作させることができます。

ハードウェア接続

以下は、Robotics J501 キャリアボードの GMSL カメラ拡張ボード接続スロットです(事前に拡張ボードを用意しておく必要があります):

以下は、すでにサポートしている GMSL カメラモデルです:

使用手順

注記

GMSL 機能を有効にする前に、GMSL 拡張ボードドライバを含む JetPack バージョンをインストールしていることを確認してください。

Jetson IO ファイルを設定する

sudo /opt/nvidia/jetson-io/jetson-io.py
注記

オーバーレイファイルは全部で 3 つあり、それぞれ Seeed GMSL 1X4 3G、Seeed GMSL 1X4 6G、Seeed GMSL 1X4、および Orbbec Gemini 335Lg です。これらはそれぞれ、SG3S の 3G カメラ、SG2 および SG8S の 6G カメラ、そして Orbbec のカメラに対応しています。図 3 に示すように、お使いのカメラのモデルに応じて io ファイルを設定してください。

ステップ 2. ビデオインターフェース設定ツールをインストールします。

sudo apt update
sudo apt install v4l-utils wmctrl

SGxxx シリーズのカメラを使用する

ステップ 1. フレーム同期モードを設定します(デフォルトでは有効になっていません!)。

備考

ここでは、異なるモデルおよび解像度のカメラを設定する方法を示します。

#enables frame synchronization
v4l2-ctl -d /dev/video0 --set-ctrl=trig_mode=1
#Set the frame rate of the camera
v4l2-ctl -V --set-fmt-video=width=1920,height=1536 -c sensor_mode=0 --stream-mmap -d /dev/video0
#Set the camera format
v4l2-ctl -V --set-fmt-video=width=1920,height=1536 -c sensor_mode=0 -d /dev/video0
注記

trig_mode = 1 はフレーム同期を有効にし、trig_mode = 0 はフレーム同期を無効にします。デフォルト設定はフレーム同期を無効にすることです。

--set-fmt-video は、接続されているカメラに基づいて選択された解像度に従います。現在、3 つの sensor_mode オプションがあり、それぞれ異なる解像度に対応しています。

  • sensor_mode=0 -------> YUYV8_1X16/1920x1536
  • sensor_mode=1 -------> YUYV8_1X16/1920x1080
  • sensor_mode=2 -------> YUYV8_1X16/3840x2160

ステップ 2. カメラを起動します。

gst-launch-1.0 \
v4l2src device=/dev/video0 ! \
video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video1 ! \
video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video2 ! \
video/x-raw,format=YUY2,width=1536,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video3 ! \
video/x-raw,format=YUY2,width=3840,height=2160,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます。製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートをご用意しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルを提供しています。

Loading Comments...