Since you're daily driving Arch and using Neovim, you want a README that is technically dense but quick to scan. This is the Nova Project Manual, tailored for your specific UID-mapped Docker workflow.
Nova is a high-performance autonomous racing environment built for the 2026 ICRA competition. It uses a custom-layered Docker architecture to bridge an Arch Linux host (Neovim/Development) with a ROS 2 Humble container (Simulation/Execution).
- Host: Arch Linux (UID 1000) + Neovim
- Container: Ubuntu 22.04 + ROS 2 Humble + CUDA 12.x
- Sync: Bidirectional volume mount on
./srcwith UID/GID mapping to preventPermission deniederrors.
- NVIDIA Container Toolkit: Ensure
nvidia-smiworks on the host. - Docker Compose: Installed on Arch (
sudo pacman -S docker-compose). - X11 Permissions: Run
xhost +local:dockerbefore launching to enable GUI/RViz.
Create a .env file in the root directory to map your Arch user to the container:
# Get your IDs
echo "UID=$(id -u)" > .env
echo "GID=$(id -g)" >> .envBuild and start the Nova environment:
docker compose build
docker compose up -dJump into the container to run ROS 2 commands:
docker exec -it nova_devkit bashEdit files inside ./src using Neovim on your Arch host. Changes are instantly visible inside the container.
Inside the nova_devkit container:
# 1. Build the Nova packages
cd /home/ros2_ws
colcon build --symlink-install
# 2. Source the environment
source install/setup.bash
# 3. Launch the Follow the Gap (FTG) Node
ros2 run nova_ftg ftg_nodeTo visualize the LiDAR scans and the car's trajectory in RViz:
ros2 launch autodrive_roboracer bringup_graphics.launch.pyWhen Nova is ready for the competition, use the provided Dockerfile to "bake" your source code into a portable image:
- Build Final Image:
docker build -t nova_submission:latest . - Export for Judges:
docker save nova_submission:latest | gzip > nova_icra_practice.tar.gz
- Permission Errors: Run
sudo rm -rf build/ install/ log/on the host and rebuild. - Display Issues: Run
xhost +local:dockeron Arch. - Command Not Found: Ensure you have
source /opt/ros/humble/setup.bashin your container's.bashrc.
Note: This setup is optimized for the 2026-icra-practice image. Ensure the
image:tag incompose.yamlmatches the latest competition release.