Ackermann Steering Vehicle Simulation in ROS2 with Gazebo Sim Harmonic 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…
This repository includes the simulation of a vehicle with an Ackermann drive system in ROS2 Humble & Jazzy and Gazebo Sim Harmonic, utilizing the Nav2 package for autonomous navigation.
Ackermann Steering Vehicle Simulation in ROS2 with Gazebo Sim Harmonic
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
If you like this project, consider giving it a ⭐ to show your support!
A custom vehicle model built with realistic Ackermann steering dynamics for accurate maneuverability.
2. ROS2 Communication
All sensor data and control signals are fully integrated into the ROS2 ecosystem for seamless interoperability.
3. Sensors
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 in saye_bringup/config/ros_gz_bridge.yaml to activate them (e.g., /camera/left_raw, /camera/right_raw, /camera/rear_raw).
4. Navigation
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.
5. Manual Control (with external joystick)
Added support for joystick-based manual control in the simulation environment, enabling users to test vehicle movement interactively.
6. Visualization
Full model and sensor data visualization in RViz2, providing insights into robot states and environmental feedback.
Requirements
ROS2 (Humble or Jazzy) — the Docker image is built on Jazzy
Gazebo Sim Harmonic
RViz2
Nav2
Local Installation
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 (Humble only) sudo apt-get install ros-${ROS_DISTRO}-teleop-twist-keyboard ros-${ROS_DISTRO}-joy (manual control)
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-ros2 cd ..
Build the project:
colcon build && source install/setup.bash
GZ_SIM_RESOURCE_PATH is set automatically when you source the workspace (source install/setup.bash);
no manual environment variables are needed. If you open a new terminal, just source the workspace again.
Docker Installation
You can also run the simulation using Docker, which ensures a consistent environment across different systems.
Prerequisites
Docker
NVIDIA Container Toolkit (for GPU support)
Steps to Run with Docker
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
Allow the container to access your X server (needed once per session, for the GUI):
xhost +local:docker
Build and run the Docker container (with GPU acceleration):
Note: The --gpus all --runtime=nvidia flags require the
NVIDIA Container Toolkit.
Without a GPU, Gazebo falls back to software rendering and runs very slowly.
If you don’t have an NVIDIA GPU, drop the --gpus, --runtime and
NVIDIA_* lines to run on CPU rendering.
Alternatively, use Docker Compose (GPU is already configured in docker-compose.yaml):
docker compose up --build
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.
Usage
1. Basic Simulation and Manual Control
Launch the simulation:
ros2 launch saye_bringup saye_spawn.launch.py
Control car:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
or with a gamepad (left stick -> /cmd_vel; the car stops if /joy is silent for 0.5 s, see the joy_timeout parameter):
ros2 run joy joy_node
ros2 run saye_control joystick_controller
2. SLAM (Simultaneous Localization and Mapping)
To run SLAM Toolbox for mapping, launch the following after starting the simulation:
ros2 launch saye_bringup slam.launch.py
3. Navigation with Nav2
To run the simulation with the Nav2 stack for autonomous navigation, launch the following after starting the simulation:
评论