Pular para o conteúdo principal

Hardware do Robotics J501 e Introdução

O reComputer Robotics J501 é uma placa carrier de borda de IA de alto desempenho projetada para aplicações avançadas de robótica e industriais. Compatível com módulos NVIDIA Jetson AGX Orin (32GB/64GB) no modo MAXN, oferece até 275 TOPS de desempenho de IA.

Equipado com amplas opções de conectividade — incluindo 1x 10GbE e 4x portas Ethernet 1GbE, slots duplos M.2 Key M para SSDs NVMe, slots M.2 para módulos 5G e Wi-Fi/BT, múltiplas portas USB 3.0, quatro interfaces CAN (2 nativas + 2 SPI-para-CAN), expansão de câmera GMSL2 e E/S abrangente incluindo DI/DO, I2S, UART e RS485 — ele atua como um poderoso cérebro robótico para fusão de múltiplos sensores complexos e processamento de IA em tempo real.

Pré-instalado com JetPack 6.2.1 e Linux BSP, garante uma implantação perfeita. Com suporte a frameworks como NVIDIA Isaac ROS, Hugging Face, PyTorch e ROS 2/1, o J501 conecta a tomada de decisão orientada por grandes modelos de linguagem ao controle físico de robôs, acelerando o desenvolvimento de robôs autônomos com interfaces prontas para uso e frameworks de IA otimizados.

Principais Recursos

  • IA de alto desempenho: Até 275 TOPS com módulos Jetson AGX Orin 32/64GB, GPU Ampere e mecanismos DLA
  • Conectividade rica: Duplo M.2 Key M (NVMe); Key E (WiFi/BT) + Key B (5G); 1x 10GbE + 4x 1GbE; 3x USB 3.0; 2x USB-C
  • Quad CAN-FD: 2x interfaces nativas + 2x SPI-para-CAN com isolamento elétrico
  • Visão GMSL2: Interface GMSL2 única (1x) para conexão de câmera em alta velocidade
  • Design industrial: Entrada DC de 19-48V; operação de -10~60°C; interfaces isoladas; JetPack 6.2.1 pré-instalado
  • Pronto para robótica: Suporte a ROS 2/1, Isaac ROS; DI/DO, I2S, UART, RS485; otimizado para AMR e automação

Especificações

Módulo de Sistema Jetson AGX Orin
EspecificaçõesreComputer Robotics J5011reComputer Robotics J5012
MóduloNVIDIA Jetson AGX Orin 32GBNVIDIA Jetson AGX Orin 64GB
Desempenho de IA200 TOPS275 TOPS
GPU1792 núcleos NVIDIA Ampere @ 930 MHz2048 núcleos NVIDIA Ampere @ 1.3 GHz
CPU8 núcleos Arm Cortex-A78AE @ 2.0 GHz12 núcleos Arm Cortex-A78AE @ 2.2 GHz
Memória32GB 256-bit LPDDR5 @ 204.8 GB/s64GB 256-bit LPDDR5 @ 204.8 GB/s
Codificador de Vídeo1x 4K60 / 3x 4K30 / 6x 1080p60 / 12x 1080p30 (H.265)2x 4K60 / 6x 4K30 / 8x 1080p60 / 16x 1080p30 (H.265)
Decodificador de Vídeo1x 8K30 / 2x 4K60 / 4x 4K30 / 9x 1080p60 / 18x 1080p30 (H.265)1x 8K30 / 3x 4K60 / 7x 4K30 / 11x 1080p60 / 22x 1080p30 (H.265)
Câmera CSIAté 6 câmeras (16 via canais virtuais)
16 pistas MIPI CSI-2
D-PHY 2.1 (até 40Gbps) / C-PHY 2.0 (até 164Gbps)
Mecânico100mm x 87mm
Conector Molex Mirror Mezz de 699 pinos
Placa de Transferência Térmica Integrada
Placa Carrier
Armazenamento2x M.2 Key-M (SSD NVMe 2280)
1x M.2 Key-B (para módulos 4G/5G)
Rede1x M.2 Key-E (WiFi/BT)
1x RJ45 10GbE + 4x RJ45 1GbE
USB3x USB 3.0 Tipo-A
1x USB 3.0 Tipo-C (Recovery)
1x USB 2.0 Tipo-C (Debug UART)
DI/DO/CAN1x bloco de terminais 2x10P 3,81mm - 4x DI @12V + 4x DO @40V + 4x CAN (suporta CAN-FD, eletricamente isolado)
GMSL2x Conector Mini-Fakra (Para 8x Câmeras GMSL2) (opcional)
Serial2x DB9 (RS232/422/485)
Display1x HDMI 2.1
Ventoinha1×12 V (2,54 mm), 1×5 V (1,25 mm JST)
Botão1x Recovery + 1x Reset
LED3x LED (PWR, SSD e LED de Usuário)
RTC1x suporte para bateria CR1220, 1x conector RTC de 2 pinos
Entrada de Energia19-48V DC via bloco de terminais 5,08mm (adaptador de energia não incluído)
Consumo de EnergiaMódulo Jetson AGX Orin: Até 60W (modo MAXN)
Pico total do sistema: 75W (incluindo periféricos)
SoftwareJetpack 6.2.1
Mecânico

Dimensões: 210mm x 180mm x 87mm (com suportes)
Peso: 200g
Montagem: Mesa / Parede / Trilho DIN (suporte DIN incluído nos acessórios)
Temperatura de Operação: -10℃~60℃ (25W) / -10℃~55℃ (MAXN)

Garantia2 Anos
CertificaçãoRoHS, REACH, CE, FCC, UKCA, KC

Especificações da Placa de Extensão GMSL (Opcional)

DesserializadorMAX96712
Interface GMSL2x Conector Robotics-Fakra Macho
Entrada GMSLAté 8x Câmeras GMSL2
Método de ConexãoCabo GMSL2 Fakra 1-para-4 M-M
Recurso da Interface POCSuporta transmissão simultânea de energia e dados

Visão Geral do Hardware

📦 Gravar o Sistema Operacional JetPack

Módulo Suportado

Pré-requisitos

  • PC host com Ubuntu
  • reComputer Robotics J501
  • Cabo de transmissão de dados USB Tipo-C
info

Recomendamos que você use dispositivos host Ubuntu físicos em vez de máquinas virtuais. Consulte a tabela abaixo para preparar a máquina host.

Versão do JetPack Versão do Ubuntu (Computador Host)
18.04 20.04 22.04
JetPack 6.x

Preparar a Imagem do Jetpack

Aqui, precisamos baixar a imagem do sistema para o nosso PC com Ubuntu correspondente ao módulo Jetson que estamos usando:

Versão do JetpackMódulo Jetson GMSL Link de Download1SHA256
6.2.1 AGX Orin 64GBDownloadF95E91C3BFB00D50EB999383F85949B4
AGX Orin 32GBDownloade868fd8c7ad05d3acc8c9808f42e1835
28f11df14f48cb6ae16464adb4f23d1f
perigo

O arquivo de imagem do Jetpack6 tem aproximadamente 14,2GB de tamanho e deve levar cerca de 60 minutos para ser baixado. Aguarde gentilmente até que o download seja concluído.

info

Para verificar a integridade do firmware baixado, você pode comparar o valor de hash SHA256.

Em uma máquina host Ubuntu, abra o terminal e execute o comando sha256sum <File> para obter o valor de hash SHA256 do arquivo baixado. Se o hash resultante corresponder ao hash SHA256 fornecido no wiki, isso confirma que o firmware que você baixou está completo e intacto.

⚙️ Todos os arquivos .dts e outros códigos-fonte das placas carrier Jetson da SEEED podem ser baixados em Linux_for_Tegra

Entrar no modo Force Recovery

info

Antes de prosseguirmos para as etapas de instalação, precisamos garantir que a placa esteja em modo force recovery.

Passo a passo

Passo 1. Conecte um cabo USB Type-C de transmissão de dados entre a porta USB2.0 DEVICE e o PC host com Ubuntu.

Passo 2. Use um pino e insira no orifício RECOVERY para pressionar o botão de recuperação e mantenha-o pressionado.

Passo 3. Conecte a fonte de alimentação.

Passo 4. Solte o botão de recuperação.

Passo 5. No PC host Linux, abra uma janela do Terminal e insira o comando lsusb. Se o conteúdo retornado tiver uma das seguintes saídas de acordo com o Jetson SoM que você usa, então a placa está em modo force recovery.

  • Para AGX Orin 32GB: 0955:7223 NVidia Corp
  • Para AGX Orin 64GB: 0955:7023 NVidia Corp

A imagem abaixo é para AGX Orin 32GB:

Gravar no Jetson

Passo 1: Extraia o arquivo de imagem baixado:

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

Passo 2: Execute o seguinte comando para gravar o sistema JetPack no SSD NVMe:

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

Você verá a seguinte saída se o processo de gravação for bem-sucedido

nota

O comando de gravação pode levar de 2 a 10 minutos.

Passo 3: Conecte o Robotics J501 a um monitor usando o adaptador PD para HDMI para conectar a um monitor que suporte entrada HDMI, ou conecte diretamente a um monitor que suporte entrada PD usando o cabo PD, e conclua a configuração inicial:

info

Conclua a Configuração do Sistema de acordo com suas necessidades.

🔌 Uso das interfaces

A seguir serão apresentadas as várias interfaces da placa Robotics J501 e como usá-las.

M.2 Key M

A J501 inclui dois slots M.2 Key M que suportam SSDs NVMe PCIe Gen4x4 para expansão de armazenamento em alta velocidade.

SSDs compatíveis são os seguintes

Conexão de hardware

Instruções de uso

Abra o terminal no dispositivo Jetson e insira o seguinte comando para testar a velocidade de leitura e gravação do SSD.

Passo 1. Crie o diretório e o arquivo de teste:

mkdir ssd
touch ~/ssd/test

Passo 2. Teste o desempenho de gravação:

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

Passo 3. Verifique as informações do SSD:

nvme list
perigo

Execute o comando sudo rm /home/$USER/ssd/test para excluir os arquivos de cache após a conclusão do teste.

M.2 Key E (WiFi/BT)

O slot M.2 Key E suporta módulos Wi-Fi 6 e Bluetooth 5.x para conectividade sem fio.

Conexão de hardware

dica

Observação: Antes de usar a interface, você deve remover os parafusos da carcaça e instalar o módulo correspondente conforme mostrado na figura abaixo.

Instruções de uso

Teste de desempenho: Para testar o desempenho do Wi-Fi, use o seguinte comando (substitua o endereço IP pelo do seu servidor de teste):

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

A funcionalidade Bluetooth está disponível por meio do slot M.2 Key E. Teste de Bluetooth:

M.2 Key B (Módulo 4G/5G)

O slot M.2 Key B suporta módulos celulares 4G/5G com suporte a Nano SIM.

Conexão de hardware

dica

Observação: Antes de usar a interface, você deve remover os parafusos da carcaça e instalar o módulo correspondente conforme mostrado na figura abaixo.

Instruções de uso

Passo 1. Verificar reconhecimento de hardware

lsusb 

Este comando exibe uma lista de todos os dispositivos USB conectados ao sistema, juntamente com seu fabricante (ID), tipo e outras informações. Por exemplo, a saída pode mostrar um dispositivo da Quectel Wireless Solutions Co., Ltd. EM12-G, indicando que o módulo 5G está presente.

Passo 2. Confirmar carregamento do driver É essencial garantir que o driver option, que é necessário para o módulo 5G, esteja carregado. Podemos usar o comando lsmod para verificar.

lsmod | grep option 

Se o driver option for carregado com sucesso, informações relevantes sobre o driver serão exibidas na saída.

Passo 3. Configurar o ModemManager ModemManager é uma ferramenta para gerenciar dispositivos modem, e precisa ser instalado e reiniciado.

sudo apt install modemmanager 
sudo systemctl restart ModemManager

O comando apt install é usado para instalar o pacote ModemManager, enquanto systemctl restart reinicia o serviço ModemManager para garantir que as novas configurações entrem em vigor.

Passo 4. Verificar identificação do módulo Podemos usar o comando mmcli -L para verificar se o ModemManager consegue identificar corretamente o módulo 5G.

mmcli -L 

Se o módulo 5G for reconhecido, será exibida uma saída semelhante a /org/freedesktop/ModemManager1/Modem/0, indicando o caminho para o dispositivo modem detectado.

Passo 5. Definir o APN APN (Access Point Name) é crucial para conectar um dispositivo móvel à rede. Usaremos o comando nmcli para criar um perfil de portadora. Tomando a China Mobile como exemplo, podemos criar um arquivo de configuração com os seguintes comandos:

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

Este comando adiciona uma nova conexão do tipo GSM (Global System for Mobile Communications), especificando o APN como "CMNET" e usando configuração IPv4 automática.

Passo 6. Ativar a conexão Após criar o perfil de portadora, precisamos ativar a conexão.

sudo nmcli con up "gsm" 

Este comando ativa a conexão GSM e, se for bem-sucedido, uma mensagem de confirmação será exibida.

Passo 7. Re-verificar identificação do módulo Execute novamente o comando mmcli -L para garantir que o módulo continue sendo reconhecido após a configuração do APN.

mmcli -L 

Passo 8. Verificar status do módulo Por fim, podemos usar o comando mmcli -m 0 para ver informações detalhadas sobre o módulo, como alocação de IP, operadora e status da conexão de rede.

mmcli -m 0 

Este comando fornece detalhes abrangentes sobre o módulo 5G, incluindo seu fabricante, modelo, tecnologias de rede suportadas e atuais, status do dispositivo e operadoras de rede conectadas.

Ethernet

O Robotics J501 fornece 1x 10GbE (nativo) e 4x 1GbE (via switch PCIe) portas RJ45. A porta 10GbE possui PHY TI TQSPH-10G, suportando cinco velocidades: 10/5/2.5/1/0.1 GbE. As portas 1GbE suportam velocidades de 10/100/1000M.

Indicadores LED por porta:

  • LED verde: ACESO para link 10G/5G/2.5G/1000M
  • LED amarelo: Pisca para atividade de rede

Para testar a velocidade da porta Ethernet, use iperf3 da seguinte forma:

iperf3 -c <server_ip> -B <bind_ip>
info

<server_ip> é o endereço IP do servidor iperf3. O cliente se conectará a esse servidor para realizar um teste de largura de banda. <bind_ip> vincula o endereço IP local especificado como a origem do tráfego de teste.

LED

O J501 possui vários LEDs de status:

  • PWR LED: Status de energia (verde)
  • ACT LED: Atividade do sistema (amarelo)
  • USR LED: Controle via GPIO

Instruções de uso

A seguir é demonstrado como controlar os LEDs USER para ficarem verdes, vermelhos ou azuis.

#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

O efeito do controle do LED é mostrado na figura abaixo:

USB

O Robotics J501 oferece 4 portas USB 3.2 Type-A (por meio de um hub interno USB 3.1 Gen1, suportando taxas de dados de até 5Gbps para conexão de periféricos de alta velocidade, dispositivos de armazenamento ou câmeras) e 1 porta USB 2.0 Type-C de depuração (que funciona como um console serial para acessar logs do sistema, depurar problemas de boot e realizar atualizações de firmware).

Teste de velocidade USB-A

Crie um script para testar a velocidade do dispositivo USB:

vim test_usb.sh

Cole o seguinte conteúdo:

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

Torne o script executável e teste:

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
nota

Primeiro confirme o ponto de montagem real do seu dispositivo USB usando o comando df -h ou lsblk!

Porta USB 2.0 Type-C

Usando esta porta serial, por meio do cabo de dados USB-C, você pode monitorar no PC as informações de depuração de entrada e saída.

Passo 1. Abra a ferramenta de porta serial (aqui usamos a ferramenta MobaXterm como exemplo) e crie uma nova sessão.

Passo 2. Selecione a ferramenta Serial.

Passo 3. Selecione a porta serial correspondente, defina a taxa de baud para 115200 e clique em "OK".

Passo 4. Faça login no seu reComputer Super com o nome de usuário e a senha.

Ventoinha

O Robotics J501 fornece dois conectores de ventoinha PWM de 4 pinos projetados para resfriar tanto o módulo Jetson quanto os componentes da placa carrier:

  • Ventoinha 12V: conector de 2,54 mm, máx. 1,5A, adequada para resfriamento de alto desempenho
  • Ventoinha 5V: conector JST de 1,25 mm, máx. 1,5A, ideal para resfriamento silencioso de baixo consumo

O controle PWM permite ajuste dinâmico e preciso da velocidade com base na temperatura do sistema, possibilitando um resfriamento eficiente enquanto minimiza o ruído e o consumo de energia.

Pinagem da ventoinha de 12V:

O conector da ventoinha de 12V (2,54 mm) possui a seguinte pinagem:

Instruções de uso

Controle PWM manual:

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

A política térmica padrão é pré-configurada em /etc/nvpmodel.conf. Para perfis personalizados, consulte o NVIDIA Jetson Linux Developer Guide.

Além disso, podemos definir manualmente a velocidade da ventoinha usando a ferramenta jtop.

Você pode inserir o seguinte comando no terminal para instalar o jtop.

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

Em seguida, reinicie o seu reComputer Mini:

sudo reboot

Após instalar o jtop, você pode iniciá-lo no terminal:

jtop

CAN

O reComputer Robotics J501 está equipado com 4 interfaces CAN independentes (CAN 0, CAN 1, CAN 2, CAN 3), que compartilham o conector J25 2x10P com interfaces DI/DO. Essas interfaces suportam os protocolos de comunicação Classic CAN e CAN FD, apresentando alta performance de anti-interferência e transmissão de dados em tempo real, o que as torna adequadas para cenários de controle industrial, como eletrônica automotiva, automação industrial e robótica.

Instruções de uso

Este é o diagrama esquemático da interface CAN.

Comunicação CAN

Esta seção demonstra a conexão CAN0↔CAN1 e CAN2↔CAN3 no Jetson e mostra como enviar e receber dados entre esses pares tanto no modo Classic CAN quanto no modo CAN‑FD.

Nome do CanalTipo de InterfaceNome do PinoChip GPIONúmero GPIOControle do Resistor de Terminação
CAN0NativoPAA.04gpiochip14gpiochip1 line4 (PAA.04)
CAN1NativoPAA.07gpiochip17gpiochip1 line7 (PAA.07)
CAN2SPI-to-CAN-gpiochip210gpiochip2 line10
CAN3SPI-to-CAN-gpiochip212gpiochip2 line12

Os resistores de terminação para CAN0 e CAN1 podem ser controlados por dois pinos: PAA.04, localizado em gpiochip1 line4, e PAA.07, localizado em gpiochip1 line7.

O controle do resistor de terminação segue estas regras:

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

Digite o seguinte comando para visualizar os pinos no gpiochip 1:

gpioinfo gpiochip1

Consulte os seguintes comandos para definir PAA.04 e PAA.07 como 0:

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

Consulte os seguintes comandos para definir PAA.04 e PAA.07 como 1:

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

Modo Classic CAN

O script a seguir implementa o teste de comunicação em loopback entre CAN0/CAN1 e CAN2/CAN3, incluindo habilitar o resistor terminal, configurar a taxa de bits e a transmissão bidirecional de dados.

O diagrama de fiação é mostrado abaixo:

DePara
CAN0_HCAN1_H
CAN0_LCAN1_L
CAN2_HCAN3_H
CAN2_LCAN3_L

O diagrama de fiação é mostrado abaixo:

Crie test_can.sh para testar a transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 no modo padrão:

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

O código do script para test_can.sh é o seguinte:

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
nota

No script de teste CAN, substitua PW pela sua própria senha do Jetson.

A transmissão e recepção de dados entre CAN0 e CAN1 será concluída:

Modo CAN-FD

CAN FD suporta taxas de transmissão de dados mais altas e comprimentos de quadro de dados maiores. O script a seguir implementa o teste de loopback CAN FD.

Crie test_canfd.sh para testar a transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 no modo CAN-FD:

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

O código do script para test_canfd.sh é o seguinte:

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
nota

No script de teste CAN, substitua PW pela sua própria senha do Jetson.

A transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 será concluída:

DI/DO

As interfaces DI/DO do reComputer Robotics J501 são integradas no conector J25 2x10P, compartilhando a interface com as interfaces CAN. Elas suportam 4 canais de entrada digital e 4 canais de saída digital, com transmissão de sinal estável e adaptação de tensão em nível industrial, adequadas para conectar sensores digitais, relés e outros dispositivos periféricos.

Conexão de Hardware

Canais de Entrada Digital (DI)

Nome do CanalCaracterísticas de TensãoRótulo GPIONome do PinoChip GPIONúmero GPIO
DI_12V_1Entrada 12V adaptativaDI_1_GPIO17PP.04gpiochip096
DI_12V_2Entrada 12V adaptativaDI_1_GPIO18PQ.04gpiochip0104
DI_12V_3Entrada 12V adaptativaDI_1_GPIO19PN.02gpiochip086
DI_12V_4Entrada 12V adaptativaDI_1_GPIO33PM.07gpiochip083

Canais de Saída Digital (DO)

Nome do CanalCaracterísticas de TensãoRótulo GPIONome do PinoChip GPIONúmero GPIOInformação Adicional
DO_40V_1Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_1_GPIOPAA.04gpiochip14Número correspondente: 320
DO_40V_2Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_2_GPIOPAA.07gpiochip17Número correspondente: 323
DO_40V_3Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_3_GPIOPBB.01gpiochip19Número correspondente: 325
DO_40V_4Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_4_GPIOPBB.00gpiochip18Número correspondente: 324

As principais definições de pinos para interfaces DI/DO no conector J25 são as seguintes (a numeração dos pinos corresponde ao conector físico):

Número do PinoRótulo de FunçãoDescrição
1DI_12V_1Canal de Entrada Digital 12V 1
3DI_12V_2Canal de Entrada Digital 12V 2
5DI_12V_3Canal de Entrada Digital 12V 3
7DI_12V_4Canal de Entrada Digital 12V 4
9GND_DITerra para Canais de Entrada Digital
2DO_40V_1Canal de Saída Digital 40V 1
4DO_40V_2Canal de Saída Digital 40V 2
6DO_40V_3Canal de Saída Digital 40V 3
8DO_40V_4Canal de Saída Digital 40V 4
10GND_DOTerra para Canais de Saída Digital
nota

Para o pinout completo (incluindo interfaces CAN), consulte a documentação de hardware do reComputer Robotics J501 para evitar conexões incorretas.

Instruções de Uso

Operação de Saída Digital (DO)

As interfaces DO adotam saída de dreno aberto. Você pode definir o nível de saída (alto/baixo) por meio de comandos para controlar periféricos como relés e LEDs.

Execute o seguinte comando para habilitar o canal DO (saída 12V, alimentado pelo resistor de pull-up externo e fonte de alimentação de 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 Antes de Puxar para Alto:

DO Depois de Puxar para Alto:

Execute o seguinte comando para desabilitar o canal DO (saída ~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

Operação de Entrada Digital (DI)

Use o comando gpioget para ler o nível de entrada do canal DI (valor de retorno 1 = nível alto, 0 = nível baixo) e obter o status dos dispositivos periféricos.

O comando para ler o Nível do Canal DI é o seguinte:

# 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

Conexão de Hardware

Instruções de Uso

Use fios Dupont para conectar os pinos principais do canal SPI de destino (tomando /dev/spidev2.0 como exemplo): Conecte o pino MOSI do SPI2.0 ao seu pino MISO (realizando transmissão/recepção de dados em loopback).

O diagrama de fiação é o seguinte:

nota

Para usar SPI, remova a tampa lateral do dispositivo com uma chave de fenda, conforme mostrado acima.

Passo 1: Carregar o Módulo de Kernel SPI (Pré-requisito) Antes de operar a interface SPI, certifique-se de que o módulo de kernel spidev esteja carregado (o sistema padrão pode pré-carregá-lo, mas é recomendável verificar manualmente):

sudo modprobe spidev
nota

Se o comando for executado sem mensagens de erro, significa que o módulo foi carregado com sucesso; se o módulo já estiver carregado, o comando não retornará nenhuma informação, o que é um fenômeno normal.

Passo 2: Ver Dispositivos de SPI Digite o seguinte comando no terminal para visualizar o nome do dispositivo mapeado pela interface SPI do reComputer Robotics J501:

ls /dev/spidev*

Se nenhum nó de dispositivo for exibido, isso significa que o módulo spidev não foi carregado com sucesso. Execute novamente sudo modprobe spidev e verifique o log do sistema para solução de problemas.

Etapa 3: Obter e compilar o código de teste SPI Obtenha o código de teste spidev-test do GitHub e compile-o:

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

Etapa 4: Executar o programa de teste SPI Digite o seguinte comando no terminal para executar o programa de teste SPI (tomando /dev/spidev2.0 como exemplo):

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

Etapa 5: Verificar o resultado do teste Após executar o comando de teste, você pode observar no terminal o status de transmissão e recepção de dados da interface SPI2.0. A saída principal é a seguinte:

Padrão de julgamento principal: Os dados TX (transmitidos) são consistentes com os dados RX (recebidos), indicando que o teste de loopback SPI foi bem-sucedido e que a função da interface SPI está normal.

UART

O reComputer Robotics J501 está equipado com 2 interfaces UART independentes (UART1 e UART2) que suportam os modos de comunicação RS232, RS422 e RS485, apresentando transmissão de sinal estável e ampla compatibilidade com dispositivos periféricos.

Conexão de hardware

Canais da interface UART

Nome do CanalNó do DispositivoModos SuportadosTaxa de Baud PadrãoComando de Habilitação GPIOMétodo de Troca de Modo
UART1 (DB9-1)/dev/ttyTHS1RS232, RS422, RS485RS232: 115200 bps; RS422/RS485: 9600 bpsgpioset --mode=wait gpiochip0 2=0Chave DIP SW3 (DIP de 8 pinos)
UART2 (DB9-2)/dev/ttyTHS4RS232 (padrão)115200 bpsgpioset --mode=wait gpiochip2 15=0RS232 fixa (sem chave)

Definição de pinagem (conector DB9)

A função de cada pino DB9 varia conforme o modo de comunicação. Consulte a tabela abaixo para uma fiação correta (a numeração dos pinos segue as especificações padrão do conector DB9 macho):

Número do Pino DB9Função no Modo RS232Função no Modo RS422Função no Modo RS485
1-TXD- (Transmit Data-)Data- (Differential Data-)
2RXD (Receive Data)TXD+ (Transmit Data+)Data+ (Differential Data+)
3TXD (Transmit Data)RXD+ (Receive Data+)-
4-RXD- (Receive Data-)-
5GND (Ground)GND (Ground)GND (Ground)
6---
7RTS (Request to Send)--
8CTS (Clear to Send)--
9---

Configuração de modo (chave DIP SW3)

Somente a UART1 (DB9-1) suporta troca de modo por meio da chave DIP SW3 (a UART2 é fixa em RS232). A chave é do tipo DIP de 8 pinos, com pinos de configuração principais rotulados como MODE_0, MODE_1 e MODE_2 no esquemático.

A interface é mostrada na figura abaixo:

Regras de configuração

Modo de TrabalhoCombinação da Chave DIP (MODE_2, MODE_1, MODE_0)Operação do Estado da Chave
RS2320 (OFF), 0 (OFF), 1 (ON)MODE_0: Alterar para ON; MODE_1/MODE_2: Manter OFF
RS4220 (OFF), 0 (OFF), 0 (OFF) ou 1 (ON), 0 (OFF), 0 (OFF)MODE_0/MODE_1: Manter OFF; MODE_2: Opcional (ON/OFF)
RS4850 (OFF), 1 (ON), 0 (OFF) ou 1 (ON), 1 (ON), 0 (OFF)MODE_1: Alterar para ON; MODE_0/MODE_2: Opcional (ON/OFF)
nota

Após concluir a conexão de hardware, use um software de terminal (por exemplo, CuteCom) para testar a função de comunicação UART. Se o CuteCom não estiver instalado, execute sudo apt-get install cutecom para instalá-lo. Certifique-se de que o canal UART foi habilitado por meio do comando GPIO.

Instruções de uso

Comandos de habilitação GPIO

Antes de conectar, execute o comando de habilitação GPIO no terminal para ativar o canal UART correspondente:

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

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

Teste no modo RS232

Aqui você pode usar um adaptador USB para RS232 para testar a interface. Utilizamos o Adaptador UGREEN USB para RS232 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Etapa 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Etapa 2: Configurar os parâmetros da porta serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1 (UART1) ou /dev/ttyTHS4 (UART2)
  • Taxa de Baud: 115200 bps
  • Bits de Dados: 8, Paridade: Nenhuma, Bits de Parada: 1, Controle de Fluxo: Nenhum

Etapa 3: Abrir a porta serial Clique em "Open Device" para abrir a porta serial.

Etapa 4: Enviar dados de teste Envie dados de teste (por exemplo, "232 test from jetson") e verifique a recepção de dados pelo dispositivo periférico.

Teste no modo RS485

Aqui você pode usar um adaptador USB para RS485 para testar a interface. Utilizamos o Adaptador DTech USB para RS485 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Etapa 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Etapa 2: Configurar os parâmetros da porta serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1
  • Taxa de Baud: 9600 bps
  • Bits de Dados: 8, Paridade: Nenhuma, Bits de Parada: 1, Controle de Fluxo: Nenhum

Etapa 3: Abrir a porta serial Clique em "Open Device" para abrir a porta serial.

Etapa 4: Enviar dados de teste Envie dados de teste (por exemplo, "485 test from jetson") e verifique a recepção de dados pelo dispositivo periférico.

Teste no modo RS422

Aqui você pode usar um adaptador USB para RS422 para testar a interface. Utilizamos o Adaptador DTech USB para RS485 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Etapa 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Etapa 2: Configurar os parâmetros da porta serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1
  • Taxa de Baud: 9600 bps
  • Bits de Dados: 8, Paridade: Nenhuma, Bits de Parada: 1, Controle de Fluxo: Nenhum

Etapa 3: Abrir a porta serial Clique em "Open Device" para abrir a porta serial.

Etapa 4: Enviar dados de teste Envie dados de teste (por exemplo, "422 test from jetson") e verifique a recepção de dados pelo dispositivo periférico.

RTC

O reComputer Robotics J501 inclui um RTC de hardware com bateria de backup para manter a hora com precisão. Há duas maneiras de fornecer energia de backup ao RTC:

  1. Usando o suporte para bateria tipo moeda CR1220 (J14)
  2. Usando o conector RTC de 2 pinos - J4 para conexão de alimentação externa

Conexão de hardware

Método 1: Usando o suporte para bateria tipo moeda CR1220

Conecte uma bateria tipo moeda CR1220 de 3 V ao soquete RTC na placa, conforme mostrado abaixo. Certifique-se de que a extremidade positiva (+) da bateria esteja voltada para cima.

Método 2: Usando o conector RTC de 2 pinos

O conector RTC de 2 pinos fornece uma maneira alternativa de conectar alimentação externa ao RTC.

Instruções de uso

Etapa 1. Conecte uma bateria ao RTC conforme mencionado acima.

Etapa 2. Ligue o reComputer Robotics J501.

Etapa 3. No Desktop do Ubuntu, clique no menu suspenso no canto superior direito, navegue até Settings > Date & Time, conecte-se a uma rede via cabo Ethernet e selecione Automatic Date & Time para obter a data/hora automaticamente.

nota

Se você não tiver se conectado à internet via Ethernet, poderá definir a data/hora manualmente aqui.

Etapa 4. Abra uma janela de terminal e execute o comando abaixo para verificar a hora do relógio de hardware:

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

Passo 5. Desconecte a conexão de rede e reinicie o dispositivo. Você verá que o horário do sistema perdeu a alimentação, mas ainda funciona normalmente.

Tela

O Robotics J501 está equipado com uma interface HDMI para saída de vídeo em alta resolução.

Porta de Extensão

A placa carrier Robotics J501 possui um conector de expansão de câmera para placa de extensão GMSL. Ela pode conectar e operar simultaneamente quatro câmeras GMSL ao mesmo tempo.

Conexão de Hardware

A seguir estão os slots de conexão da placa de expansão de câmera GMSL da placa carrier Robotics J501 (é necessário preparar uma placa de extensão com antecedência):

A seguir estão os modelos de câmeras GMSL que já suportamos:

Instruções de Uso

nota

Antes de habilitar a funcionalidade GMSL, certifique-se de que você instalou uma versão do JetPack com o driver da placa de expansão GMSL.

Configurar o arquivo Jetson IO

sudo /opt/nvidia/jetson-io/jetson-io.py
nota

Existem três arquivos de overlay ao todo, a saber, Seeed GMSL 1X4 3G, Seeed GMSL 1X4 6G, Seeed GMSL 1X4 e Orbbec Gemini 335Lg. Estes correspondem, respectivamente, à câmera 3G do SG3S, à câmera 6G do SG2 e SG8S e à câmera da Orbbec. Como mostrado na Figura 3, configure o arquivo io de acordo com o modelo da sua câmera.

passo 2. Instale as ferramentas de configuração da interface de vídeo.

sudo apt update
sudo apt install v4l-utils wmctrl

Usar as câmeras da Série SGxxx

passo 1. Defina o modo de sincronização de quadros (não é habilitado por padrão!).

info

Aqui demonstramos como configurar câmeras de diferentes modelos e resoluções.

#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
nota

trig_mode = 1 habilita a sincronização de quadros, enquanto trig_mode = 0 desabilita a sincronização de quadros. A configuração padrão é desabilitar a sincronização de quadros.

--set-fmt-video segue a resolução que é selecionada com base na câmera conectada. Atualmente, há três opções de sensor_mode, cada uma correspondendo a uma resolução diferente.

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

passo 2. Inicie a câmera.

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

Recursos

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...