Nova-Bot is a high-performance differential drive robot designed for autonomous navigation in complex indoor environments. Built on ROS 2 Jazzy with Gazebo Harmonic simulation, it features advanced lidar-based SLAM, real-time obstacle avoidance, and full Nav2 integration for autonomous operation.
- Autonomous Navigation: Full Nav2 stack integration with dynamic obstacle avoidance
- SLAM Mapping: Real-time map building using SLAM Toolbox
- AMCL Localization: Adaptive Monte Carlo Localization for precise pose estimation
- Sensor Suite: 360ยฐ lidar (100 Hz), RGB camera, IMU sensor
- High Performance: 1.0 m/s max speed, optimized for fast navigation
- Multiple Environments: Home world with furniture, empty world, and maze
- Gazebo Simulation: Realistic physics simulation with sensor modeling
- RViz Visualization: Real-time robot state and sensor visualization
Robot URDF/Xacro model with complete sensor suite.
- Differential drive base with wheels
- 360ยฐ lidar sensor (100 Hz update rate)
- RGB camera with image bridge
- IMU sensor for orientation
- Visual and collision meshes
Gazebo Harmonic simulation environment.
- Home world with kitchen, bedroom, and furniture
- Empty world for testing
- Gazebo bridge for sensor data and robot control
- RViz integration for visualization
Complete Nav2 navigation stack with optimized parameters.
- Mapping: SLAM Toolbox for real-time map building
- Localization: AMCL for robot pose estimation
- Navigation: Nav2 with DWB controller and obstacle avoidance
- EKF: Sensor fusion for improved odometry
- ROS 2: Jazzy Jalisco
- Gazebo: Harmonic
- Operating System: Ubuntu 24.04
- Dependencies:
ros-jazzy-navigation2ros-jazzy-nav2-bringupros-jazzy-slam-toolboxros-jazzy-ros-gz-simros-jazzy-ros-gz-bridgeros-jazzy-robot-localizationros-jazzy-interactive-marker-twist-serverros-jazzy-rviz2
# Create workspace
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
# Clone repository
git clone https://github.com/YOUR_USERNAME/nova-bot.git
cd ..
# Install dependencies
rosdep install --from-paths src --ignore-src -r -y
# Build workspace
colcon build --symlink-install
# Source workspace
source install/setup.bashLaunch the robot in Gazebo simulation:
ros2 launch nova_bot_gazebo gazebo.launch.pyOptional parameters:
ros2 launch nova_bot_gazebo gazebo.launch.py world:=home.sdf x:=2.5 y:=1.5 yaw:=-1.5707View robot model without simulation:
ros2 launch nova_bot_description display.launch.pyCreate a map of the environment:
# Launch mapping with RViz
ros2 launch nova_bot_navigation mapping.launch.py
# Drive robot with keyboard (in new terminal)
ros2 run teleop_twist_keyboard teleop_twist_keyboard
# Save map when done
ros2 run nav2_map_server map_saver_cli -f ~/maps/my_mapNavigate autonomously using the saved map:
ros2 launch nova_bot_navigation navigation.launch.pyUse RViz to set navigation goals with "2D Goal Pose" tool.
Localize robot on existing map:
ros2 launch nova_bot_navigation localization.launch.py- Max Linear Velocity: 1.0 m/s
- Max Angular Velocity: 1.5 rad/s
- Navigation Speed: 0.8 m/s
- Lidar Update Rate: 100 Hz
- Lidar Range: 0.12m - 10.0m, 360 samples
- Odometry Frequency: 50 Hz
Moving around:
u i o
j k l
m , .
q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
nova-bot/
โโโ nova_bot_description/ # Robot URDF models and meshes
โ โโโ urdf/ # URDF/Xacro files
โ โ โโโ nova_bot.urdf.xacro
โ โ โโโ nova_bot.gazebo.xacro
โ โ โโโ common/ # Properties, inertia, positions
โ โ โโโ component/ # Base, wheels, sensors
โ โโโ meshes/ # 3D models (visual & collision)
โ โ โโโ visual/
โ โ โโโ collision/
โ โโโ rviz/ # RViz configurations
โ โโโ launch/ # Display launch files
โโโ nova_bot_gazebo/ # Gazebo simulation
โ โโโ worlds/ # SDF world files
โ โ โโโ home.sdf
โ โ โโโ empty.sdf
โ โโโ launch/ # Gazebo launch files
โโโ nova_bot_navigation/ # Navigation stack
โ โโโ config/ # Nav2 & SLAM parameters
โ โ โโโ amcl_localization.yaml
โ โ โโโ navigation.yaml
โ โ โโโ slam_toolbox_mapping.yaml
โ โ โโโ ekf.yaml
โ โโโ maps/ # Saved maps
โ โโโ rviz/ # Navigation RViz configs
โ โโโ launch/ # Navigation launch files
โโโ media/ # Documentation images
- AMCL Localization:
nova_bot_navigation/config/amcl_localization.yaml - Navigation:
nova_bot_navigation/config/navigation.yaml - SLAM Toolbox:
nova_bot_navigation/config/slam_toolbox_mapping.yaml - EKF:
nova_bot_navigation/config/ekf.yaml
Robot not visible in RViz:
- Check TF tree:
ros2 run tf2_tools view_frames - Verify all nodes running:
ros2 node list - For display.launch.py, ensure Fixed Frame is set to
base_link
Navigation not working:
- Ensure initial pose is set in RViz (2D Pose Estimate)
- Check AMCL particle cloud is visible
- Verify map is loaded:
ros2 topic echo /map --once
Lidar not showing:
- Check scan topic:
ros2 topic echo /scan --once - Verify
nova_lidar_linkin TF tree
Display launch shows odom errors:
- This is normal - change Fixed Frame in RViz to
base_link
Contributions are welcome! Please feel free to submit pull requests or open issues.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Ojas Thombare
- ROS 2 Navigation Stack (Nav2)
- SLAM Toolbox
- Gazebo Simulator
- Open Robotics
Save map:
ros2 run nav2_map_server map_saver_cli -f ~/dev_ws/src/nova-bot/nova_bot_navigation/maps/my_mapros2 launch nova_bot_navigation navigation.launch.pySet goals using RViz "2D Goal Pose" button.
<max_linear_velocity>1.0</max_linear_velocity>max_vel_x: 0.8<update_rate>100</update_rate>Published:
/cmd_vel- Velocity commands/odom- Odometry/scan- Lidar (100Hz)/camera/image- Camera feed/imu/data- IMU
Subscribed:
/cmd_vel- Control input/map- Navigation map
Map frame error in RViz:
- Change Fixed Frame to
odomwhen running only Gazebo - Use
mapwhen running navigation
Robot not visible:
- Check Z spawn position > 0.1
- Enable RobotModel, TF, LaserScan in RViz
Navigation not working:
- Verify map is loaded
- Set initial pose with "2D Pose Estimate"
- Check
/scantopic is publishing
- ROS 2 Jazzy
- Gazebo Harmonic
- Nav2
- SLAM Toolbox
Apache-2.0
Ojas

