Usage Guide#

1. Prerequisites#

1.1 Hardware Requirements#

Development Board:

  • One of the supported NXP boards (FRDM i.MX 8M Plus, i.MX 8M Plus EVK or i.MX 95 EVK)

  • USB Type-C cable for debug UART

  • USB Type-C cable for power (with PD adapter)

  • microSD card (16 GB or larger, Class 10 recommended)

  • Ethernet cable (for network connectivity)

Host PC:

  • Ubuntu 24.04 or later

  • At least 400 GB free disk space (for building from source)

  • 8 GB RAM minimum (16 GB recommended)

1.2 Software Requirements#

On Host PC:

  • Terminal application (minicom, screen, or PuTTY)

  • SSH client

  • UUU (Universal Update Utility) for flashing images

  • Git and repo tool (for building from source)

2. Getting Started Guide#

See the getting started guide for your board:


3. Network Configuration and SSH Access#

3.1 Overview#

Instead of using multiple USB serial connections, you can configure the board’s network interface and use SSH to establish multiple terminal sessions from your host PC. This approach provides more flexibility and allows you to work with the board remotely.

3.2 Configure Board Network Interface#

Method Using Serial Console (One-time Setup)#

1. Connect to the board via serial console.

2. Log in to the board:

  • Default username: root

  • Default password: (usually no password, just press Enter)

3. Check the available network interfaces:

ip addr show

Common interfaces:

  • eth0 or eth1 - Ethernet

  • wlan0 - WiFi (if using IW612 module on FRDM board)

4. Configure static IP address for Ethernet:

# Set IP address
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up

# Or use the 'ip' command
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up

5. Verify the configuration:

ip addr show eth0
ping 192.168.1.1

3.3 Configure the Host PC Network#

Linux Host#

  • Temporary configuration:

sudo ip addr add 192.168.1.1/24 dev eth0
sudo ip link set eth0 up

Windows Host#

  1. Open Network and Sharing Center.

  2. Click Properties on your Ethernet adapter.

  3. Select Internet Protocol Version 4 (TCP/IPv4).

  4. Click Properties.

  5. Select Use the following IP address:

    • IP address: 192.168.1.1

    • Subnet mask: 255.255.255.0

  6. Click OK.

3.4 Connect via SSH from Host PC.#

Test the Network Connectivity#

 # From host PC
ping 192.168.1.100

SSH Connection#

  • From Linux:

     # Connect as root
     ssh root@192.168.1.100
    
  • From Windows:

    Use PuTTY or Windows Terminal:

    # Windows 10/11 with OpenSSH
    ssh root@192.168.1.100
    

First-time connection:

  • You’ll see a message about host authenticity.

  • Type yes to continue.

  • Enter password if prompted (default: no password for root).

3.5 Open Multiple SSH Sessions#

You can now open multiple terminal windows simultaneously for different ROS 2 tasks:

Terminal 1 - ROS 2 Core:

ssh root@192.168.1.100
source /opt/ros/jazzy/setup.bash

Terminal 2 - ROS 2 Nodes:

ssh root@192.168.1.100
source /opt/ros/jazzy/setup.bash

Terminal 3 - Monitoring/Debugging:

ssh root@192.168.1.100
source /opt/ros/jazzy/setup.bash
ros2 topic list

Terminal 4 - System Commands:

ssh root@192.168.1.100
top

4. ROS 2 Quick Start#

4.1 Overview#

This section provides basic ROS 2 commands to verify your installation and get started with ROS 2 development on the development boards.

4.2 Setup ROS 2 Environment#

Every time you open a new terminal, you must source the ROS 2 setup script:

source /opt/ros/jazzy/setup.bash

Tip: Add this to your ~/.bashrc for automatic setup:

echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc

4.3 Verify ROS 2 Installation#

Check ROS 2#

ros2

Expected output:

usage: ros2 [-h] [--use-python-default-buffering]
            Call `ros2 <command> -h` for more detailed usage. ...

ros2 is an extensible command-line tool for ROS 2.

options:
  -h, --help            show this help message and exit
  --use-python-default-buffering
                        Do not force line buffering in stdout and instead use the python default
                        buffering, which might be affected by PYTHONUNBUFFERED/-u and depends on
                        whatever stdout is interactive or not

Commands:
  action     Various action related sub-commands
  bag        Various rosbag related sub-commands
  component  Various component related sub-commands
  daemon     Various daemon related sub-commands
  doctor     Check ROS setup and other potential issues
  interface  Show information about ROS interfaces
  launch     Run a launch file
  lifecycle  Various lifecycle related sub-commands
  multicast  Various multicast related sub-commands
  node       Various node related sub-commands
  param      Various param related sub-commands
  pkg        Various package related sub-commands
  run        Run a package specific executable
  security   Various security related sub-commands
  service    Various service related sub-commands
  topic      Various topic related sub-commands
  wtf        Use `wtf` as alias to `doctor`

Check Available ROS 2 Commands#

ros2 --help

List Installed ROS 2 Packages#

ros2 pkg list

4.4 Basic ROS 2 Commands#

4.4.1 Working with Nodes#

  • List running nodes:

    ros2 node list
    
  • Get node information:

    ros2 node info /node_name
    

4.4.2 Working with Topics#

List all topics:

ros2 topic list

List topics with types:

ros2 topic list -t

Echo topic messages:

ros2 topic echo /topic_name

Get topic information:

ros2 topic info /topic_name

Publish to a topic:

ros2 topic pub /topic_name std_msgs/msg/String "data: 'Hello ROS 2'"

Monitor topic frequency:

ros2 topic hz /topic_name

4.4.3 Working with Services#

List all services:

ros2 service list

List services with types:

ros2 service list -t

Call a service:

ros2 service call /service_name std_srvs/srv/Empty

Get service type:

ros2 service type /service_name

4.4.4 Working with Parameters#

List parameters:

ros2 param list

Get parameter value:

ros2 param get /node_name parameter_name

Set parameter value:

ros2 param set /node_name parameter_name value

4.4.5 Working with Actions#

List all actions:

ros2 action list

Get action information:

ros2 action info /action_name

Send action goal:

ros2 action send_goal /action_name action_type goal

4.5 ROS 2 Demo Examples#

Example 1: Talker and Listener (C++)#

Terminal 1 - Start talker:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp talker

Terminal 2 - Start listener:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_cpp listener

Terminal 3 - Monitor the topic:

source /opt/ros/jazzy/setup.bash
ros2 topic echo /chatter

Example 2: Talker and Listener (Python)#

Terminal 1 - Start talker:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_py talker

Terminal 2 - Start listener:

source /opt/ros/jazzy/setup.bash
ros2 run demo_nodes_py listener

4.6 Useful ROS 2 Environment Variables#

Check ROS Domain ID#

echo $ROS_DOMAIN_ID

Set ROS Domain ID#

export ROS_DOMAIN_ID=42

Add to ~/.bashrc for persistence:

echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc

Check ROS Localhost Only#

echo $ROS_LOCALHOST_ONLY

Enable Localhost Only Mode#

export ROS_LOCALHOST_ONLY=1

4.7 ROS 2 Interface Information#

List Message Types#

ros2 interface list

Filter by package:

ros2 interface list | grep std_msgs

Show Message Definition#

ros2 interface show std_msgs/msg/String

Show Service Definition#

ros2 interface show std_srvs/srv/Empty

4.8 ROS 2 Doctor - System Check#

Check ROS 2 setup and configuration:

ros2 doctor

Check specific aspects:

ros2 doctor --report

4.9 Next Steps#

Now that you are familiar with basic ROS 2 commands, you can:

  1. Explore ROS 2 Tutorials: https://docs.ros.org/en/jazzy/Tutorials.html

  2. Try the RoArm-M3 Demo: RoArm Demo Guide

  3. Try the vSLAM Demo: vSLAM Demo Guide