ROSPPM: ROS Package for Accessing RC Transmitters

Jaeyoung Lim


RC Transmitters are used to control miniature cars and planes for a long time. Although the technology has evolved quite a long way, RC transmitters are still the most reliable way to gain control of a UAV for long distances. RC Transmitters are very simple to use and works in very long distances with a fraction of the cost of other communications. ROSPPM is a project to take advantage of the RC transmitters and make a package that can interface with the transmitter through ROS. ROSPPM is an extended project from the USB2PPM project which uses an arduino to generate ppm signals to send and receive commands through the trainer port of the transmitter.

Package Overview

ROSPPM package enables a ROS interace to the transmitter trainerport. ROSPPM subscribes commands for the channels of the transmitter or reads the stick commands and publish the stick values. Currently ROSPPM has been tested on Turnigy 9x. Most transmitters which have ppm input will work with rosppm while some transmitters may have voltage level issues.
Source: git (branch: master)

The package consists of two nodes which is the rosppm_node and the rosppm_arduino node. The rosppm_node runs on the host PC and receives Joy messages to be sent to the rosppm_arduino node. The commands are converted to ppm_io messages and passed to the rosppm_arduino node. rosppm_arduino node is a node running on arduino, which requires rosserial to talk to ROS


ROSPPM node receives joy message inputs and command ppm_io messages to the rosppm_arduino. The current rosserial implementation does not support joy messages, so a seperate node such as the rosppm_node is reuqired.


rosppm_arduino is a arduino sketch which will run inside the arduino. The rosppm_node talks to the rosppm_arduino using a custom message(ppm_io.msg). The message definition follows as below.

#Send ppm input/output of the transmitter to rosppm
float32 a //Channel 1
float32 b //Channel 2
float32 c //Channel 3
float32 d //Channel 4
float32 e //Channel 5
float32 f //Channel 6
float32 h //Channel 7
float32 i //Channel 8

The rosppm_arduino talks directly to the roscore using rosserial.

System Configuration

Software Installation

Installation instuctions can be found here

Hardware Configuration

rosppm_arduino is generating ppm signals through timer interrupts. Hardware configuration instructions can be found in a previous article on USB2PPM.

rosppm package summary


  • Transmit Channel values to the transmitter using the trainer port
  • Receive stick values from the transmitter coming out of the trainer port


Published Topics

~/joy_read_channels (sensor_msgs/Joy.msg)

Subscribed Topics

~/joy_set_channels (sensor_msgs/Joy.msg)


Published Topics

~/read_ppm (rosppm/ppm_io.msg)
Publish stick inputs from the transmitter. If using Turnigy 9X, the transmitter module should be detached.

Subscribed Topics

~/set_ppm (rosppm/ppm_io.msg)
Command channel values to the transmitter

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s