Skip to main content
Get the Innex1 Rover simulation running in minutes.

Prerequisites

Complete the installation guide before proceeding.

Workspace setup

1

Clone the repository

Clone the Innex1 Rover source code:
git clone https://github.com/KJdotIO/innex1-rover.git
cd innex1-rover
2

Install dependencies

Use rosdep to automatically install all package dependencies:
rosdep install --from-paths src -y --ignore-src
This command scans all packages in src/ and installs missing ROS dependencies.
3

Build the workspace

Build all packages using colcon:
colcon build --symlink-install
The --symlink-install flag allows you to edit launch files and world files without rebuilding.
Build time: 2-5 minutes depending on your system.
4

Source the workspace

Load the built packages into your environment:
source install/setup.bash
Add this to your ~/.bashrc to automatically source the workspace:
echo "source ~/innex1-rover/install/setup.bash" >> ~/.bashrc
5

Set up GZ Web alias (optional)

Create a convenient alias for web-based visualization:
echo "alias gzweb='ign launch \$(ros2 pkg prefix lunabot_simulation)/share/lunabot_simulation/config/websocket.ign'" >> ~/.bashrc
source ~/.bashrc

Launch the simulation

Start the moon yard simulation:
ros2 launch lunabot_simulation moon_yard.launch.py
You should see output indicating:
  • Gazebo server starting
  • Moon yard world loading
  • Robot description published
  • Rover spawning at coordinates (0.0, 0.0, 0.5)
  • ROS-Gazebo bridges active
The simulation runs in headless mode by default to conserve resources. The rover spawns above the surface and settles under gravity.

Verify the simulation

In a new terminal, check active topics:
source install/setup.bash
ros2 topic list
Expected topics include:
  • /cmd_vel - Velocity commands
  • /odom - Odometry data
  • /imu/data_raw - IMU measurements
  • /scan - 2D LiDAR data
  • /camera_front/image - Front camera feed
  • /camera_front/depth_image - Depth data
  • /joint_states - Wheel joint states

Quick test drive

Control the rover with keyboard teleoperation:
1

Launch teleop

In a new terminal:
source install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
2

Drive the rover

Use these keys:
  • i - Forward
  • k - Stop
  • , - Backward
  • j - Rotate left
  • l - Rotate right
  • q - Increase speed
  • z - Decrease speed
Keep the teleop terminal focused to receive keyboard input.

Workspace structure

The repository is organized as follows:
innex1-rover/
├── src/
│   ├── external/              # Third-party packages
│   │   ├── leo_common-ros2/   # Leo Rover description
│   │   └── leo_simulator-ros2/ # Leo Gazebo plugins
│   ├── lunabot_bringup/       # System launch files
│   ├── lunabot_control/       # Control algorithms
│   ├── lunabot_description/   # Robot URDF and meshes
│   ├── lunabot_interfaces/    # ROS actions and messages
│   ├── lunabot_localisation/  # AprilTag, EKF, SLAM
│   ├── lunabot_navigation/    # Nav2 configuration
│   ├── lunabot_perception/    # Hazard detection
│   ├── lunabot_simulation/    # Gazebo worlds and launch
│   └── lunabot_teleop/        # Manual control
├── build/                     # Build artifacts
├── install/                   # Installed packages
└── log/                       # Build and runtime logs

Development workflow

Editing launch and world files

With --symlink-install, you can edit .launch.py and .sdf files without rebuilding:
  1. Edit the file in src/lunabot_simulation/
  2. Kill Gazebo: pkill -9 -f "gz sim"
  3. Relaunch: ros2 launch lunabot_simulation moon_yard.launch.py

When to rebuild

Rebuild when you change:
  • CMakeLists.txt or package.xml
  • C++ source files
  • Python package structure
  • Adding new files
colcon build --symlink-install
source install/setup.bash
Build only specific packages:
colcon build --packages-select lunabot_perception

Troubleshooting

Launch file not found: Ensure the launch directory is installed in CMakeLists.txt:
install(DIRECTORY
  launch
  DESTINATION share/${PROJECT_NAME}
)
Rebuild after making changes. Multiple Gazebo instances: Kill all Gazebo processes:
pkill -9 -f "gz sim"
Models not loading: Gazebo downloads models from the internet on first launch. Ensure you have an active connection. Models cache locally in ~/.gz/fuel/ for offline use. Package not found after building: Source the workspace:
source install/setup.bash

Next steps

Run simulation

Launch visualization tools and explore the environment

API Reference

Learn about ROS topics, actions, and services

Build docs developers (and LLMs) love