This project features the simulation of a custom vehicle with Ackermann steering capabilities, developed using ROS2 and the Gazebo Sim Harmonic environment. The model integrates a variety of sensors and navigation tools for autonomous operation, making it one of the first implementations of an Ackermann steering vehicle in this simulation framework.
| 3D LiDAR Point Cloud Visualization | Warehouse Environment Model |
|---|---|
![]() |
![]() |
- Ackermann Steering Vehicle Simulation in ROS2 with Gazebo Sim Harmonic
- Features
- Requirements
- Local Installation
- Docker Installation
- Usage
- Future Work
- Gallery
- TF Tree
- Star History
- A custom vehicle model built with realistic Ackermann steering dynamics for accurate maneuverability.
- All sensor data and control signals are fully integrated into the ROS2 ecosystem for seamless interoperability.
- IMU: Provides orientation and angular velocity.
- Odometry: Ensures accurate vehicle state feedback.
- LiDAR: Mounted for obstacle detection and environmental scanning. Supports 3D point cloud generation for advanced perception tasks.
- Cameras:
- Front-facing
- Rear-facing
- Left-side
- Right-side
Note: By default, only the front camera is bridged to ROS 2.If you want to use all cameras (left, right, rear) in ROS 2,remove the
#at the beginning of the relevant camera sections insaye_bringup/config/ros_gz_bridge.yamlto activate them (e.g.,/camera/left_raw,/camera/right_raw,/camera/rear_raw).
- Integrated with the Nav2 stack for autonomous navigation.
- AMCL (Adaptive Monte Carlo Localization) for improved positional accuracy.
- SLAM techniques implemented for real-time mapping and understanding of the environment.
- Fine-tuned parameters for optimized navigation performance.
- Added support for joystick-based manual control in the simulation environment, enabling users to test vehicle movement interactively.
- Full model and sensor data visualization in RViz2, providing insights into robot states and environmental feedback.
- ROS2 (Humble)
- Gazebo Sim Harmonic
- RViz2
- Nav2
-
Your need to sure that installation of Gazebo Harmonic and ROS (ros_gz):
sudo apt-get install ros-${ROS_DISTRO}-ros-gz
sudo apt-get install ros-humble-ros-gzharmonic(Only Humble version)
More details about installation Gazebo and ROS: Link -
Clone the repository:
mkdir -p ackermann_sim/src && cd ackermann_sim/src
git clone https://github.com/alitekes1/ackermann-vehicle-gzsim-ros2cd .. -
Build the project:
colcon build && source install/setup.bash -
Set environment variables:
# Set environment variables for current session export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:/your/path/ackermann_sim/src/ackermann-vehicle-gzsim-ros2/ export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/your/path/ackermann_sim/src/ackermann-vehicle-gzsim-ros2/
For Permanent Setup:
To make these environment variables permanent, add them to your
.bashrcfile:# Add environment variables to .bashrc echo 'export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:/your/path/ackermann_sim/src/ackermann-vehicle-gzsim-ros2/' >> ~/.bashrc echo 'export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/your/path/ackermann_sim/src/ackermann-vehicle-gzsim-ros2/' >> ~/.bashrc # Apply changes source ~/.bashrc
Note: Replace
/your/path/with your actual installation path.
You can also run the simulation using Docker, which ensures a consistent environment across different systems.
- Docker
- NVIDIA Container Toolkit (for GPU support)
-
Clone the repository:
mkdir -p ackermann_sim/src && cd ackermann_sim/src git clone https://github.com/alitekes1/ackermann-vehicle-gzsim-ros2 cd ackermann-vehicle-gzsim-ros2
-
Build and run the Docker container:
docker run -it \ --name ackermann_sim \ --hostname ackermann_sim \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --privileged alitekes1/ackermann_sim:latest
-
If you want to additional terminal for same container
docker exec -it ackermann_sim bash
Note: Inside the container, you can run the simulation commands as normal.
- Launch the simulation:
ros2 launch saye_bringup saye_spawn.launch.py
- Control car:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
- To run SLAM Toolbox for mapping, launch the following after starting the simulation:
ros2 launch saye_bringup slam.launch.py
- To run the simulation with the Nav2 stack for autonomous navigation, launch the following after starting the simulation:
ros2 launch saye_bringup navigation_bringup.launch.py
Note: The YouTube videos above are played at 4x speed. You can reach the videos by click on the images.
- 3D SLAM Support:
- Train the vehicle to handle complex scenarios autonomously using advanced DRL algorithms.
- Enhanced Features:
- Explore additional sensor configurations and navigation strategies.
- Nav2 entegration with 3D Localization
- Instead of AMCL(2D), more accurate and robust algorithms implementation.
| 3D LiDAR Point Cloud Visualization | Warehouse Environment Model |
|---|---|
![]() |
![]() |
| Gazebo Sim Harmonic | RViz2 |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |











