π€ Automated Ubuntu ISO builder with pre-configured ROS2 environment for robotics development
This project provides a complete automation pipeline using Ansible and GitHub Actions to create custom Ubuntu ISO images with ROS2 and robotics development tools pre-installed.
- Target: Desktop/laptop development machines
- OS: Ubuntu 22.04 LTS with ROS2 Humble
- Tools: Full desktop environment, development tools, ROS2 Desktop
- Workspace: Pre-configured
~/ros2_ws
- Target: Raspberry Pi 5 robotics projects
- OS: Ubuntu 24.04 LTS with ROS2 Jazzy
- Hardware: GPIO, I2C, SPI interfaces pre-configured
- Tools: Robotics libraries, hardware abstraction layers
- Workspace: Pre-configured
~/robot_ws
-
Download from Releases
# Check latest releases wget https://github.com/your-username/shr_core/releases/latest -
Flash to Storage
# For Raspberry Pi 5 (ARM64) sudo dd if=ros2-robotics-kit-arm64-ubuntu24.04-ros2jazzy.iso of=/dev/sdX bs=4M status=progress # For PC/Laptop (AMD64) sudo dd if=ros2-robotics-kit-amd64-ubuntu22.04-ros2humble.iso of=/dev/sdX bs=4M status=progress
-
Boot and Install
- Boot from USB/SD card
- Follow installation wizard
- System ready for ROS2 development!
-
Setup Dependencies
git clone https://github.com/your-username/shr_core.git cd shr_core ansible-playbook ansible/playbooks/setup_kit.yaml -i localhost, --connection=local --ask-become-pass -
Build ISOs
# Build development environment ISO (AMD64) make build-dev # Build robotics kit ISO (ARM64) make build-kit # Build both make build-both
-
Test Build
# Test Ansible playbooks make test-ansible # Test ISO with QEMU (AMD64 only) make test-iso-amd64
shr_core/
βββ .github/workflows/ # GitHub Actions CI/CD
β βββ build-iso.yml # Automated ISO building
βββ ansible/ # Ansible automation
β βββ roles/ros2/ # ROS2 installation role
β βββ playbooks/ # Environment setup playbooks
βββ scripts/ # ISO building scripts
β βββ prepare-base-system.sh
β βββ apply-ansible-config.sh
β βββ build-iso.sh
βββ docker/ # Docker support
βββ Makefile # Local development commands
Customize builds by setting environment variables:
# Use different ROS2 distribution
make build-dev ROS2_DISTRO=iron
# Target different Ubuntu version (override defaults)
make build-kit UBUNTU_VERSION=22.04 # Force older version for ARM64
# Custom architecture
make _build ARCHITECTURE=amd64 ROS2_DISTRO=jazzyModify the Ansible playbooks in ansible/playbooks/:
setup_dev.yaml- Development environmentsetup_kit.yaml- Robotics kit environment
Add packages to the ros2_additional_packages variable in playbooks:
ros2_additional_packages:
- ros-humble-navigation2
- ros-humble-slam-toolbox
- ros-humble-moveitThe GitHub Actions workflow automatically:
- β Validates Ansible playbooks
- ποΈ Builds ISOs for both architectures
- π§ͺ Tests ISO integrity
- π¦ Creates GitHub releases
- π Generates checksums
- Push to main/develop: Build and test
- Tags (v)*: Build and create release
- Manual dispatch: Custom parameters
- Pull requests: Validation only
# Trigger manual build via GitHub CLI
gh workflow run build-iso.yml \
--field ros2_distro=humble \
--field ubuntu_version=22.04 \
--field architecture=arm64# Validate Ansible
make test-ansible
# Test ISO boot (requires QEMU)
make test-iso-amd64
# Test GitHub Actions locally (requires act)
make github-testDevelopment Environment (AMD64):
# After installation
source ~/.bashrc
ros2 --version
ros2 topic list
cw # Navigate to workspaceRobotics Kit (ARM64):
# After installation and reboot
source ~/.bashrc
ros2 --version
gpio_status # Check GPIO
rw # Navigate to robot workspace- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Test changes (
make test-ansible) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
- Ubuntu 20.04+ or similar Linux distribution
- 20GB+ free disk space
- Internet connection for package downloads
- sudo privileges
- AMD64: Any x86_64 PC with 4GB+ RAM
- ARM64: Raspberry Pi 5 with 4GB+ RAM
- 16GB+ storage (SD card/USB/SSD)
Build fails with permission errors:
sudo chmod 777 /tmp/iso-build /tmp/iso-outputQEMU emulation issues:
sudo update-binfmts --enable qemu-aarch64Network issues in chroot:
# Check DNS resolution
cat /etc/resolv.confEnable verbose output:
make build-dev VERBOSE=1This project is licensed under the MIT License - see the LICENSE file for details.
- ROS2 Community for the excellent robotics framework
- Ubuntu for the solid foundation
- Ansible for infrastructure automation