What it does

The project is to accomplish initial steps to drive Toyota Prius car autonomously. The team aims to perform the intial steps towards this goal. Team will drive the car remotely with a joystick.

Baseline Goals

  1. Drive and stop the car from wireless Joystick.
  2. Have Emergency stop switch on both sides of the car to override the Joystick command and stop the car.
  3. Give steering a command to stay at a particular fixed position(so that the car can take a full circular path).

Reach Goal

Drive the Gas & Brake pedal from wireless Joystick.

How we built it


We use a jumper to start the car, drive to Pennovation, and figure out the wiring on the car.

System information is communicated via CAN bus.

  1. steering servomotor

As the servomotor output shaft rotates a given displacement from center, so does the OEM steering column. All control logic of the servomotor is contained in the Drive Module portion of the system.

The servomotor can be engaged or disengaged so that the vehicle can be driven either with the AEVIT controls (i.e. the servomotor rotates the column) or by an individual. A lever on the underside of the servomotor is used to engage or disengage the clutch mechanism built into the servomotor assembly. When engaged or disengaged, the provided safety detent pin must be inserted.

There are two separate devices that provide information to the Drive Module as to the current position of the servomotor. One is the dual potentiometer mounted around the spur gears. This device provides two signals (“dual” potentiometer) that relate to the position of the output shaft of the motor/gearbox combination. The other is the digital resolver which is mounted to the backside of the motor and protected by the plastic motor shroud. The resolver provides a digital signal relating to the position of the motor shaft itself. Both of these devices are somewhat protected by the assembly but care should be taken when handling the column modification to prevent damage.

There are two harnesses and one single wire exiting the Steering servomotor. The MOTOR harness carries the power from the AEVIT Drive Module to the Steering servomotor. The ENCODER harness carries all of the position related information or feedback from the dual potentiometer and the resolver to the AEVIT Drive Module. The single Orange wire exiting the assembly is connected to a limit switch used to detect whether or not AEVIT is engaged.

  1. gas&brake servomotor

The Gas & Brake servomotor rotates 135degree in each direction from the null position for a total rotation of 270degree. As the servomotor rotates in the Brake direction, a drive arm (shown below) is used to depress the OEM brake pedal. As the servomotor rotates in the Gas direction, the drive arm rotates in the opposite direction. A cable is wrapped around the spool of the assembly and pulls the OEM accelerator pedal.


This AEVIT system has been adapted to control the gas/brake and steering functions of your vehicle. The input to the system is a single 0-5 VDC signal from an embedded controller or DAC for gas/brake and a second signal for steering.

  1. joystick

Joystick takes something entirely physical - the movement of our hand - and translate it into entirely mathematical signals -- a string of numbers (the language of computers). And we use these signals to control the movement of the car(steering, gas and brake). For this drive-by-wire project, dongle is used to connect joystick and receive signals through WiFi to accomplish wireless control.


Build a hardware prototype to control the signal.

AEVIT interface with embedded controller The steering and gas/brake signals will require (2) separate 0-5 VDC signals.

• Steering RED +5 VDC Output WHITE Signal Input BLACK Ground Output • Gas/Brake RED +5Vdc Output YELLOW Signal Input BLACK Ground Output

mbed The mbed Microcontroller can communicate with a host PC through a "USB Virtual Serial Port" over the same USB cable that is used for programming. We can read input from the host PC keyboard and communicate with applications and programming languages running on the host PC that can communicate with a serial port.

Serial Port Setup: • Baud Rate 19200 • Parity: none • Data bits: 8 • Stop bits 1 • Flow control: none • Buffer Size: 1024

We use mbed as our platform to receive software command from host PC through a serial port. mbed has PWM analog output which we connect to a DAC converter, and transfer analog signal to servo steering module. The voltage range is 0.1-4.8V, corresponding with steering position. 4.8V is the maximum clockwise and 0.1V is the maximum counter-clockwise position. We set the dead zone to 0.1V. The steering value starts at 2.5V which is the center of the steering position. Every time we reset the system, it would automatically return to the center position.

Now we can use keyboard on laptop to send signals and then control steering. Here the output is discrete so the steering control is not as smooth as an individual driver do.


Build a software prototype to give the command.

Software is used to translate a given input by the user into a specific output by the servomotor. Since we may need more functions in the car, we use ROS(Robot operating system) as operating system for the convenience of software integration.


Interface joystick with ROS.

We run ROS on Jetson TX2, and we build our own code to subscribe joystick to ROS and receive signals from joystick through WiFi.

First we calibrate 'center' for joystick, then find out the maximum and minimum value of joystick to set the voltage range. We also have twist values, which is between -2 to +2 corresponding to the movement of joystick, to control the steering speed. When we push the joystick hard in one direction, the steering would turn the wheel fast toward that direction.

Our updating frequency is 100Hz, which is fast enough for real-time control.

Our cute little turtle displays signals from joystick.


Interface the joystick with hardware to drive steering

We set up the whole system, connecting hardware and software part. Joystick sends digital signals to dongle and received by ROS. mbed receives digital signals from ROS through a serial port, and send analog signals to steering module.

Here we make some optimization to make the control signal smooth:

  1. High frequency PWM: 100 kHz to 60 kHz responds better without stepping.

  2. low cutoff filter: 800Hz cutoff low-pass filter. The filter passes signals lower than 800Hz cutoff frequency and attenuates signals with frequencies higher than the cutoff frequency. Low-pass filters provide a smoother form of a signal, removing the short-term fluctuations and leaving the longer-term trend.


Interface the joystick with hardware to drive gas&brake pedal.

System evaluation

The Prius car can be driven remotely totally relying on the joystick in random path, under random speed. The movement of steering is very smooth and collaborating well with the movement of joystick, almost like human hand control. The gas pedal can react like the stepping corresponding to the hard or soft push on joystick. The brake pedal response really well and can act immediately to prevent danger.

Built With

Share this project: