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.
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 https://github.com/Jaeyoung-Lim/rosppm (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 std_msgs/header 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.
Installation instuctions can be found here
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
Publish stick inputs from the transmitter. If using Turnigy 9X, the transmitter module should be detached.
Command channel values to the transmitter