| Name | Major / Role |
|---|---|
| Aaron Aviles | Mechanical Engineering |
| Makaio Richman | Mechanical Engineering |
| Rohan Nambimadom | Electrical and Computer Engineering |
| Ole Hennig | UPS / Project Contributor |
The goal of this project was to develop a language-controlled UCSD RoboCar that can receive spoken commands, interpret those commands locally, and execute vehicle motion through the ROS 2 control stack. The project also explored vision-based target following using the OAK-D camera.
The system combines speech recognition, local language interpretation, ROS 2 communication, VESC motor control, and OAK-D camera perception to create a more natural interface for controlling the robot.
- Voice commands for vehicle direction and speed control
- Basic commands such as forward, stop, left, right, faster, slower, and reverse
- ROS 2 integration with the existing UCSD RoboCar stack
- Command execution through the VESC motor controller
- LED feedback to confirm that a command was received
- Complex or unstructured voice commands
- Bilingual command recognition
- Vision tracking using the OAK-D camera
- Person or color-based following behavior
- Implemented voice command control for key driving actions
- Added English and German speech recognition using constrained Vosk models
- Used a local Qwen command interpretation model to map text input to robot commands
- Sent interpreted commands through the ROS 2 bridge to the VESC controller
- Added speed-related commands such as faster, slower, and reverse
- Created a proof-of-concept vision tracking system using the OAK-D camera
- Used HSV color filtering to detect red target regions
- Used stereo depth to estimate target distance and publish target position, range, and confidence
- Add LED feedback for robot status and command confirmation
- Use LED color or brightness to indicate current speed or command state
- Improve speech recognition in noisy environments
- Add noise filtering for the microphone input
- Use a wireless microphone to reduce motor-noise interference
- Replace HSV-based color tracking with a YOLO-based human detection model
- Improve vision tracking so the robot is less likely to confuse the target with similar colors in the background
- Test the full system more extensively in different lighting and floor conditions
The system is separated into four main stages:
-
Hardware Inputs
- USB microphone for voice commands
- OAK-D Lite camera for vision tracking
-
Perception and Intent
- Vosk speech recognition converts spoken commands into text
- Local Qwen model interprets the text command
- OAK-D camera provides RGB and stereo depth data
- HSV filtering detects red target regions for tracking
-
Decision and Control
- The interpreted command is converted into a motion command
- Vision target information is used for following behavior
- Speed and steering values are selected based on the current command or target
-
Actuation
- ROS 2 publishes drive commands
- VESC controls the motor and steering servo
- The robot executes the desired motion
flowchart LR
A[USB Microphone] --> B[Vosk Speech Recognition]
B --> C[Local Qwen Command Interpreter]
C --> D[ROS 2 Command Bridge]
D --> E[VESC Controller]
E --> F[Motor and Steering Servo]
F --> G[Robot Motion]
H[OAK-D Lite Camera] --> I[RGB + Stereo Depth]
I --> J[HSV Target Detection]
J --> K[Target Position, Range, Confidence]
K --> D
| Component | Purpose |
|---|---|
| Raspberry Pi 5 | Main onboard computer |
| OAK-D Lite Camera | RGB vision and stereo depth |
| USB Microphone | Voice command input |
| VESC Motor Controller | Motor and steering control |
| RC Car Chassis | Physical drive platform |
| Battery System | Power for robot electronics and drive system |
The project uses ROS 2 nodes inside the UCSD RoboCar Docker environment. The main software pipeline converts microphone input into text, interprets that text as a driving command, and sends the command through ROS 2 to control the VESC. A separate vision path uses the OAK-D camera for red target tracking.
The language-control path and vision-tracking path both connect to the robot control system, allowing the car to respond to spoken commands and perform basic target-following behavior.
| Node / Package | Role |
|---|---|
ucsd_robocar_sensor2_pkg |
Handles sensor input such as camera or microphone-related data |
ucsd_robocar_vision2_pkg |
Processes OAK-D camera frames and vision tracking |
ucsd_robocar_control2_pkg |
Converts interpreted commands into control behavior |
ucsd_robocar_actuator2_pkg |
Sends steering and throttle commands to the VESC |
vesc_twist_node / VESC interface |
Connects ROS 2 commands to the motor controller |
docker start t14robocar
docker exec -it t14robocar bashsource /opt/ros/jazzy/setup.bash
source /home/projects/ros2_ws/install/setup.bashIf helper commands are configured:
source_ros2cd /home/projects/ros2_ws
colcon build
source install/setup.bashOr, if helper commands are configured:
build_ros2
source_ros2Use the launch file or node command for the current version of the project. Example:
ros2 launch ucsd_robocar_vision2_pkg voice_vision_bringup.launch.pyOr run individual nodes for testing:
ros2 run ucsd_robocar_control2_pkg voice_bridge
ros2 run ucsd_robocar_vision2_pkg oakd_camera_node
ros2 run ucsd_robocar_vision2_pkg red_shirt_target_node
ros2 run ucsd_robocar_vision2_pkg person_follow_controller
ros2 run ucsd_robocar_vision2_pkg intent_safety_muxExample voice commands include:
- “Forward”
- “Stop”
- “Left”
- “Right”
- “Faster”
- “Slower”
- “Reverse”
For German control, use the supported German command set configured in the Vosk model and command interpreter.
| Issue | Possible Improvement |
|---|---|
| Latency still affects responsiveness | Use a Jetson Nano or other stronger onboard compute platform |
| Microphone is close to motor noise | Use a wireless microphone or external microphone placement |
| Speech recognition is not always accurate | Add noise filtering and better command constraints |
| German Vosk model can be accent-dependent | Test with more speakers and tune command phrases |
| HSV vision tracking can confuse similar colors | Replace HSV tracking with a YOLO-based person detector |
| LED feedback was not completed | Add LED status indicators for command received, ready state, and tracking state |
- Project scope can change quickly as new features are added.
- Voice control and vision tracking both require careful tuning to work reliably on a moving robot.
- Local command interpretation can reduce dependence on cloud services but still creates latency tradeoffs.
- Constrained commands are more reliable than fully open-ended language commands.
- HSV tracking is useful for a proof of concept, but a trained object detection model would be more robust.
- Hardware placement matters, especially for microphones near motors and electronics.
Thank you to Professor Jack Silberman, the ECEMAE 148 teaching team, and the UCSD RoboCar course staff for providing the robot platform, Docker environment, and project support.
| Name | Contact |
|---|---|
| Aaron Aviles | aaaviles@ucsd.edu |
| Makaio Richman | mmrichman@ucsd.edu |
| Rohan Nambimadom | rnambimadom@ucsd.edu |
| Ole Hennig | ole.hennig@tum.de |