Project On-campus Vehicle Autonomous Launch (OVAL) is a research and development project aimed at designing an autonomous vehicle capable of navigating NC State University's campus. The project provides a platform for students to test autonomous vehicle algorithms in a real-world environment. Additionally, it opens possibilities for campus applications such as package delivery, security patrols, plant monitoring, or other autonomous tasks.
The system architecture includes:
- Onboard Computer (Jetson Orin) – Runs ROS2 nodes for perception, control, and navigation.
- GUI Computer – Provides a graphical interface for monitoring and control.
- AWS EC2 Web Server – Optional remote server for logging, telemetry, or additional processing.
💡 Suggested addition: A system diagram showing the connections between Jetson, sensors, GUI, and AWS could help new users visualize the setup.
The Jetson Orin runs several ROS2 nodes to interface with the vehicle hardware. The primary nodes are:
joy_node– Reads XBox controller inputsswiftnav_ros2_driver– Interfaces with the Piksi Multi GNSSzed_camera– Streams stereo camera dataxbox_controller_node– Handles additional controller featuresmotor_actuation_node– Sends commands to the motors
💡 Suggested addition: Include a table summarizing each node, its purpose, and required hardware.
Outputs joystick inputs from the XBox controller.
ros2 run joy joy_node --ros-args -p autorepeat_rate:=0.0Outputs Lidar Pointcloud.
ros2 launch velodyne velodyne-all-nodes-VLP16-launch.pyTo viz:
rviz2 ## change to velodyne frameShow the Team and other messages
python message_display.py ## To show GUI
python oval_message.py ## To send messages for GUIControl the robot using voice commands
python wolfwagen_live_demo.py ## To show GUI and listenShow the Team and other messages
python telemetry_ros2.py ## To connect to RadioOutputs ZED camera topics. Documentation: Stereolabs ZED ROS2 Node.
ros2 launch zed_wrapper zed_camera.launch.py camera_model:=zed2i- Check CUDA installation
nvidia-smi-
Install ZED SDK Follow the official ZED SDK installation instructions for NVIDIA Jetson. This may take ~30 minutes.
-
Set up the environment Follow the ROS2 environment setup instructions.
💡 Suggested addition: Include instructions for testing the ZED camera stream after setup.
Setup instructions for the SwiftNav Piksi Multi ROS2 package.
Follow the SwiftNav ROS2 package instructions.
If TCP connection issues occur, set up the Jetson Ethernet interface manually:
sudo ip addr add 192.168.0.100/24 dev eno1
ping 192.168.0.222USB may be preferable to avoid Ethernet setup. Some RS232-to-USB adapters may not work on the Jetson due to missing drivers.
Check for the PL2303 driver:
zcat /proc/config.gz | grep -i 'pl2303'If it returns #CONFIG_USB_SERIAL_PL2303 is not set, use an FTDI or CH340/CH341 adapter.
ros2 launch swiftnav_ros2_driver start.py💡 Suggested addition: Add a small troubleshooting section for common GNSS issues (e.g., no fix, bad TCP connection).
cd ~/ros2_ws/src/project-ovalgit clone https://github.com/LiamBindle/PyVESC.git
cd PyVESCpython -m pip install -e .
python -m pip install pyserialcd ~/ros2_ws/src/project-oval/project-oval
python driver_node.py💡 Suggested addition: Include instructions for ROS2 integration with PyVESC and how to verify motor actuation.
This repository follows a lightweight but strict Git workflow to keep development organized, reviewable, and stable—especially important for autonomous vehicle development where software, simulation, and hardware intersect.
Please read and follow these rules before contributing.
Branches should be short-lived.
- If you create a new branch, it should be merged or closed within 7 days.
- If work is ongoing past a week:
- Open a pull request with incremental progress, or
- Clearly note why the branch is staying open.
This helps prevent abandoned branches and keeps development moving.
All changes must go through pull requests.
- Any successful or functional change—no matter how small—should be submitted as a pull request.
- Draft pull requests are encouraged for incomplete or in-progress work.
- This applies even if you are the only one working on the branch.
Pull requests are used to track changes to main, discuss design decisions, and preserve project history.
Each branch should have a single, clear purpose.
- Avoid mixing unrelated changes in the same branch.
- Examples of unrelated changes:
- Sensor drivers + visualization tweaks
- Control logic + documentation cleanup
Keeping branches focused makes reviews, testing, and debugging significantly easier.
Every pull request must include:
- What changed
- Why it changed
- How it was tested
- Simulation
- Hardware
- Log playback
- Or explicitly state if it was not tested
Clear PR descriptions save time and reduce misunderstandings.
Direct pushes to main are not allowed.
- All changes must be merged through pull requests.
- This rule applies to everyone, regardless of role.
This ensures visibility, review, and traceability of all changes.
The main branch must always build and run.
- Do not merge changes that break:
- Builds
- Simulation
- Deployment pipelines
- If a change introduces a breaking issue, it must be fixed before merging.
main should always represent a stable, usable state of the project.
Commits should be clear and intentional.
- Use descriptive commit messages.
- Avoid vague messages like:
wipfixstuff
- Each commit should represent a coherent, logical change.
Good commit history makes debugging, reverting, and collaboration far easier.
These rules exist to:
- Prevent branch sprawl
- Keep
mainstable - Make collaboration and review painless
- Save time during testing, deployment, and field work
If something doesn’t fit neatly into these rules, communicate early via a pull request or discussion.
- System Requirements: List Jetson OS version, ROS2 version, Python version, and minimum hardware requirements.
- Startup Script: Consider creating a single script to launch all nodes in the correct order.
- Troubleshooting Section: Include common error messages for ROS2, ZED, Piksi Multi, and PyVESC.
- Data Logging: Provide instructions for recording sensor or GNSS data for research purposes.
- References: Include links to relevant ROS2, ZED, Piksi, and PyVESC documentation for quick reference.