CloudTwin  ROS2 Humble
Digital twin for path and trajectory optimisation
Classes | Functions | Variables
obstacle_spawner Namespace Reference

Classes

class  ObstacleSpawner
 
class  WalkingPerson
 

Functions

def main (args=None)
 

Variables

string PERSON_SDF
 
dictionary SCENARIOS
 

Detailed Description

Dynamic Obstacle Spawner for Gazebo Classic

Spawns walking people (Scrubs 3D model) and moves them along paths
using sinusoidal interpolation for smooth, realistic movement.
Nav2 detects them via lidar and avoids them in real-time.

Uses gazebo_msgs services:
  /spawn_entity         (gazebo_msgs/srv/SpawnEntity)
  /set_entity_state     (gazebo_msgs/srv/SetEntityState)
  /delete_entity        (gazebo_msgs/srv/DeleteEntity)

Usage:
    ros2 run robot_simulation obstacle_spawner.py
    ros2 run robot_simulation obstacle_spawner.py --ros-args -p scenario:=hospital

Function Documentation

◆ main()

def obstacle_spawner.main (   args = None)

Variable Documentation

◆ PERSON_SDF

string obstacle_spawner.PERSON_SDF
Initial value:
1 = """<?xml version="1.0" ?>
2 <sdf version="1.6">
3  <model name="{name}">
4  <static>false</static>
5  <link name="body">
6  <gravity>false</gravity>
7  <pose>0 0 0 0 0 0</pose>
8  <visual name="visual">
9  <geometry>
10  <mesh>
11  <uri>model://Scrubs/meshes/scrubs.obj</uri>
12  </mesh>
13  </geometry>
14  </visual>
15  <collision name="collision">
16  <geometry>
17  <mesh>
18  <uri>model://Scrubs/meshes/Scrubs_Col.obj</uri>
19  </mesh>
20  </geometry>
21  </collision>
22  </link>
23  </model>
24 </sdf>"""

◆ SCENARIOS

dictionary obstacle_spawner.SCENARIOS
Initial value:
1 = {
2  'hospital': [
3  WalkingPerson('human_1',
4  point_a=(-4.586, -14.697),
5  point_b=(-5.937, -14.430),
6  duration=21.0),
7  WalkingPerson('human_2',
8  point_a=(1.2, 13.7),
9  point_b=(-2.5, 14.0),
10  duration=30.0),
11  WalkingPerson('human_3',
12  point_a=(4.0, 1.0),
13  point_b=(5.0, 2.0),
14  duration=22.0),
15  ],
16  'corridors': [
17  WalkingPerson('human_1',
18  point_a=(-3.0, 0.0), point_b=(3.0, 0.0),
19  duration=12.0),
20  WalkingPerson('human_2',
21  point_a=(0.0, -2.0), point_b=(0.0, 2.0),
22  duration=10.0),
23  ],
24 }