Prerequisites
Before you begin, ensure you have:Docker
Docker Desktop (Windows/macOS) or Docker Engine (Linux)
VS Code
Visual Studio Code with Dev Containers extension
Git
Git version control system
GitHub account
For forking and submitting pull requests
System requirements
Minimum specifications
- CPU: 4 cores
- RAM: 8 GB
- Disk: 20 GB free space
- OS: Windows 10/11, macOS 10.15+, or modern Linux distribution
Recommended specifications
- CPU: 6+ cores
- RAM: 16 GB
- Disk: 50 GB free space
- GPU: For hardware-accelerated Gazebo rendering
Development work, especially testing Gazebo simulations, benefits significantly from additional CPU and RAM resources.
Initial setup
1. Fork and clone the repository
2. Configure Docker resources
Allocate sufficient resources for development: Docker Desktop (Windows/macOS):- Open Docker Desktop
- Settings → Resources
- Adjust:
- CPUs: 4-6 cores
- Memory: 8-16 GB
- Disk: 50 GB
- Apply & Restart
3. Open in VS Code
4. Build the dev container
Open in container
- Click “Reopen in Container” when prompted
- Or press
F1→ “Dev Containers: Reopen in Container”
Wait for build
First build takes 10-15 minutes:
- Downloads base Ubuntu 24.04 image (~1GB)
- Installs ROS2 Jazzy packages (~2GB)
- Installs Gazebo Harmonic (~500MB)
- Clones TurtleBot3 repositories
- Builds ROS2 workspace
Development workflow
Making changes
Create a feature branch
feature/add-slam-toolboxfix/vnc-connectiondocs/update-readme
Make your changes
Edit files in the project:
.devcontainer/Dockerfilefor container image changes.devcontainer/devcontainer.jsonfor VS Code configuration.devcontainer/post-create.shfor setup scriptsREADME.mdfor documentation
Testing changes
Rebuild the container
After modifying dev container files:Verify ROS2 workspace
Test that packages build correctly:Test simulations
Always test all launch aliases to ensure nothing breaks.
Check VNC access
Verify browser-based GUI:- Open http://localhost:6080
- Enter password:
ros - Confirm desktop and Gazebo display correctly
Committing changes
Write clear, descriptive commit messages:Syncing with upstream
Keep your fork up to date:Project structure
Key files and directories:Configuration files
Dockerfile
Defines the container image:- Base image:
osrf/ros:jazzy-desktop-full-noble - System packages and dependencies
- ROS2 and Gazebo installation
- Development tools
devcontainer.json
Configures VS Code integration:- VS Code extensions to install
- Port forwarding (6080 for noVNC)
- Environment variables
- Lifecycle scripts (post-create, post-start)
post-create.sh
Runs once when container is created:- Sources ROS2 environment
- Clones TurtleBot3 repositories
- Installs dependencies
- Sets up bash aliases
post-start.sh
Runs every time container starts:- Builds ROS2 workspace
- Displays quick start instructions
Troubleshooting development issues
Container won’t build
Check Docker daemon:Changes not taking effect
Rebuild without cache:F1→ “Dev Containers: Rebuild Container Without Cache”
Port conflicts
Check if port 6080 is in use: Windows:.devcontainer/devcontainer.json:
Getting help
If you encounter issues:GitHub Issues
Search existing issues or create a new one
ROS Discourse
Ask general ROS2 and dev container questions
Next steps
Once your environment is set up:- Read the contribution guidelines
- Look for “good first issue” labels in the issue tracker
- Join discussions on proposed features
- Share your improvements via pull requests