MAP GENERATION
roslaunch spark_gazebo spark_house.launch
# Robot State Publishers for the robot
# Spawns robot in gazebo
# LaserScan Merger
roslaunch spark_slam gmapping.launch
# Gmapping
OR
roslaunch spark_slam slamtoolbox_mapping.launch
# SlamToolBox
OR
roslaunch spark_slam cartographer.launch
# Cartographer
roslaunch spark_slam map_saver.launch map_name:=my_map
# Sae the Map
NAVIGATION ON SAVED MAP
roslaunch spark_gazebo spark_house.launch
# Robot State Publishers for the robot
# Spawns robot in gazebo
# LaserScan Merger
roslaunch spark_navigation spark_navigation.launch
# Map Server
# AMCL
# MoveBase
SLAM
roslaunch spark_gazebo spark_house.launch
# Robot State Publishers for the robot
# Spawns robot in gazebo
# LaserScan Merger
roslaunch spark_slam spark_slam.launch
# SLAM ToolBox Mapper
# MoveBase
Note
For arena to load in gazebo copy arena
directory within spark_gazebo
package to ~/.gazebo/models
DYNAMIC PROHIBITED SECTOR
# Launch Gazebo and Navigation
roslaunch spark_navigation prohibitor.launch
# Verify path to map and .yaml file
CHECKPOINT
Save checkpoints.
# Added in gazebo.launch (Bringup in real robot)
rosrun spark_slam checkpoint_saver.py /path_to/checkpoints.yaml
SINGLE GOAL
# Launch Gazebo and Navigation
roslaunch spark_navigation callback_goal
Description
└── Launch
└── description (Visualize tf and robot model)
Laser Merger
├── Launch
│ └── laser_merger (Merge LaserScan of both front and rear and produce a single LaserScan)
└── Node
└── ira_laser_merger
Gazebo
├── Launch
│ ├── empty_world (Empty simulation env with robot)
│ ├── turtlebot3_house (Indoor simulation env with robot)
│ └── arena (Arena for Robocon 24)
└── Node
└── battery (Simulation of linear battery discharge)
Control
└── Node
└── spark_teleop.py (Teleop)
Slam
└── Launch
├── map_saver (save map in the navigation package)
├── gmapping (map generation using gmapping package)
├── cartographer (map generation using cartographer)
├── slamtoolbox_mapping (map generation using slamtoolbox)
├── spark_slam (slam using any of the above mapping agent)
├── checkpoint_saver.py (stores the current robot pose as checkpoint after calling the service) Usage
└── update_initpose.py (Gets milestone from user in form of service and pubs topic to /amcl/initialpose) Usage
Navigation
├── Launch
│ ├── spark_amcl (Localization of the robot in the environment)
│ ├── spark_move_base (Navigation entity)
│ └── spark_navigation (To start map server, amcl, and move_base)
![]() |
![]() |
└──Node
├── Dynamic prohibition layer: prohibitor.py (Adds removes sectors within map as prohibited layer after reading from YAML) Usage
![]() |
![]() |
![]() |
Navigation_goals
├── Launch
│ └──
└── Node
├── raw_goal (Send Single Goal using direct topic publishment and not via Actionlib)
├── simple_goal (Send Single Goal using Actionlib)
├── callback_goal (Create callback and do not wait for result)
└── switch_fsm (fsm implementation independent of ros)
BT Examples
├── Sync_No_Loop
├── Sync_Loop
├── Reactive (Async behavior with Reactive sequence and memory)
└── port_blackboard (Same MoveToGoal SyncActionNode but to which goal to reach is defined by port name)
ROS vs BT
├── ros_vs_bt
├── ros_and_bt
└── thread (is multi-threading a problem)
Wait Recovery
Backoff Recovery