From MAE/ECE 148 - Introduction to Autonomous Vehicles
Jump to navigation Jump to search

Team Members

  • Colin Riccio - Mechanical Engineering
  • Brian Pack - Mechanical Engineering
  • Carolin Lehmacher - Electrical Engineering


Robocar - Project

The picture on the right shows our Robocar and part of the wiring for our used project.

Robocar for our Project

Mechanical Design

Camera Mount

The mount system was 3d printed and had 3 parts: a camera backplate, a stand and a lidar mount. The Lidar mount ties into the front standoffs and the stand attaches to the electronics plate.

The camera mount has a pivot joint to allow for repositioning the camera angle. This proved to be initially helpful to set an optimal angle, but we ran into issues where if the mount was bumped it would lead to failures with our DonkeyCar models. It might be a good idea to first have a variable angle mount, find the best setting for the camera, and then create a static mount to use for training.

Electronic Plate The plate was designed with a full array of mounting holes to facilitate the attachment of parts anywhere on the plate. It was laser cut from 1/8th inch acrylic.

Electrical Design


  • Jetson Nano 2GB
  • Battery
  • USB Camera
  • Servo
  • Xerun 360
  • Anti spark switch
  • 12V to 5V Converter
  • Flipsky mini


The following picture shows the wiring of the robocar used for the project.


Autonomous Lab using ROS

The following video shows a short sequence of the autonomous labs of Team 8 using ROS.

File:ROS2 Lab.mov

Final Project

Project Overview Our goal for the final project was to build an image recognition node onto the ucsd_robocar2 that can detect a speed sign placed on the track and dynamically change the speed of the car.

Electronic Changes To control the speed of our car, we had to switch out the majority of our electronics and incorporate a VESC motor controller. The VESC can read the sensor in our brushless motor and use that information to set the RPM of the motor, meaning that instead of using PWM to control the motor we can now just send RPM values, directly changing the speed of the car. Because we switched to the VESC, we had to change from the ucsd_robo_car_simple_ros to the ucsd_robocar2 docker package as the ucsd_robo_car_simple_ros system cannot make use of the VESC.

Image Recognition To recognize different speed signs, we chose to use an Image Classification Neural Network. We decided to use image processing with OpenCV to filter the camera images delivered by the ros camera_node so that only the speed sign is visible in the hope it would make the Classification model stronger. We then used the ros calibration_node to find the best values for our filter, and then collected data for our 3 speed sign classes (~100 images of each sign for training and ~30 for validation) and one null class (~350 training images and ~90 for validation). To actually collect the data, a python script was written to capture an image from the camera, filter that image, and save it in the data folder structure used by the training pipeline we used.

After collecting the data, we used a training pipeline built by Team 1 for their final project which created a model built off of transfer learning from ResNet18.

This model can then be used to classify images passed to it in one of the 4 classes we collected data for.

Creating a ROS Node We then created a new ros node so that it can effect the speed of the car while the car is driving with the lane_guidence_node.