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

Team Members

Kennan Gonzales (MAE)

McKinley Souder (ECE)

Cade Wohltman (MAE)

Project Overview

UCSD has access to plenty of robots with autonomous capabilities however, a lot of them are sitting in a lab waiting to be used. Our team aims to implement a ROS package that would allow all of those robots to be of use even when people aren't in the immediate vicinity. To alleviate this issue a room would be setup with a camera such that an individual could log into one of UCSD's robots, deploy their programming package, and when they were done using it our ROS package would launch. Our ROS packaged intends to autonomously navigate itself to a designated location marked with an AprilTag.

Functional Requirements

  • Make use of an Ackermann Steering RC car
  • A camera with at least 30 FPS
  • An RPLidar for collision prevention
  • A SBC for data processing
  • A PWM for both the servo and stepper motor

Hardware Design


Donkey/ROSRacer Camera Mount Assembly

The camera mounting assembly was designed with the ability to adjust the height and angle of the camera to get the best possible position of the track. This design not only allowed for different camera position configurations but also prioritized protection of the camera in the event of a collision. In fact, the mount was able to survive a full speed collision with a wall and the only part that suffered any damage was the acrylic base plate. The only disadvantage to this design was the time that it took to print the components (~ 10 hrs).

GarageNav Camera Mount Assembly

The original design for the camera mount had to be altered to allow for the RPlidar to have 360 degree clearance to prevent any blind spots. The camera height was determined from the previous design and a hinge was designed in order to allow adjustment to the camera mount.

Lidar Mount

Camera Mount

Electrical Design


  • LiPo Battery
  • Battery Monitor
  • Stepper Motor (Throttle)
  • Servo Motor (Steering)
  • Electronic Speed Controller
  • USB Camera
  • RPLidar
  • 12V - 5V Buck Converter
  • Jetson Nano
  • Relay Module & Key Fob
  • LED
  • PWM (16 Channels)

Software Design

GitHub Repo

Our files are available in this GitHub repository: garageNav


We used our TA Dominic's package [ucsd_robo_car_simple_ros](https://gitlab.com/djnighti/ucsd_robo_car_simple_ros) for his convenient launch file for throttle and steering, and to house our script and launch file.

Our project also depends on the [apriltag_ros](http://wiki.ros.org/apriltag_ros) package as well as the [rplidar](http://wiki.ros.org/rplidar) package to support both identifying AprilTags through the webcam and getting the sensor data from the lidar.


Our files integrate with ucsd_robo_car_simple_ros, and use the topics published by the ariltag_ros and rplidar packages to decide steering and throttle values for the car in order to autonomously return to the garage.

This package uses the topics published by the two scripts found in our repo to get the camera image and configuration matrix. It subscribes to them to continuously detect tags present in the video stream from our webcam, and publishes their position relative to the camera frame to the /tf topic


Clone the apriltag, rplidar, and ucsd_robo_car_simple_ros packages as well as any dependencies listed on their repositories. Then add the file in this repo's scripts dir to ucsd_robo_car_simple_ros's scripts dir, and this repo's launch file to ucsd_robo_car_simple_ros's launch dir. Additionally, the cv_ros and camera_info python files must be added to the apriltag_ros scripts directory to publish the camera topics for apriltag_ros to use. Our launch file will find the packages we depend on and launch their respective launch files. Within apriltag_ros, it is necessary to add the tags intended to be used to tags.yaml so that their transforms will be published.


Future Plans & Improvements

The team originally planned on using the hector_slam ROS package to map out the environment with the RPLidar. Then the car could instantly localize itself in the room using a combination of AprilTags and ScanMatcher packages. This would have allowed the navigation stack in rviz to be used for setting goal positions and path planning. However, there were some issues integrating the AprilTag and RPLidar transforms together in the rviz environment. Due to time constraints the team decided to use