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

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
  • 4系統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
JetPack 6.x

Jetpack イメージの準備

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

Jetpack バージョンJetson モジュール GMSL ダウンロードリンク1SHA256
6.2.1 AGX Orin 64GBDownload46167c63566fa07d9882be338becd44
7021c8fc0a73da18d0291c414cf5c6f4a
AGX Orin 32GBDownloade868fd8c7ad05d3acc8c9808f42e1835
28f11df14f48cb6ae16464adb4f23d1f
危険

Jetpack6 のイメージファイルは約 14.2GB あり、ダウンロードにはおよそ60分かかります。完了するまでお待ちください。

備考

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

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

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

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

備考

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

手順

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

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

Step 3. 電源を接続します。

Step 4. リカバリーボタンを離します。

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

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

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

Jetson へのフラッシュ

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

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

Step 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 分かかる場合があります。

Step 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 の読み書き速度をテストします。

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

mkdir ssd
touch ~/ssd/test

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

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

Step 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 セルラーモジュールをサポートします。

ハードウェア接続

ヒント

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

使用手順

Step 1. ハードウェア認識を確認します

lsusb 

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

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

lsmod | grep option 

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

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

sudo apt install modemmanager 
sudo systemctl restart ModemManager

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

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

mmcli -L 

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

Step 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 の自動設定を使用します。

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

sudo nmcli con up "gsm" 

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

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

mmcli -L 

Step 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 リンク時に点灯
  • Yellow 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 は、4 つの USB 3.2 Type-A ポート(内部 USB 3.1 Gen1 ハブ経由で、高速な周辺機器、ストレージデバイス、カメラを接続するために最大 5Gbps のデータレートをサポート)と、1 つの 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 側で入出力のデバッグ情報をモニタリングできます。

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

Step 2. Serial ツールを選択します。

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

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

Fan

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

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

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

12V Fan ピン配置:

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 インターフェースはオープンドレイン出力を採用しています。コマンドによって出力レベル(High/Low)を設定し、リレーや 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:

プルアップ後の DO:

次のコマンドを実行して 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 = High レベル、0 = Low レベル)ことで、周辺機器の状態を取得します。

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

ハードウェア接続

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 ディップスイッチ)

SW3 ディップスイッチによるモード切替に対応しているのは UART1(DB9-1)のみです(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 有効化コマンド

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

# 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: シリアルポートパラメータの設定 シリアルポートを次のパラメータで設定します:

  • デバイス: /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: シリアルポートパラメータの設定 シリアルポートを次のパラメータで設定します:

  • デバイス: /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

Step 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 ファイルを設定してください。

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

sudo apt update
sudo apt install v4l-utils wmctrl

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

step 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

step 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...