Workflow and Commands

This page collects the day-to-day commands for working in the Wall-E micro-ROS workspace.

Development Workflow

  1. Start the Docker workspace.

  2. Enter the container and source ROS 2.

  3. Create the firmware workspace if it does not exist.

  4. Configure the ESP32 firmware for the app and transport.

  5. Build the firmware.

  6. Flash the board and monitor serial output.

Workspace Commands

Start the containers:

docker compose up -d

Enter the workspace container:

docker compose exec workspace bash

Source the ROS environment inside the container:

source /opt/ros/humble/setup.bash
source install/setup.bash

Launch Commands

Integrated launch:

ros2 launch wall_e_description wall_e.launch.py

RViz-only mode (no Gazebo):

ros2 launch wall_e_description wall_e.launch.py use_gazebo:=false use_rviz:=true

Enable joint_state_publisher explicitly:

ros2 launch wall_e_description wall_e.launch.py use_joint_state_publisher:=true

If runtime packages are missing in an older running container, rebuild image:

docker compose up --build -d

Firmware Commands

Create the firmware workspace once, or again after a clean reset:

ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32

Configure the ESP32 app:

ros2 run micro_ros_setup configure_firmware.sh esp32_controller \
  --transport udp \
  --ip 192.168.43.217 \
  --port 9999

Build the firmware:

ros2 run micro_ros_setup build_firmware.sh

Flash the board:

export ESPPORT=/dev/ttyUSB0
ros2 run micro_ros_setup flash_firmware.sh

Useful Checks

If configuration fails with a missing PLATFORM file, the firmware workspace has not been created yet.

Check that the custom app exists in the mounted firmware tree:

ls firmware/custom/esp32_controller

If the serial port is not visible, confirm the device exists on the host and is passed into the container.

Notes

  • The ESP32 app source lives in firmware/custom/esp32_controller/app.c.

  • The workspace uses Docker for reproducible builds.

  • The firmware creation step downloads and prepares the ESP-IDF toolchain, so it can take several minutes.

  • Launch uses Python xacro processing for robot description generation.

  • Rear wheel TF fallback is provided by launch when use_joint_state_publisher:=false.

Host Runtime Commands

After building and sourcing:

ros2 run control gamepad_node
ros2 run control robot_control_node
ros2 run localization odometry_node
ros2 run localization inverse_kinematic_node

Topic checks:

ros2 topic echo /gamepad
ros2 topic echo /cmd_vel
ros2 topic echo /servo_cmd
ros2 topic echo /odom
ros2 topic echo /motor_cmd

Operator Mapping (Default)

  • Hold LB to enable motion commands.

  • Move left stick Y for linear speed (internally -left_stick_y).

  • Move left stick X for angular speed.

  • Hold A to engage hold/PI mode.

  • Move right stick Y to drive servo angle output on /servo_cmd (default axis).