Skip to content
Lucas De Macêdo edited this page Apr 14, 2020 · 21 revisions

Welcome! (: This wiki document was written by Lucas De Macêdo Pinheiro and Tiago Rodrigues Pereira as a record and as a way of explaining what goes behind the EMA Trike system.

EMA Trike is one of the major divisions of Project EMA - Empowering Mobility and Autonomy. In this project we develop technology to enhance rehabilitation of people with motor disabilities. Our current work focuses on the use of electrical stimulation to people with diseases that affect the nervous system. In particular, the EMA Trike division applies this technology to an adapted trike in order to enable people with complete paraplegia to cycle using their own legs.

A robust system is necessary to make a person with minimal sensation and control of their legs be able to cycle and move again. One reason is because the core task of the system is to detect the cycling phase as time passes and determine, based on that, which muscles to target and how to stimulate them accordingly. This involves integrating the pedal angle information coming from the sensor with the stimulator pulses being delivered to the subject’s legs in a reliable way.

In the beginning the system was solely developed using Python scripts. The Robot Operating System - ROS was adopted to make the development more modular and ease new hardware implementation. This transition was made in a way that the same piece of code we used for the stimulator, for instance, could be used in other applications with little or no modification. That is the reason why it is organized in four folders/ROS packages described below:

ema_common_msgs: https://github.com/lara-unb/ema_common_msgs

  • The different parts of the EMA Trike on ROS have to talk to each other to send and receive data to be able to act accordingly. This package determines additional ROS message types used to establish communication between all parts of the modular system. Think of it as what defines the pattern for different formularies to be filled. The stimulator messages have distinct fields compared to the IMU messages, for example. It is necessary to have these additional message types because some of our needs are not always satisfied by ROS standard types alone.

hasomed_rehastim_stimulator: https://github.com/lara-unb/hasomed_rehastim_stimulator

  • Contains everything regarding the stimulator that is modular and can be used in other applications. It does everything necessary to receive and translate a stimulator message (with parameters as current, pulse width ...) into actual electric current being sent to the electrodes.

yostlabs_3space_imu: https://github.com/lara-unb/yostlabs_3space_imu

  • Contains everything regarding the IMU sensors that is modular and can be used in other applications. Or at least it should. Since the modifications made to investigate the sensor’s low frequency issue (explained later on) the repository and its files were modified to work specifically with the EMA Trike on ROS. Future work consists of making it application-independent again. It configures the inertial sensors to transmit, receives the raw data, translates and delivers this information as a ROS message to the other parts of the system.

ema_fes_cycling: https://github.com/lara-unb/ema_fes_cycling

  • This is the main package. It is what launches, joins and makes all the other pieces work together specifically for the EMA Trike on ROS, the FES cycling application. More on this will be discussed in the next sections.

ROS can seem complex and confusing in the beginning but the next section will be an attempt to explain its features most used here in an easy, simple and clear way. Since it has lots of specific terms, ROS Concepts page can help with the definitions and, of course, ROS Wiki is there anytime for reference if something is unclear. Also, feel free and encouraged to go ahead and check ROS Tutorials.