Vehicle Operation - LJoswig/SUZUKI_JIMNY_AUTONOMOUS_GRAMM_JOSWIG GitHub Wiki
This wiki page covers Jetson setup, SSH access, running ROS nodes and RC control of the Jimny. Read this page in full before operating the system.
Before powering on the system, check that all cables are securely connected (see Cable Plan).
- Car battery: Connect the cable from the vehicle’s 12 V battery to the supply cable for the boards and motor driver.
- HDMI dummy plug: Connect it before powering on the Jetson. It simulates a connected monitor and is used for headless operation in the current setup.
-
Lithium-Ion battery: Plug the power supply cable into the Jetson. A DC–DC converter is connected between the battery and the Jetson.
⚠️ Warning: Check the voltage of the 6S Li-Ion battery (10500 mAh) with a multimeter before use. It should be above 24 V for an estimated runtime of 2–3 hours. Recharge the battery if its voltage drops below 21 V. - Cube Orange: Plug the Cube Orange USB cable into the vertical slot of the Jetson.
- Steering Board and Steerf Board: Plug the two USB cables into the horizontal USB ports (one top and one bottom). The physical order does not matter.
All the working repository is currently on the Jetson. To control it, you need to access it via SSH from your laptop.
-
Connect your laptop to the Jetson using an Ethernet cable.
-
Open a Linux terminal on your laptop and identify its Ethernet interface name:
ip link
Look for a name like
enp3s0,eno1, oreth0. -
The Jetson’s Ethernet IP address is
192.168.50.2in this setup. Assign the IP192.168.50.10to your laptop. In both commands below, replaceenp3s0with the interface name you found in step 2:sudo ip addr add 192.168.50.10/24 dev enp3s0 sudo ip link set enp3s0 up -
Test the network connection:
ping 192.168.50.2
Press Ctrl+C to stop the command.
-
If it pings successfully, SSH from laptop into the Jetson (password is
admin):✓ You are now in the Jetson’s terminal.
- Connect the Jetson and hardware as described in Section 1 (Jetson Hardware Connection).
- Connect the Ethernet cable from your laptop to the Jetson.
- Switch the Jimny’s ignition ON, but do not start the engine yet.
- Open 4 separate terminals on your laptop and connect to the Jetson via SSH in each one.
Before running the ROS nodes, list the serial device files:
ls /dev/tty*CH* /dev/ttyUSB*Possible device files include /dev/ttyUSB0 and /dev/ttyUSB1, or with installed CH341 driver /dev/ttyCH341USB0 and /dev/ttyCH341USB1.
To identify which device file belongs to each board, monitor USB events:
sudo dmesg -wDisconnect and reconnect one board’s USB cable at a time to identify its device file in the terminal.
Note: Linux device files may change after a reboot/reconnection; check before each session.
Run one of the following command blocks in each of the 4 opened terminals.
Terminal 1 (cuberos):
cd ~/workspaces/jimny/jimny_ws
ros2 run cuberos cuberos_node.pyTerminal 2 (to_vehicle):
cd ~/workspaces/jimny/jimny_ws
ros2 run to_vehicle to_vehicle /dev/ttyUSB1
# /device file of Steerf Board
# Use the line below if you installed a CH341 driver:
# ros2 run to_vehicle to_vehicle /dev/ttyCH341USB1Terminal 3 (ackermann_to_steering):
cd ~/ackermann_to_steering_serial
python3 ackermann_to_steering_serial_final.py /dev/ttyUSB0
# /device file of Steering Board
# Use the line below if you installed a CH341 driver:
# python3 ackermann_to_steering_serial_final.py /dev/ttyCH341USB0Terminal 4 (mode_switching):
cd ~/workspaces/jimny/jimny_ws
ros2 run mode_switching switchEach terminal runs one ROS2 node. To view the available ROS topics and their data:
ros2 topic list
ros2 topic echo <topic_name>
| Terminal | Displayed Output |
|---|---|
1 – cuberos |
CubePilot data publishing (GPS data, raw GPS data, RC channels, and CubePilot mode). |
2 – to_vehicle |
Steerf Board serial connection status and CMD_TO_STERF commands (target velocity, target acceleration, actual GPS speed, safety state). |
3 – ackermann_to_steering |
Steering Board serial connection status and sent steering commands (target steering angle and target steering rate). |
4 – mode_switching |
Operating mode and ARM/DISARM status, RC command values (steering input, target steering rate, target steering angle, target velocity), published ackermann commands, and safety/error messages. |
Once the 4 terminals are running without errors:
- Start the car engine.
- Turn on the Herelink handheld controller.
- Select Manual mode.
- Arm.
To avoid OS corruption on the Jetson, ALWAYS do this before disconnecting power from the Jetson. Stop the ROS Nodes. Go to one of the SSH terminals and run:
sudo poweroffWait for the Jetson LEDs to turn off completely before disconnecting the power source.
Issue: CH341 driver not loaded after reboot - the driver file ch341.ko is already on the Jetson, but it may not load automatically after restarting. As a result, the USB ports for the connected boards may not appear under /dev/ttyCH341* or /dev/ttyUSB*.
Solution: Check whether the driver is loaded and the serial ports are available:
lsmod | grep ch341
ls /dev/ttyCH341* /dev/ttyUSB*If the first command shows no output, the CH341 driver is not loaded. Install the driver so it loads automatically after rebooting:
cd ~/ch341ser_linux-main/driver
sudo make installAfter rebooting, verify that the driver is loaded and the serial ports are available.
Issue: Herelink -> Cube Orange -> Jetson communication failure.
Solution: Check that there are no loose cable connections. Keep the ROS nodes running and open an additional SSH terminal. Check the Cube Orange connection on the Jetson:
ls /dev/ttyACM*The Cube Orange should appear as dev/ttyACM0 or dev/tty/ACM1.
Check whether Cube Orange heartbeat messages are being received by the Jetson:
ros2 topic echo /heartbeatCheck whether RC data is received from the Herelink controller:
ros2 topic echo /rc_inputsMove the Herelink controls and verify that the values change. Check the Jetson’s safety mode which is sent to the Steerf Board:
ros2 topic echo /signal_error<H,0> disarmed, <H,1> armed + ok, <H,2> armed + error. If no Cube heartbeat is received for more than 2 seconds while armed, it switches to <H,2>.
Issue: Jetson -> Arduino Boards communication failure.
Solution: Serial:
Jetson ───── SteerfBoard → baud rates must match
Jetson ───── Steering Board → baud rates must match
Check that the baud rates in to_vehicle.py and ackermann_to_steering_serial_final.py match Serial.begin(...) in the corresponding .ino codes.
Python: baud_rate = 115200
Arduino: Serial.begin(115200);Issue: No longitudinal control - the vehicle does not respond to throttle or brake commands.
Solution: The Steerf Board selects and sends the operating mode via CAN bus to the AxelBrake and Brake Board: MANUAL (0), AUTO (1), or EMERGENCY (2). Check the Steerf Board debug CSV file for troubleshooting:
ls -lt ~/workspaces/jimny/jimny_ws/sterf_debug_*.csvOpen the relevant file and interpret its data using the table:
Tap into the CAN bus using an external CAN module, and connect a logic analyzer to the module to capture the CAN signals. Connect the logic analyzer to the laptop via USB and use the program Saleae Logic 2 to record and decode the CAN frames.
Use can_ids.h to identify the CAN message IDs and the corresponding .ino board code to determine what the data bytes represent.
Issue: No steering control - the vehicle does not respond to steering commands.
Solution: Initially, try restarting the car engine to restart the steering board. If that doesn't work, connect the Steering Board to a laptop and open the Arduino IDE Serial Monitor. Use the debug commands (enable steering controller (e), send steering targets (s20, s-20, s0), disable steering controller (d), set zero steering position(z)) implemented in steer_try_serial_only.ino to check whether the steering wheel responds. In the Serial Monitor:
e
s10
s-10
s0
dif that does not work, try rezeroing it with
d
z
ethen test steering angles like s10, if that works, steering should work again