THUMPER Demo

This demo showcases capabilities of micro-ROS integrated with 6LoWPAN radio communication. More specifically, it shows the remote control of an unmanned mobile platform. As a research platform the THUMPER robot was controlled remotely with a joystick.

tupec_intro

The project was based on the 6WD Thumper solution, a light six wheel chassis of 420x300x130 mm size and 2.7 kg weight equipped with six motors, each of which mounted on an independent suspension.

The basis vehicle was extended by assembling the RoboClaw motor controller and the Olimex STM32-E407 board with the PmodRF2 IEEE 802.15.4 module for low-power wireless communication. To enable remote driving the USB joystick, attached to the second set of the Olimex STM32-E407 board with the PmodRF2 radio communication module, was used.

The developed solution gives the ability to control the vehicle in every direction The basic elements of the project solution are shown on the diagram below.

Operation diagram overview

tupec_diagram

Both Olimex STM32-E407 boards are running NuttX and micro-ROS applications, which can exchange data via UDP over 6LoWPAN. The joystick’s position is converted into the velocity command and then posted on a micro-ROS stack as a message sequence. On the robot’s side, the micro-ROS Olimex application subscribes these messages, and convert these messages into motor commands. The micro-ROS agent enables data transmission between the micro-ROS publisher and subscriber clients. It is an additional linux PC, with ATUSB IEEE 802.15.4 USB adapter as a 6LoWPAN device, involved in this activity.

Topics

There are two micro-ROS nodes, the joystick’s publisher and the robot’s subscriber, which work on the topic /velocity_cmd - the velocity for driving a RoboClaw motor controller.

Thumper Demo Hardware

The following is a list of the demo hardware:

  • 1 x Wild Thumper 6WD Chassis,
  • 1 x RoboClaw 2x15A (V5E),
  • 2 x Olimex STM32-E407,
  • 2 x Digilent PmodRF2
  • 1 x Logitech Extreme 3D PRO Joystick + Power Supply,
  • 1 x PC,
  • 1 x ATUSB IEEE 802.15.4 USB Adapter,
  • 1 x ST-LINK/V2 to flash firmware to Olimex boards.

Thumper

All-Terrain Robot Chassis (Product Link)

  • 6-wheel-drive
  • independent suspension for each wheel
  • 120mm-diameter wheels

Source: pololu.com

RoboClaw

2x15A Motor Controller (Product Link)

  • Position Control
  • USB, Serial, R/C, Analog Inputs

Source: basicmicro.com

Olimex STM32-E407

Development board for STM32F407ZGT6 microcontroller (Product Link)

  • Ethernet
  • USB

Source: olimex.com

Pmod RF2

IEEE 802.15 RF transceiver module (Product Link)

  • supports ZigBee, MiWi and MiWi P2P
  • 12-pin connector with SPI interface

Source: digilentinc.com

Extreme 3D Pro Joystick

Product Link

  • 12 buttons

Thumper demo wiring

Below you can find how the hardware components should be connected.


PmodRF2 Olimex STM32-E407
VCC/12 3V3
GND/11 GND
INT/7 D8
RST/8 D9
CS/1 D10
MOSI/2 D11
MISO/3 D12
SCLK/4 D13


RoboClaw Olimex STM32-E407
S1 USART6_TX (UEXT/3)
GND GND (UEXT/2)


Logitech Extreme 3D PRO Olimex STM32-E407
Joystick USB1 USB_OTG2



1) connected to the external 5 VDC power supply

Application building

Building the Thumper demo’s firmware for the Olimex STM32-E407 platform

Use the Docker installation on PC to prepare the environment for the demo applications:

  • Download the micro-ROS base Foxy image from the Docker Hub, then run a docker container.
sudo docker pull microros/base:foxy
sudo docker run -it --net=host --privileged -v /dev/bus/usb:/dev/bus/usb     microros/base:foxy
  • Create a ROS 2 workspace in the uros_ws folder of the docker container and build the package.
source /opt/ros/$ROS_DISTRO/setup.bash
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
apt update && rosdep update
rosdep install --from-path src --ignore-src -y
apt-get install python3-pip
apt-get -y install python3-pip
colcon build
source install/local_setup.bas
  • Create the Nuttx firmware on Olimex STM32-E407 with the Thumper demo applications.
ros2 run micro_ros_setup create_firmware_ws.sh nuttx olimex-stm32-e407
cd firmware/NuttX
git checkout -t origin/ucs_demo_f
cd ../apps
git checkout -t origin/ucs_demo_f
cd ..

Build and flash the firmware.

  • Set the config profile variable to select the joystick publisher or vehicle subcriber application.
CFG_PROFILE=uct_jspublisher_romfs

or

CFG_PROFILE=uct_jspublisher_romfs
  • Build the application.
ros2 run micro_ros_setup configure_firmware.sh $CFG_PROFILE
cp firmware/NuttX/configs/olimex-stm32-e407/$CFG_PROFILE/rcS.template firmware/apps/nshlib/rcS.template
cd firmware/apps/nshlib/
../../NuttX/tools/mkromfsimg.sh -nofat ../../NuttX/
cd /uros_ws/
ros2 run micro_ros_setup build_firmware.sh
ros2 run micro_ros_setup flash_firmware.sh
  • Connect ST-Link/V2 to the Olimex STM32-E407 JTAG interface and flash the firmware:
ros2 run micro_ros_setup flash_firmware.sh

In case of the joystick part use uct_jspublisher_romfs as the configuration profile, for the Thumper’s Olimex board use the uct_jssubscriber_romfs file.

Running the micro-ROS agent over 6LoWPAN on the Thumper demo

  • Install wpan-tools on the PC.
sudo apt-get update -y
sudo apt-get install -y wpan-tools

Having the ATUSB adapter inserted into a USB port on PC, run the script wpan_atusb.sh with administrator privileges to configure the 6lowpan interface. Then, the lowpan0 interface is ready to be used, so the communication with the joystick and Thumper 6LoWPAN devices can be established.

  • Download the micro-ROS agent Foxy image from the Docker Hub, then run the agent in udp IPv6 addressing mode.
docker pull microros/micro-ros-agent:foxy
docker run -it --net=host microros/micro-ros-agent:foxy udp6 --port 9999 -v6

The agent is ready to work with micro-ROS clients over 6LoWPAN.

Running the demo

  • Power ON the joystick equipment.
  • Power ON the Thumper platform.
  • Insert the ATUSB adapter into a USB port on PC and run the micro-ROS agent as described in the previous section.

After a while, the micro-ROS publisher and subscriber will establish a connection with the agent and the vehicle can then be remotely driven with the joystick. To let the vehicle run forward / backward or change its speed, push the stick along X axis, to move leftward / rightward rotate the handle around Z axis.