# tamu-robomasters/nav2-sim-testing architecture

> Architecture diagram of the GitHub repository tamu-robomasters/nav2-sim-testing, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tamu-robomasters/nav2-sim-testing
- Repository: https://github.com/tamu-robomasters/nav2-sim-testing

## Overview

This repository provides ROS 2 simulation and navigation bringup for a SAM bot, with a separate keyboard teleoperation node. The principal workflow is to launch the robot simulation and visualization, then start laser processing and either online SLAM with navigation or map-based AMCL localization with navigation. The launch files establish these stages; sampled source confirms the robot model, state publishing, EKF, visualization, and teleop behavior. The multi-laser and Nav2 internals were not sampled, so their documented launch/config roles are shown without internal wiring.

Main entry points: [`src/sam_bot_description/launch/display.launch.py`](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py) (Display launch), [`src/sam_bot_bringup/launch/bringup.launch.py`](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup.launch.py) (SLAM bringup), [`src/sam_bot_bringup/launch/bringup_amcl.launch.py`](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup_amcl.launch.py) (AMCL bringup), [`src/sam_bot_description/src/description/sam_bot_description.urdf`](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/src/description/sam_bot_description.urdf) (Robot model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bringup["Launch orchestration"]
  node_standard_bringup["SLAM bringup<br/>[bringup.launch.py]"]
  node_amcl_bringup["AMCL bringup"]
end

subgraph group_simulation["Robot simulation"]
  node_display_launch["Display launch<br/>[display.launch.py]"]
  node_gazebo["Gazebo simulator"]
  node_world["Simulation world<br/>[my_world.sdf]"]
  node_robot_model["Robot model"]
  node_joint_state["Joint state publisher<br/>[display.launch.py]"]
  node_robot_state["Robot state publisher<br/>[display.launch.py]"]
  node_ekf["EKF localization<br/>[display.launch.py]"]
  node_ekf_config["EKF parameters<br/>[ekf.yaml]"]
  node_rviz["RViz visualization<br/>[display.launch.py]"]
end

subgraph group_navigation["Mapping and navigation"]
  node_laser_toolbox["Multi-laser toolbox"]
  node_laser_config["Laser parameters"]
  node_slam["Online SLAM"]
  node_nav2_navigation["Nav2 navigation"]
  node_nav2_amcl["Nav2 AMCL bringup"]
  node_nav2_config["Nav2 parameters<br/>[nav2_params.yaml]"]
  node_map["Saved map<br/>[my_map.yaml]"]
end

subgraph group_control["Robot control"]
  node_teleop["Keyboard teleop<br/>[teleop_keyboard.py]"]
  node_cmd_vel["Velocity commands"]
end

node_operator(("Operator"))

node_operator -->|"launches"| node_standard_bringup
node_operator -->|"launches"| node_amcl_bringup
node_standard_bringup -->|"includes"| node_display_launch
node_standard_bringup -->|"launches delayed"| node_laser_toolbox
node_standard_bringup -->|"launches delayed"| node_slam
node_standard_bringup -->|"launches delayed"| node_nav2_navigation
node_amcl_bringup -->|"includes"| node_display_launch
node_amcl_bringup -->|"launches delayed"| node_laser_toolbox
node_amcl_bringup -->|"launches delayed"| node_nav2_amcl
node_display_launch -->|"starts"| node_gazebo
node_display_launch -->|"starts"| node_joint_state
node_display_launch -->|"starts"| node_robot_state
node_display_launch -->|"starts"| node_ekf
node_display_launch -->|"starts"| node_rviz
node_display_launch -->|"loads"| node_world
node_display_launch -->|"configures"| node_robot_model
node_robot_state -->|"publishes description"| node_robot_model
node_gazebo -->|"spawns from description"| node_robot_model
node_ekf -->|"reads"| node_ekf_config
node_standard_bringup -->|"passes parameters"| node_laser_config
node_amcl_bringup -->|"passes parameters"| node_laser_config
node_standard_bringup -->|"passes parameters"| node_nav2_config
node_amcl_bringup -->|"passes parameters"| node_nav2_config
node_amcl_bringup -->|"passes map"| node_map
node_nav2_amcl -->|"includes localization and navigation"| node_nav2_navigation
node_operator -->|"enters keys"| node_teleop
node_teleop -->|"publishes"| node_cmd_vel

click node_standard_bringup "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup.launch.py"
click node_amcl_bringup "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup_amcl.launch.py"
click node_display_launch "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py"
click node_world "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/world/my_world.sdf"
click node_robot_model "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/src/description/sam_bot_description.urdf"
click node_joint_state "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py"
click node_robot_state "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py"
click node_ekf "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py"
click node_ekf_config "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/config/ekf.yaml"
click node_rviz "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py"
click node_laser_toolbox "https://github.com/tamu-robomasters/nav2-sim-testing/tree/main/src/multi-laserscan-toolbox-ros2"
click node_laser_config "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/config/laserscan_toolbox_params.yaml"
click node_nav2_config "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/config/nav2_params.yaml"
click node_map "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/maps/my_map.yaml"
click node_teleop "https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/scripts/teleop_keyboard.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_standard_bringup,node_amcl_bringup toneBlue
class node_display_launch,node_gazebo,node_world,node_robot_model,node_joint_state,node_robot_state,node_ekf,node_ekf_config,node_rviz toneAmber
class node_laser_toolbox,node_laser_config,node_slam,node_nav2_navigation,node_nav2_amcl,node_nav2_config,node_map toneMint
class node_teleop,node_cmd_vel toneRose
class node_operator toneIndigo
```

## Components

### Launch orchestration

- [SLAM bringup](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup.launch.py): `src/sam_bot_bringup/launch/bringup.launch.py`
- [AMCL bringup](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/launch/bringup_amcl.launch.py): `src/sam_bot_bringup/launch/bringup_amcl.launch.py`

### Robot simulation

- [Display launch](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py): `src/sam_bot_description/launch/display.launch.py`
- **Gazebo simulator**
- [Simulation world](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/world/my_world.sdf): `src/sam_bot_description/world/my_world.sdf`
- [Robot model](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/src/description/sam_bot_description.urdf): `src/sam_bot_description/src/description/sam_bot_description.urdf`
- [Joint state publisher](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py): `src/sam_bot_description/launch/display.launch.py`
- [Robot state publisher](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py): `src/sam_bot_description/launch/display.launch.py`
- [EKF localization](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py): `src/sam_bot_description/launch/display.launch.py`
- [EKF parameters](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/config/ekf.yaml): `src/sam_bot_description/config/ekf.yaml`
- [RViz visualization](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/launch/display.launch.py): `src/sam_bot_description/launch/display.launch.py`

### Mapping and navigation

- [Multi-laser toolbox](https://github.com/tamu-robomasters/nav2-sim-testing/tree/main/src/multi-laserscan-toolbox-ros2): `src/multi-laserscan-toolbox-ros2`
- [Laser parameters](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/config/laserscan_toolbox_params.yaml): `src/sam_bot_bringup/config/laserscan_toolbox_params.yaml`
- **Online SLAM**
- **Nav2 navigation**
- **Nav2 AMCL bringup**
- [Nav2 parameters](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/config/nav2_params.yaml): `src/sam_bot_bringup/config/nav2_params.yaml`
- [Saved map](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_bringup/maps/my_map.yaml): `src/sam_bot_bringup/maps/my_map.yaml`

### Robot control

- [Keyboard teleop](https://github.com/tamu-robomasters/nav2-sim-testing/blob/main/src/sam_bot_description/scripts/teleop_keyboard.py): `src/sam_bot_description/scripts/teleop_keyboard.py`
- **Velocity commands**

### Other components

- **Operator**

## Connections

- Operator → SLAM bringup: launches
- Operator → AMCL bringup: launches
- SLAM bringup → Display launch: includes
- SLAM bringup → Multi-laser toolbox: launches delayed
- SLAM bringup → Online SLAM: launches delayed
- SLAM bringup → Nav2 navigation: launches delayed
- AMCL bringup → Display launch: includes
- AMCL bringup → Multi-laser toolbox: launches delayed
- AMCL bringup → Nav2 AMCL bringup: launches delayed
- Display launch → Gazebo simulator: starts
- Display launch → Joint state publisher: starts
- Display launch → Robot state publisher: starts
- Display launch → EKF localization: starts
- Display launch → RViz visualization: starts
- Display launch → Simulation world: loads
- Display launch → Robot model: configures
- Robot state publisher → Robot model: publishes description
- Gazebo simulator → Robot model: spawns from description
- EKF localization → EKF parameters: reads
- SLAM bringup → Laser parameters: passes parameters
- AMCL bringup → Laser parameters: passes parameters
- SLAM bringup → Nav2 parameters: passes parameters
- AMCL bringup → Nav2 parameters: passes parameters
- AMCL bringup → Saved map: passes map
- Nav2 AMCL bringup → Nav2 navigation: includes localization and navigation
- Operator → Keyboard teleop: enters keys
- Keyboard teleop → Velocity commands: publishes
