From 7b179cb0b3e8f7e2b850224740f25b6bebeb4316 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Sun, 26 Jan 2025 19:05:19 -0500 Subject: [PATCH 01/11] Make IMU dimension specific --- common_xacro/urdf/sensor/imu.xacro | 28 ++++++------- marvin_simulation/urdf/constants.xacro | 54 ++++++++++++-------------- marvin_simulation/urdf/marvin.xacro | 2 +- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/common_xacro/urdf/sensor/imu.xacro b/common_xacro/urdf/sensor/imu.xacro index 086fd2e..122fa5c 100644 --- a/common_xacro/urdf/sensor/imu.xacro +++ b/common_xacro/urdf/sensor/imu.xacro @@ -6,32 +6,34 @@ - - - - - + + + + + + + - + - - - - + + + + - + @@ -51,8 +53,8 @@ - - + + diff --git a/marvin_simulation/urdf/constants.xacro b/marvin_simulation/urdf/constants.xacro index a05e997..489a496 100644 --- a/marvin_simulation/urdf/constants.xacro +++ b/marvin_simulation/urdf/constants.xacro @@ -2,40 +2,40 @@ - - - - + + + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + @@ -48,10 +48,4 @@ - - - - - - \ No newline at end of file diff --git a/marvin_simulation/urdf/marvin.xacro b/marvin_simulation/urdf/marvin.xacro index 215a616..8b6585e 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/marvin_simulation/urdf/marvin.xacro @@ -55,7 +55,7 @@ - + From 181c9f74d7e922e9116170956d306f17df31490b Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Sun, 26 Jan 2025 19:10:55 -0500 Subject: [PATCH 02/11] Make Depth Camera dimension specific --- common_xacro/urdf/sensor/depth_camera.xacro | 12 +++++++----- marvin_simulation/urdf/constants.xacro | 4 ---- marvin_simulation/urdf/marvin.xacro | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/common_xacro/urdf/sensor/depth_camera.xacro b/common_xacro/urdf/sensor/depth_camera.xacro index 2ff1f5a..ebdebd7 100644 --- a/common_xacro/urdf/sensor/depth_camera.xacro +++ b/common_xacro/urdf/sensor/depth_camera.xacro @@ -6,16 +6,18 @@ - - - - - + + + + + + + diff --git a/marvin_simulation/urdf/constants.xacro b/marvin_simulation/urdf/constants.xacro index 489a496..91860f5 100644 --- a/marvin_simulation/urdf/constants.xacro +++ b/marvin_simulation/urdf/constants.xacro @@ -41,10 +41,6 @@ - - - - diff --git a/marvin_simulation/urdf/marvin.xacro b/marvin_simulation/urdf/marvin.xacro index 8b6585e..a3e3439 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/marvin_simulation/urdf/marvin.xacro @@ -41,7 +41,7 @@ - + From d81dd4f2b79229fae0833d1ddc012861e78a6467 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Sun, 26 Jan 2025 19:17:40 -0500 Subject: [PATCH 03/11] Make Caster dimension specific --- common_xacro/urdf/wheel/caster.xacro | 8 +++++--- marvin_simulation/urdf/constants.xacro | 6 +++--- marvin_simulation/urdf/marvin.xacro | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/common_xacro/urdf/wheel/caster.xacro b/common_xacro/urdf/wheel/caster.xacro index ea4a932..6296ea3 100644 --- a/common_xacro/urdf/wheel/caster.xacro +++ b/common_xacro/urdf/wheel/caster.xacro @@ -5,15 +5,17 @@ - - - + + + + + diff --git a/marvin_simulation/urdf/constants.xacro b/marvin_simulation/urdf/constants.xacro index 91860f5..8680782 100644 --- a/marvin_simulation/urdf/constants.xacro +++ b/marvin_simulation/urdf/constants.xacro @@ -28,14 +28,14 @@ - - + + + - diff --git a/marvin_simulation/urdf/marvin.xacro b/marvin_simulation/urdf/marvin.xacro index a3e3439..0964ac1 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/marvin_simulation/urdf/marvin.xacro @@ -24,8 +24,8 @@ - - + + From ce5f461f0e1a9c30331078e1956318b0005ba305 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Sun, 26 Jan 2025 19:27:59 -0500 Subject: [PATCH 04/11] Make Wheel dimension specific --- common_xacro/urdf/wheel/wheel.xacro | 10 ++++++---- marvin_simulation/urdf/constants.xacro | 7 ++----- marvin_simulation/urdf/marvin.xacro | 10 +++++----- marvin_simulation/urdf/plugins.xacro | 4 ++-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/common_xacro/urdf/wheel/wheel.xacro b/common_xacro/urdf/wheel/wheel.xacro index 59feb64..60526ed 100644 --- a/common_xacro/urdf/wheel/wheel.xacro +++ b/common_xacro/urdf/wheel/wheel.xacro @@ -5,16 +5,18 @@ - - - - + + + + + + diff --git a/marvin_simulation/urdf/constants.xacro b/marvin_simulation/urdf/constants.xacro index 8680782..c5ff3f2 100644 --- a/marvin_simulation/urdf/constants.xacro +++ b/marvin_simulation/urdf/constants.xacro @@ -31,11 +31,8 @@ - - - - - + + diff --git a/marvin_simulation/urdf/marvin.xacro b/marvin_simulation/urdf/marvin.xacro index 0964ac1..300f46a 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/marvin_simulation/urdf/marvin.xacro @@ -31,11 +31,11 @@ - - + + - - + + @@ -64,7 +64,7 @@ - + diff --git a/marvin_simulation/urdf/plugins.xacro b/marvin_simulation/urdf/plugins.xacro index 6b8cacf..6e3c563 100644 --- a/marvin_simulation/urdf/plugins.xacro +++ b/marvin_simulation/urdf/plugins.xacro @@ -9,8 +9,8 @@ left_wheel_joint right_wheel_joint - ${track_width} - ${2 * wheel_radius} + ${2 * wheel_x_offset} + ${2 * 6.1875*0.0254} true true From 5ebd0334505d32436fa072e4b50d20b9f2262b57 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Sun, 26 Jan 2025 19:28:44 -0500 Subject: [PATCH 05/11] Rename lidar constant for convention --- marvin_simulation/urdf/constants.xacro | 2 +- marvin_simulation/urdf/marvin.xacro | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/marvin_simulation/urdf/constants.xacro b/marvin_simulation/urdf/constants.xacro index c5ff3f2..9b379cb 100644 --- a/marvin_simulation/urdf/constants.xacro +++ b/marvin_simulation/urdf/constants.xacro @@ -35,7 +35,7 @@ - + diff --git a/marvin_simulation/urdf/marvin.xacro b/marvin_simulation/urdf/marvin.xacro index 300f46a..60b7a10 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/marvin_simulation/urdf/marvin.xacro @@ -49,7 +49,7 @@ - + From 885d5bee90f4580f7d44351a95aa861e8c9518c5 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 20:23:53 -0500 Subject: [PATCH 06/11] Move world directory to common, add common prefix to packages --- README.md | 6 +-- marvin_simulation/urdf/plugins.xacro | 30 ------------- scripts/setup.bash | 2 +- .../CMakeLists.txt | 4 +- .../package.xml | 4 +- .../urdf/physics/inertia.xacro | 0 .../urdf/sensor/depth_camera.xacro | 2 +- .../urdf/sensor/imu.xacro | 2 +- .../urdf/wheel/caster.xacro | 2 +- .../urdf/wheel/wheel.xacro | 2 +- .../world/CHANGES.md | 0 .../world/LICENSE | 0 .../world/basic_obstacles.world | 0 .../world/empty.world | 0 .../world/igvc.world | 0 .../world/igvc_flat.world | 0 .../world/igvc_flatV2.world | 0 .../world/igvc_flat_wall.world | 0 .../textures/Construction_Barrel_Diffuse.png | Bin .../textures/Construction_Barrel_Spec.png | Bin .../meshes/construction_barrel.dae | 0 .../construction_barrel/model-1_3.sdf | 0 .../construction_barrel/model-1_4.sdf | 0 .../construction_barrel/model.config | 0 .../construction_barrel/model.sdf | 0 .../materials/scripts/grass_plane.material | 0 .../materials/scripts/igvc_grass.material | 0 .../materials/scripts/igvc_pavement.material | 0 .../scripts/igvc_pavement_old.material | 0 .../materials/scripts/pavement_plane.material | 0 .../materials/textures/IGVC_grass.png | Bin .../materials/textures/IGVC_grass_large.png | Bin .../textures/IGVC_grass_original.png | Bin .../materials/textures/IGVC_pavement.png | Bin .../materials/textures/IGVC_pavementV2.png | Bin .../textures/IGVC_pavement_original.png | Bin .../materials/textures/grass.png | Bin .../materials/textures/grey.PNG | Bin .../igvc_basic_ground/model.config | 0 .../igvc_models/igvc_basic_ground/model.sdf | 0 .../world/igvc_models/install_models.sh | 0 .../world/igvc_wall.world | 0 .../CMakeLists.txt | 4 +- .../launch/display.launch.py | 2 +- .../launch/simulation.launch.py | 5 ++- .../package.xml | 2 +- .../rviz/display.rviz | 0 .../rviz/simulation.rviz | 0 .../urdf/chassis.xacro | 4 +- .../urdf/constants.xacro | 0 .../urdf/marvin.xacro | 41 ++++++++++++++---- 51 files changed, 54 insertions(+), 58 deletions(-) delete mode 100644 marvin_simulation/urdf/plugins.xacro rename {common_xacro => simulation_common}/CMakeLists.txt (94%) rename {common_xacro => simulation_common}/package.xml (89%) rename {common_xacro => simulation_common}/urdf/physics/inertia.xacro (100%) rename {common_xacro => simulation_common}/urdf/sensor/depth_camera.xacro (97%) rename {common_xacro => simulation_common}/urdf/sensor/imu.xacro (97%) rename {common_xacro => simulation_common}/urdf/wheel/caster.xacro (95%) rename {common_xacro => simulation_common}/urdf/wheel/wheel.xacro (96%) rename {marvin_simulation => simulation_common}/world/CHANGES.md (100%) rename {marvin_simulation => simulation_common}/world/LICENSE (100%) rename {marvin_simulation => simulation_common}/world/basic_obstacles.world (100%) rename {marvin_simulation => simulation_common}/world/empty.world (100%) rename {marvin_simulation => simulation_common}/world/igvc.world (100%) rename {marvin_simulation => simulation_common}/world/igvc_flat.world (100%) rename {marvin_simulation => simulation_common}/world/igvc_flatV2.world (100%) rename {marvin_simulation => simulation_common}/world/igvc_flat_wall.world (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Diffuse.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Spec.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/meshes/construction_barrel.dae (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_3.sdf (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_4.sdf (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/model.config (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/construction_barrel/model.sdf (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/scripts/grass_plane.material (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_grass.material (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement.material (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement_old.material (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/scripts/pavement_plane.material (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_large.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_original.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavementV2.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement_original.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/grass.png (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/materials/textures/grey.PNG (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/model.config (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/igvc_basic_ground/model.sdf (100%) rename {marvin_simulation => simulation_common}/world/igvc_models/install_models.sh (100%) rename {marvin_simulation => simulation_common}/world/igvc_wall.world (100%) rename {marvin_simulation => simulation_marvin}/CMakeLists.txt (93%) rename {marvin_simulation => simulation_marvin}/launch/display.launch.py (96%) rename {marvin_simulation => simulation_marvin}/launch/simulation.launch.py (92%) rename {marvin_simulation => simulation_marvin}/package.xml (96%) rename {marvin_simulation => simulation_marvin}/rviz/display.rviz (100%) rename {marvin_simulation => simulation_marvin}/rviz/simulation.rviz (100%) rename {marvin_simulation => simulation_marvin}/urdf/chassis.xacro (94%) rename {marvin_simulation => simulation_marvin}/urdf/constants.xacro (100%) rename {marvin_simulation => simulation_marvin}/urdf/marvin.xacro (61%) diff --git a/README.md b/README.md index 8a71b4e..4feb20e 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,9 @@ The simulation is fairly computation intensive so a GPU is recommended. Note tha 4. ```source install/setup.bash``` ### Launching -Running ```ros2 launch marvin_simulation display.launch.py``` will open RViz and display the robot model. This launch file is made to quickly check if the robot model is correctly formatted and used internally when developing the stack. +Running ```ros2 launch simulation_marvin display.launch.py``` will open RViz and display the robot model. This launch file is made to quickly check if the robot model is correctly formatted and used internally when developing the stack. -Running ```ros2 launch marvin_simulation simulation.launch.py``` will spawn the robot in Gazebo and visualize sensor outputs in RViz. Any project interfacing with the simulation should use this launch file. +Running ```ros2 launch simulation_marvin simulation.launch.py``` will spawn the robot in Gazebo and visualize sensor outputs in RViz. Any project interfacing with the simulation should use this launch file. ## Interfacing with the Stack @@ -101,4 +101,4 @@ This error is caused by [snap variables leaking into terminal variables](https:/ ## Credits Jason Ning and Kari Naga on the sensors team, who created the original URDF files and the Gazebo World in the [marvin](https://github.com/umigv/marvin/tree/main/urdf) repository. -[UTRA ART](https://github.com/UTRA-ART) for their [full IGVC course world](https://github.com/UTRA-ART/Caffeine/tree/master/worlds/). Any file or folder containing IGVC is under the original [Apache 2.0 license](https://github.com/umigv/simulation_stack/blob/igvc_course/marvin_simulation/world/LICENSE) +[UTRA ART](https://github.com/UTRA-ART) for their [full IGVC course world](https://github.com/UTRA-ART/Caffeine/tree/master/worlds/). Any file or folder containing IGVC is under the original [Apache 2.0 license](https://github.com/umigv/simulation_stack/blob/igvc_course/simulation_marvin/world/LICENSE) diff --git a/marvin_simulation/urdf/plugins.xacro b/marvin_simulation/urdf/plugins.xacro deleted file mode 100644 index 6e3c563..0000000 --- a/marvin_simulation/urdf/plugins.xacro +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - 100.0 - base_link - cmd_vel - - left_wheel_joint - right_wheel_joint - ${2 * wheel_x_offset} - ${2 * 6.1875*0.0254} - true - true - - 1.8 - 30 - - encoder - odom - odom - true - true - - false - na - - - \ No newline at end of file diff --git a/scripts/setup.bash b/scripts/setup.bash index 88ac132..be90d5f 100755 --- a/scripts/setup.bash +++ b/scripts/setup.bash @@ -19,6 +19,6 @@ colcon build --symlink-install source install/setup.bash) # Install IGVC World Models -bash marvin_simulation/world/igvc_models/install_models.sh) +bash simulation_common/world/igvc_models/install_models.sh) echo "Setup successful!" diff --git a/common_xacro/CMakeLists.txt b/simulation_common/CMakeLists.txt similarity index 94% rename from common_xacro/CMakeLists.txt rename to simulation_common/CMakeLists.txt index b51d6a0..566bfac 100644 --- a/common_xacro/CMakeLists.txt +++ b/simulation_common/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(common_xacro) +project(simulation_common) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) @@ -12,7 +12,7 @@ find_package(ament_cmake REQUIRED) # find_package( REQUIRED) install( - DIRECTORY urdf + DIRECTORY urdf world DESTINATION share/${PROJECT_NAME} ) diff --git a/common_xacro/package.xml b/simulation_common/package.xml similarity index 89% rename from common_xacro/package.xml rename to simulation_common/package.xml index 524fadf..a83b090 100644 --- a/common_xacro/package.xml +++ b/simulation_common/package.xml @@ -1,9 +1,9 @@ - common_xacro + simulation_common 1.0.0 - ARV Common Xacro Files + ARV Simulation Common Files Ryan Liao MIT diff --git a/common_xacro/urdf/physics/inertia.xacro b/simulation_common/urdf/physics/inertia.xacro similarity index 100% rename from common_xacro/urdf/physics/inertia.xacro rename to simulation_common/urdf/physics/inertia.xacro diff --git a/common_xacro/urdf/sensor/depth_camera.xacro b/simulation_common/urdf/sensor/depth_camera.xacro similarity index 97% rename from common_xacro/urdf/sensor/depth_camera.xacro rename to simulation_common/urdf/sensor/depth_camera.xacro index ebdebd7..ffbd623 100644 --- a/common_xacro/urdf/sensor/depth_camera.xacro +++ b/simulation_common/urdf/sensor/depth_camera.xacro @@ -11,7 +11,7 @@ - + diff --git a/common_xacro/urdf/sensor/imu.xacro b/simulation_common/urdf/sensor/imu.xacro similarity index 97% rename from common_xacro/urdf/sensor/imu.xacro rename to simulation_common/urdf/sensor/imu.xacro index 122fa5c..7eaaf4b 100644 --- a/common_xacro/urdf/sensor/imu.xacro +++ b/simulation_common/urdf/sensor/imu.xacro @@ -11,7 +11,7 @@ - + diff --git a/common_xacro/urdf/wheel/caster.xacro b/simulation_common/urdf/wheel/caster.xacro similarity index 95% rename from common_xacro/urdf/wheel/caster.xacro rename to simulation_common/urdf/wheel/caster.xacro index 6296ea3..8bfb55d 100644 --- a/common_xacro/urdf/wheel/caster.xacro +++ b/simulation_common/urdf/wheel/caster.xacro @@ -10,7 +10,7 @@ - + diff --git a/common_xacro/urdf/wheel/wheel.xacro b/simulation_common/urdf/wheel/wheel.xacro similarity index 96% rename from common_xacro/urdf/wheel/wheel.xacro rename to simulation_common/urdf/wheel/wheel.xacro index 60526ed..f8c4d98 100644 --- a/common_xacro/urdf/wheel/wheel.xacro +++ b/simulation_common/urdf/wheel/wheel.xacro @@ -10,7 +10,7 @@ - + diff --git a/marvin_simulation/world/CHANGES.md b/simulation_common/world/CHANGES.md similarity index 100% rename from marvin_simulation/world/CHANGES.md rename to simulation_common/world/CHANGES.md diff --git a/marvin_simulation/world/LICENSE b/simulation_common/world/LICENSE similarity index 100% rename from marvin_simulation/world/LICENSE rename to simulation_common/world/LICENSE diff --git a/marvin_simulation/world/basic_obstacles.world b/simulation_common/world/basic_obstacles.world similarity index 100% rename from marvin_simulation/world/basic_obstacles.world rename to simulation_common/world/basic_obstacles.world diff --git a/marvin_simulation/world/empty.world b/simulation_common/world/empty.world similarity index 100% rename from marvin_simulation/world/empty.world rename to simulation_common/world/empty.world diff --git a/marvin_simulation/world/igvc.world b/simulation_common/world/igvc.world similarity index 100% rename from marvin_simulation/world/igvc.world rename to simulation_common/world/igvc.world diff --git a/marvin_simulation/world/igvc_flat.world b/simulation_common/world/igvc_flat.world similarity index 100% rename from marvin_simulation/world/igvc_flat.world rename to simulation_common/world/igvc_flat.world diff --git a/marvin_simulation/world/igvc_flatV2.world b/simulation_common/world/igvc_flatV2.world similarity index 100% rename from marvin_simulation/world/igvc_flatV2.world rename to simulation_common/world/igvc_flatV2.world diff --git a/marvin_simulation/world/igvc_flat_wall.world b/simulation_common/world/igvc_flat_wall.world similarity index 100% rename from marvin_simulation/world/igvc_flat_wall.world rename to simulation_common/world/igvc_flat_wall.world diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Diffuse.png b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Diffuse.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Diffuse.png rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Diffuse.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Spec.png b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Spec.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Spec.png rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/materials/textures/Construction_Barrel_Spec.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/meshes/construction_barrel.dae b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/meshes/construction_barrel.dae similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/meshes/construction_barrel.dae rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/meshes/construction_barrel.dae diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_3.sdf b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_3.sdf similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_3.sdf rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_3.sdf diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_4.sdf b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_4.sdf similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_4.sdf rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model-1_4.sdf diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model.config b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model.config similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model.config rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model.config diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model.sdf b/simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model.sdf similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/construction_barrel/model.sdf rename to simulation_common/world/igvc_models/igvc_basic_ground/construction_barrel/model.sdf diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/grass_plane.material b/simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/grass_plane.material similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/grass_plane.material rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/grass_plane.material diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_grass.material b/simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_grass.material similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_grass.material rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_grass.material diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement.material b/simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement.material similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement.material rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement.material diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement_old.material b/simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement_old.material similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement_old.material rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/igvc_pavement_old.material diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/pavement_plane.material b/simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/pavement_plane.material similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/scripts/pavement_plane.material rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/scripts/pavement_plane.material diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_large.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_large.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_large.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_large.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_original.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_original.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_original.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_grass_original.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavementV2.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavementV2.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavementV2.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavementV2.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement_original.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement_original.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement_original.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/IGVC_pavement_original.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/grass.png b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/grass.png similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/grass.png rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/grass.png diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/grey.PNG b/simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/grey.PNG similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/materials/textures/grey.PNG rename to simulation_common/world/igvc_models/igvc_basic_ground/materials/textures/grey.PNG diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/model.config b/simulation_common/world/igvc_models/igvc_basic_ground/model.config similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/model.config rename to simulation_common/world/igvc_models/igvc_basic_ground/model.config diff --git a/marvin_simulation/world/igvc_models/igvc_basic_ground/model.sdf b/simulation_common/world/igvc_models/igvc_basic_ground/model.sdf similarity index 100% rename from marvin_simulation/world/igvc_models/igvc_basic_ground/model.sdf rename to simulation_common/world/igvc_models/igvc_basic_ground/model.sdf diff --git a/marvin_simulation/world/igvc_models/install_models.sh b/simulation_common/world/igvc_models/install_models.sh similarity index 100% rename from marvin_simulation/world/igvc_models/install_models.sh rename to simulation_common/world/igvc_models/install_models.sh diff --git a/marvin_simulation/world/igvc_wall.world b/simulation_common/world/igvc_wall.world similarity index 100% rename from marvin_simulation/world/igvc_wall.world rename to simulation_common/world/igvc_wall.world diff --git a/marvin_simulation/CMakeLists.txt b/simulation_marvin/CMakeLists.txt similarity index 93% rename from marvin_simulation/CMakeLists.txt rename to simulation_marvin/CMakeLists.txt index 840f8c0..8cec2c3 100644 --- a/marvin_simulation/CMakeLists.txt +++ b/simulation_marvin/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(marvin_simulation) +project(simulation_marvin) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) @@ -12,7 +12,7 @@ find_package(ament_cmake REQUIRED) # find_package( REQUIRED) install( - DIRECTORY launch rviz urdf world + DIRECTORY launch rviz urdf DESTINATION share/${PROJECT_NAME} ) diff --git a/marvin_simulation/launch/display.launch.py b/simulation_marvin/launch/display.launch.py similarity index 96% rename from marvin_simulation/launch/display.launch.py rename to simulation_marvin/launch/display.launch.py index 4689ba3..c92e1d1 100644 --- a/marvin_simulation/launch/display.launch.py +++ b/simulation_marvin/launch/display.launch.py @@ -7,7 +7,7 @@ def generate_launch_description(): # Constants - package_directory = get_package_share_directory('marvin_simulation') + package_directory = get_package_share_directory('simulation_marvin') model = os.path.join(package_directory, 'urdf', 'marvin.xacro') rviz_config = os.path.join(package_directory, 'rviz', 'display.rviz') diff --git a/marvin_simulation/launch/simulation.launch.py b/simulation_marvin/launch/simulation.launch.py similarity index 92% rename from marvin_simulation/launch/simulation.launch.py rename to simulation_marvin/launch/simulation.launch.py index 7927c6c..ce34fb9 100644 --- a/marvin_simulation/launch/simulation.launch.py +++ b/simulation_marvin/launch/simulation.launch.py @@ -8,7 +8,8 @@ def generate_launch_description(): # Constants - package_directory = get_package_share_directory('marvin_simulation') + package_directory = get_package_share_directory('simulation_marvin') + world_directory = get_package_share_directory('simulation_common') cwd = os.path.join(package_directory, 'launch') model = os.path.join(package_directory, 'urdf', 'marvin.xacro') rviz_config = os.path.join(package_directory, 'rviz', 'simulation.rviz') @@ -42,7 +43,7 @@ def generate_launch_description(): 'gzserver', '-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', - [package_directory, '/world/', LaunchConfiguration('world'), '.world']], + [world_directory, '/world/', LaunchConfiguration('world'), '.world']], output='screen', cwd=[cwd] ) diff --git a/marvin_simulation/package.xml b/simulation_marvin/package.xml similarity index 96% rename from marvin_simulation/package.xml rename to simulation_marvin/package.xml index 97899ed..0257003 100644 --- a/marvin_simulation/package.xml +++ b/simulation_marvin/package.xml @@ -1,7 +1,7 @@ - marvin_simulation + simulation_marvin 1.0.0 Simulation model for ARV's 2022-2024 robot "Marvin" Ryan Liao diff --git a/marvin_simulation/rviz/display.rviz b/simulation_marvin/rviz/display.rviz similarity index 100% rename from marvin_simulation/rviz/display.rviz rename to simulation_marvin/rviz/display.rviz diff --git a/marvin_simulation/rviz/simulation.rviz b/simulation_marvin/rviz/simulation.rviz similarity index 100% rename from marvin_simulation/rviz/simulation.rviz rename to simulation_marvin/rviz/simulation.rviz diff --git a/marvin_simulation/urdf/chassis.xacro b/simulation_marvin/urdf/chassis.xacro similarity index 94% rename from marvin_simulation/urdf/chassis.xacro rename to simulation_marvin/urdf/chassis.xacro index 205f443..db49bd3 100644 --- a/marvin_simulation/urdf/chassis.xacro +++ b/simulation_marvin/urdf/chassis.xacro @@ -2,8 +2,8 @@ - - + + diff --git a/marvin_simulation/urdf/constants.xacro b/simulation_marvin/urdf/constants.xacro similarity index 100% rename from marvin_simulation/urdf/constants.xacro rename to simulation_marvin/urdf/constants.xacro diff --git a/marvin_simulation/urdf/marvin.xacro b/simulation_marvin/urdf/marvin.xacro similarity index 61% rename from marvin_simulation/urdf/marvin.xacro rename to simulation_marvin/urdf/marvin.xacro index 60b7a10..1aeba1f 100644 --- a/marvin_simulation/urdf/marvin.xacro +++ b/simulation_marvin/urdf/marvin.xacro @@ -2,7 +2,7 @@ - + @@ -19,18 +19,18 @@ - + - + - + @@ -40,7 +40,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -85,6 +85,31 @@ - - + + + + 100.0 + base_link + cmd_vel + + left_wheel_joint + right_wheel_joint + ${2 * wheel_x_offset} + ${2 * 6.1875 * 0.0254} + true + true + + 1.8 + 30 + + encoder + odom + odom + true + true + + false + na + + \ No newline at end of file From 44e1332aa87c873be95713d285dac66eb023b656 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 21:35:34 -0500 Subject: [PATCH 07/11] Start working on migrating launch file and rviz to be common --- .../launch/display.launch.py | 4 +- .../launch/simulation.launch.py | 50 +++++++++++++++++-- .../rviz/display.rviz | 0 .../rviz/simulation.rviz | 0 simulation_marvin/CMakeLists.txt | 2 +- 5 files changed, 49 insertions(+), 7 deletions(-) rename {simulation_marvin => simulation_common}/launch/display.launch.py (94%) rename {simulation_marvin => simulation_common}/launch/simulation.launch.py (65%) rename {simulation_marvin => simulation_common}/rviz/display.rviz (100%) rename {simulation_marvin => simulation_common}/rviz/simulation.rviz (100%) diff --git a/simulation_marvin/launch/display.launch.py b/simulation_common/launch/display.launch.py similarity index 94% rename from simulation_marvin/launch/display.launch.py rename to simulation_common/launch/display.launch.py index c92e1d1..4dc283e 100644 --- a/simulation_marvin/launch/display.launch.py +++ b/simulation_common/launch/display.launch.py @@ -9,7 +9,7 @@ def generate_launch_description(): # Constants package_directory = get_package_share_directory('simulation_marvin') model = os.path.join(package_directory, 'urdf', 'marvin.xacro') - rviz_config = os.path.join(package_directory, 'rviz', 'display.rviz') + #rviz_config = os.path.join(package_directory, 'rviz', 'display.rviz') # Arguments enable_joint_publisher_launch_arg = DeclareLaunchArgument( @@ -46,7 +46,7 @@ def generate_launch_description(): executable='rviz2', name='rviz2', output='screen', - arguments=['-d', rviz_config], + #arguments=['-d', rviz_config], ) #Launch Description diff --git a/simulation_marvin/launch/simulation.launch.py b/simulation_common/launch/simulation.launch.py similarity index 65% rename from simulation_marvin/launch/simulation.launch.py rename to simulation_common/launch/simulation.launch.py index ce34fb9..b1abeec 100644 --- a/simulation_marvin/launch/simulation.launch.py +++ b/simulation_common/launch/simulation.launch.py @@ -1,17 +1,52 @@ -from ament_index_python.packages import get_package_share_directory +from ament_index_python.packages import get_package_share_directory, get_packages_with_prefixes from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import DeclareLaunchArgument, ExecuteProcess from launch.substitutions import Command, LaunchConfiguration from launch.conditions import UnlessCondition import os +import re + +def get_latest_model_name(): + pattern = re.compile(r"^simulation_(\d+)_([a-zA-Z0-9_-]+)$") + packages = get_packages_with_prefixes("simulation").keys() + + latest_model_package = None + + for package in packages: + match = pattern.match(package) + + if match is None: + continue + + if latest_model_package is None: + latest_model_package = package + continue + + latest_version = int(pattern.match(latest_model_package).group(1)) + current_version = int(pattern.match(package).group(1)) + if current_version > latest_version: + latest_model_package = package + + return pattern.match(latest_model_package).group(2) + +def get_package_of_model(model): + pattern = re.compile(r"^simulation_(\d+)_" + model + "$") + packages = get_packages_with_prefixes().keys() + + matching_packages = [package for package in packages if pattern.match(package) is not None] + + if len(matching_packages) == 0: + return None + + return matching_packages[0] def generate_launch_description(): # Constants package_directory = get_package_share_directory('simulation_marvin') world_directory = get_package_share_directory('simulation_common') cwd = os.path.join(package_directory, 'launch') - model = os.path.join(package_directory, 'urdf', 'marvin.xacro') + #model = os.path.join(package_directory, 'urdf', 'marvin.xacro') rviz_config = os.path.join(package_directory, 'rviz', 'simulation.rviz') default_world_name = 'empty' @@ -28,13 +63,19 @@ def generate_launch_description(): description='Show RViz and Gazebo' ) + model_launch_arg = DeclareLaunchArgument( + name = 'model', + default_value = get_latest_model_name(), + description = 'name of the robot model' + ) + # Robot node robot_state_publisher_node = Node( package='robot_state_publisher', executable='robot_state_publisher', output='screen', - parameters=[{'robot_description': Command(['xacro ', model]), - 'use_sim_time': True}] + # parameters=[{'robot_description': Command(['xacro ', model]), #TODO: USE LAUNCH ARG + # 'use_sim_time': True}] ) # Gazebo node @@ -91,6 +132,7 @@ def generate_launch_description(): return LaunchDescription([ world_launch_arg, headless_launch_arg, + model_launch_arg, robot_state_publisher_node, gazebo_server, gazebo_client, diff --git a/simulation_marvin/rviz/display.rviz b/simulation_common/rviz/display.rviz similarity index 100% rename from simulation_marvin/rviz/display.rviz rename to simulation_common/rviz/display.rviz diff --git a/simulation_marvin/rviz/simulation.rviz b/simulation_common/rviz/simulation.rviz similarity index 100% rename from simulation_marvin/rviz/simulation.rviz rename to simulation_common/rviz/simulation.rviz diff --git a/simulation_marvin/CMakeLists.txt b/simulation_marvin/CMakeLists.txt index 8cec2c3..5d1e8a8 100644 --- a/simulation_marvin/CMakeLists.txt +++ b/simulation_marvin/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(ament_cmake REQUIRED) # find_package( REQUIRED) install( - DIRECTORY launch rviz urdf + DIRECTORY launch urdf DESTINATION share/${PROJECT_NAME} ) From a6332a2408f9444f75c6594d8cb7afd99444458a Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 21:36:23 -0500 Subject: [PATCH 08/11] Rename marvin folder to match pattern --- {simulation_marvin => simulation_24_marvin}/CMakeLists.txt | 0 {simulation_marvin => simulation_24_marvin}/package.xml | 0 {simulation_marvin => simulation_24_marvin}/urdf/chassis.xacro | 0 {simulation_marvin => simulation_24_marvin}/urdf/constants.xacro | 0 {simulation_marvin => simulation_24_marvin}/urdf/marvin.xacro | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {simulation_marvin => simulation_24_marvin}/CMakeLists.txt (100%) rename {simulation_marvin => simulation_24_marvin}/package.xml (100%) rename {simulation_marvin => simulation_24_marvin}/urdf/chassis.xacro (100%) rename {simulation_marvin => simulation_24_marvin}/urdf/constants.xacro (100%) rename {simulation_marvin => simulation_24_marvin}/urdf/marvin.xacro (100%) diff --git a/simulation_marvin/CMakeLists.txt b/simulation_24_marvin/CMakeLists.txt similarity index 100% rename from simulation_marvin/CMakeLists.txt rename to simulation_24_marvin/CMakeLists.txt diff --git a/simulation_marvin/package.xml b/simulation_24_marvin/package.xml similarity index 100% rename from simulation_marvin/package.xml rename to simulation_24_marvin/package.xml diff --git a/simulation_marvin/urdf/chassis.xacro b/simulation_24_marvin/urdf/chassis.xacro similarity index 100% rename from simulation_marvin/urdf/chassis.xacro rename to simulation_24_marvin/urdf/chassis.xacro diff --git a/simulation_marvin/urdf/constants.xacro b/simulation_24_marvin/urdf/constants.xacro similarity index 100% rename from simulation_marvin/urdf/constants.xacro rename to simulation_24_marvin/urdf/constants.xacro diff --git a/simulation_marvin/urdf/marvin.xacro b/simulation_24_marvin/urdf/marvin.xacro similarity index 100% rename from simulation_marvin/urdf/marvin.xacro rename to simulation_24_marvin/urdf/marvin.xacro From 23a2ccdb5a5c75854baeba620ea732f708e8f9f1 Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 22:27:39 -0500 Subject: [PATCH 09/11] Rename marvin, parameterize model --- simulation_common/CMakeLists.txt | 2 +- simulation_common/launch/display.launch.py | 30 +++++--- simulation_common/launch/simulation.launch.py | 69 ++++++------------- .../CMakeLists.txt | 2 +- .../package.xml | 2 +- .../urdf/chassis.xacro | 0 .../urdf/constants.xacro | 0 .../urdf/model.xacro | 0 8 files changed, 45 insertions(+), 60 deletions(-) rename {simulation_24_marvin => simulation_marvin}/CMakeLists.txt (97%) rename {simulation_24_marvin => simulation_marvin}/package.xml (91%) rename {simulation_24_marvin => simulation_marvin}/urdf/chassis.xacro (100%) rename {simulation_24_marvin => simulation_marvin}/urdf/constants.xacro (100%) rename simulation_24_marvin/urdf/marvin.xacro => simulation_marvin/urdf/model.xacro (100%) diff --git a/simulation_common/CMakeLists.txt b/simulation_common/CMakeLists.txt index 566bfac..c3afba0 100644 --- a/simulation_common/CMakeLists.txt +++ b/simulation_common/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(ament_cmake REQUIRED) # find_package( REQUIRED) install( - DIRECTORY urdf world + DIRECTORY launch urdf rviz world DESTINATION share/${PROJECT_NAME} ) diff --git a/simulation_common/launch/display.launch.py b/simulation_common/launch/display.launch.py index 4dc283e..1d44ea8 100644 --- a/simulation_common/launch/display.launch.py +++ b/simulation_common/launch/display.launch.py @@ -2,15 +2,13 @@ import launch import launch_ros from launch.actions import DeclareLaunchArgument -from launch.substitutions import Command, LaunchConfiguration +from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution +from launch_ros.substitutions import FindPackageShare import os -def generate_launch_description(): - # Constants - package_directory = get_package_share_directory('simulation_marvin') - model = os.path.join(package_directory, 'urdf', 'marvin.xacro') - #rviz_config = os.path.join(package_directory, 'rviz', 'display.rviz') +DEFAULT_MODEL_NAME = 'marvin' +def generate_launch_description(): # Arguments enable_joint_publisher_launch_arg = DeclareLaunchArgument( name='joint_gui', @@ -18,11 +16,26 @@ def generate_launch_description(): description='Flag to enable joint_state_publisher_gui' ) + model_launch_arg = DeclareLaunchArgument( + name = 'model', + default_value = DEFAULT_MODEL_NAME, + description = 'name of the robot model' + ) + + # Constants + package_directory = get_package_share_directory('simulation_common') + rviz_config = os.path.join(package_directory, 'rviz', 'display.rviz') + xacro_file_path = PathJoinSubstitution([ + FindPackageShare(["simulation_", LaunchConfiguration('model')]), + 'urdf', + 'model.xacro' + ]) + # Robot Node robot_state_publisher_node = launch_ros.actions.Node( package='robot_state_publisher', executable='robot_state_publisher', - parameters=[{'robot_description': Command(['xacro ', model])}] + parameters=[{'robot_description': Command(['xacro ', xacro_file_path])}] ) # Wheel Node @@ -46,12 +59,13 @@ def generate_launch_description(): executable='rviz2', name='rviz2', output='screen', - #arguments=['-d', rviz_config], + arguments=['-d', rviz_config], ) #Launch Description return launch.LaunchDescription([ enable_joint_publisher_launch_arg, + model_launch_arg, joint_state_publisher_node, joint_state_publisher_gui_node, robot_state_publisher_node, diff --git a/simulation_common/launch/simulation.launch.py b/simulation_common/launch/simulation.launch.py index b1abeec..a158a7c 100644 --- a/simulation_common/launch/simulation.launch.py +++ b/simulation_common/launch/simulation.launch.py @@ -1,59 +1,20 @@ -from ament_index_python.packages import get_package_share_directory, get_packages_with_prefixes +from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import DeclareLaunchArgument, ExecuteProcess -from launch.substitutions import Command, LaunchConfiguration +from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution +from launch_ros.substitutions import FindPackageShare from launch.conditions import UnlessCondition import os -import re -def get_latest_model_name(): - pattern = re.compile(r"^simulation_(\d+)_([a-zA-Z0-9_-]+)$") - packages = get_packages_with_prefixes("simulation").keys() - - latest_model_package = None - - for package in packages: - match = pattern.match(package) - - if match is None: - continue - - if latest_model_package is None: - latest_model_package = package - continue - - latest_version = int(pattern.match(latest_model_package).group(1)) - current_version = int(pattern.match(package).group(1)) - if current_version > latest_version: - latest_model_package = package - - return pattern.match(latest_model_package).group(2) - -def get_package_of_model(model): - pattern = re.compile(r"^simulation_(\d+)_" + model + "$") - packages = get_packages_with_prefixes().keys() - - matching_packages = [package for package in packages if pattern.match(package) is not None] - - if len(matching_packages) == 0: - return None - - return matching_packages[0] +DEFAULT_MODEL_NAME = 'marvin' +DEFAULT_WORLD_NAME = 'empty' def generate_launch_description(): - # Constants - package_directory = get_package_share_directory('simulation_marvin') - world_directory = get_package_share_directory('simulation_common') - cwd = os.path.join(package_directory, 'launch') - #model = os.path.join(package_directory, 'urdf', 'marvin.xacro') - rviz_config = os.path.join(package_directory, 'rviz', 'simulation.rviz') - default_world_name = 'empty' - # Arguments world_launch_arg = DeclareLaunchArgument( name='world', - default_value=default_world_name, + default_value = DEFAULT_WORLD_NAME, description='Name of world file in the world directory' ) @@ -65,17 +26,27 @@ def generate_launch_description(): model_launch_arg = DeclareLaunchArgument( name = 'model', - default_value = get_latest_model_name(), + default_value = DEFAULT_MODEL_NAME, description = 'name of the robot model' ) + # Variables + package_directory = get_package_share_directory('simulation_common') + cwd = os.path.join(package_directory, 'launch') + rviz_config = os.path.join(package_directory, 'rviz', 'simulation.rviz') + xacro_file_path = PathJoinSubstitution([ + FindPackageShare(["simulation_", LaunchConfiguration('model')]), + 'urdf', + 'model.xacro' + ]) + # Robot node robot_state_publisher_node = Node( package='robot_state_publisher', executable='robot_state_publisher', output='screen', - # parameters=[{'robot_description': Command(['xacro ', model]), #TODO: USE LAUNCH ARG - # 'use_sim_time': True}] + parameters=[{'robot_description': Command(['xacro ', xacro_file_path]), + 'use_sim_time': True}] ) # Gazebo node @@ -84,7 +55,7 @@ def generate_launch_description(): 'gzserver', '-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', - [world_directory, '/world/', LaunchConfiguration('world'), '.world']], + [package_directory, '/world/', LaunchConfiguration('world'), '.world']], output='screen', cwd=[cwd] ) diff --git a/simulation_24_marvin/CMakeLists.txt b/simulation_marvin/CMakeLists.txt similarity index 97% rename from simulation_24_marvin/CMakeLists.txt rename to simulation_marvin/CMakeLists.txt index 5d1e8a8..3ed73e2 100644 --- a/simulation_24_marvin/CMakeLists.txt +++ b/simulation_marvin/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(ament_cmake REQUIRED) # find_package( REQUIRED) install( - DIRECTORY launch urdf + DIRECTORY urdf DESTINATION share/${PROJECT_NAME} ) diff --git a/simulation_24_marvin/package.xml b/simulation_marvin/package.xml similarity index 91% rename from simulation_24_marvin/package.xml rename to simulation_marvin/package.xml index 0257003..c7d83a2 100644 --- a/simulation_24_marvin/package.xml +++ b/simulation_marvin/package.xml @@ -3,7 +3,7 @@ simulation_marvin 1.0.0 - Simulation model for ARV's 2022-2024 robot "Marvin" + Simulation model for ARV's 2024 robot "Marvin" Ryan Liao MIT diff --git a/simulation_24_marvin/urdf/chassis.xacro b/simulation_marvin/urdf/chassis.xacro similarity index 100% rename from simulation_24_marvin/urdf/chassis.xacro rename to simulation_marvin/urdf/chassis.xacro diff --git a/simulation_24_marvin/urdf/constants.xacro b/simulation_marvin/urdf/constants.xacro similarity index 100% rename from simulation_24_marvin/urdf/constants.xacro rename to simulation_marvin/urdf/constants.xacro diff --git a/simulation_24_marvin/urdf/marvin.xacro b/simulation_marvin/urdf/model.xacro similarity index 100% rename from simulation_24_marvin/urdf/marvin.xacro rename to simulation_marvin/urdf/model.xacro From e4ac4089bae629e898e2a722090ff7b8f5dafadc Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 22:30:38 -0500 Subject: [PATCH 10/11] Make spawn entity match model name --- simulation_common/launch/simulation.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simulation_common/launch/simulation.launch.py b/simulation_common/launch/simulation.launch.py index a158a7c..442606c 100644 --- a/simulation_common/launch/simulation.launch.py +++ b/simulation_common/launch/simulation.launch.py @@ -70,7 +70,7 @@ def generate_launch_description(): package='gazebo_ros', executable='spawn_entity.py', arguments=['-topic', 'robot_description', - '-entity', 'marvin'], + '-entity', LaunchConfiguration('model')], output='screen' ) From 22c9578bb3903689defc34a1a7297d0ed38c016d Mon Sep 17 00:00:00 2001 From: Ryan Liao Date: Tue, 4 Feb 2025 22:38:25 -0500 Subject: [PATCH 11/11] Update docs --- README.md | 40 +++++++++++-------------------------- simulation_marvin/readme.md | 21 +++++++++++++++++++ 2 files changed, 33 insertions(+), 28 deletions(-) create mode 100644 simulation_marvin/readme.md diff --git a/README.md b/README.md index 4feb20e..c071a22 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Simulation Stack -This package allows you to simulate Marvin (ARV's 2022-2024 robot) using RViz and Gazebo +This package allows you to simulate ARV robots using RViz and Gazebo ## Package Dependencies @@ -23,8 +23,7 @@ The simulation is fairly computation intensive so a GPU is recommended. Note tha ## Installation 1. ```cd``` into ```ws/src``` 2. ```git clone https://github.com/umigv/simulation_stack.git``` -3. ```cd simulation_stack``` -4. ```./scripts/setup.bash``` +3. ```./simulation_stack/scripts/setup.bash``` ## Running the Stack @@ -35,36 +34,17 @@ The simulation is fairly computation intensive so a GPU is recommended. Note tha 4. ```source install/setup.bash``` ### Launching -Running ```ros2 launch simulation_marvin display.launch.py``` will open RViz and display the robot model. This launch file is made to quickly check if the robot model is correctly formatted and used internally when developing the stack. +Running ```ros2 launch simulation_common display.launch.py``` will open RViz and display the robot model. This launch file is made to quickly check if the robot model is correctly formatted and used internally when developing the stack. -Running ```ros2 launch simulation_marvin simulation.launch.py``` will spawn the robot in Gazebo and visualize sensor outputs in RViz. Any project interfacing with the simulation should use this launch file. - - -## Interfacing with the Stack -### Topics -#### Robot -```/cmd_vel``` (```geometry_msgs/msg/Twist```) - target velocity for the robot to move in -```/odom``` (```nav_msgs/msg/Odometry```) - an estimation of the robot's position and velocity - -#### LiDAR -```/velodyne_points``` (```sensor_msgs/msg/PointCloud2```) - pointcloud output of the LiDAR -```/scan``` (```sensor_msgs/msg/LaserScan```) - converted laser scan of the LiDAR pointcloud on the x-y plane - -#### Camera -```/zed/camera_info``` (```sensor_msgs/msg/CameraInfo```) - Information about the camera -```/zed/depth/camera_info``` (```sensor_msgs/msg/CameraInfo```) - Information about the depth camera -```/zed/depth/image_raw``` (```sensor_msgs/msg/Image```) - Raw depth image -```/zed/image_raw``` (```sensor_msgs/msg/Image```) - Raw image -```/zed/points``` (```sensor_msgs/msg/PointCloud2```) - Point cloud of the camera's depth data (warning: visualizing this in RViz is VERY computationally intensive) - -#### IMU -```/imu_controller/out``` (```sensor_msgs/msg/Imu```) - IMU data +Running ```ros2 launch simulation_common simulation.launch.py``` will spawn the robot in Gazebo and visualize sensor outputs in RViz. Any project interfacing with the simulation should use this launch file. ### Launch File Arguments #### display.launch.py +```model``` (default: ```marvin```) - the model to display (remove simulation_ to get model name) ```joint_gui``` (default: ```True```) - whether to enable joint_state_publisher_gui #### simulation.launch.py +```model``` (default: ```marvin```) - the model to simulate (remove simulation_ to get model name) ```headless``` (default: ```False```) - whether to enable RViz. If you have other code that runs their own instance of RViz (ex. Nav2), you should set headless to True ```world``` (default: ```empty```) - Name of the Gazebo world file in the world directory @@ -79,12 +59,16 @@ Running ```ros2 launch simulation_marvin simulation.launch.py``` will spawn the ### Simulation Stack as a Subpackage Since multiple subteams may use this stack as a dependency, **do not include this stack directly in another subteam stack either as a package or git submodule**. Having multiple instances in the same package will result in conflicts. Instead, develop with simulation without adding simulation to your repostitory, and include this project as a submodule in the main stack. + ## Sample Image ![image](https://github.com/umigv/simulation_stack/assets/71594512/d06b174b-d1e1-4ed9-87ef-9c0c3b0abce3) ![image](https://github.com/umigv/simulation_stack/assets/71594512/9130685b-c081-4591-942f-6b38e1be852f) + ## Learning more -Visit the [wiki](https://github.com/umigv/simulation_stack/wiki) to learn about how to set up robot models for simulation +Visit the [wiki](https://github.com/umigv/simulation_stack/wiki) to learn about how to set up robot models for simulation +Go into the folder of individual robots to see the topics that is outputted + ## Possible Issues ### symbol lookup error: ... undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE @@ -101,4 +85,4 @@ This error is caused by [snap variables leaking into terminal variables](https:/ ## Credits Jason Ning and Kari Naga on the sensors team, who created the original URDF files and the Gazebo World in the [marvin](https://github.com/umigv/marvin/tree/main/urdf) repository. -[UTRA ART](https://github.com/UTRA-ART) for their [full IGVC course world](https://github.com/UTRA-ART/Caffeine/tree/master/worlds/). Any file or folder containing IGVC is under the original [Apache 2.0 license](https://github.com/umigv/simulation_stack/blob/igvc_course/simulation_marvin/world/LICENSE) +[UTRA ART](https://github.com/UTRA-ART) for their [full IGVC course world](https://github.com/UTRA-ART/Caffeine/tree/master/worlds/). Any file or folder containing IGVC is under the original [Apache 2.0 license](https://github.com/umigv/simulation_stack/blob/igvc_course/simulation_common/world/LICENSE) diff --git a/simulation_marvin/readme.md b/simulation_marvin/readme.md new file mode 100644 index 0000000..cb5bfac --- /dev/null +++ b/simulation_marvin/readme.md @@ -0,0 +1,21 @@ +## Marvin +ARV's robot used in IGVC 2024 + +## Topics +### Robot +```/cmd_vel``` (```geometry_msgs/msg/Twist```) - target velocity for the robot to move in +```/odom``` (```nav_msgs/msg/Odometry```) - an estimation of the robot's position and velocity + +### LiDAR +```/velodyne_points``` (```sensor_msgs/msg/PointCloud2```) - pointcloud output of the LiDAR +```/scan``` (```sensor_msgs/msg/LaserScan```) - converted laser scan of the LiDAR pointcloud on the x-y plane + +### Camera +```/zed/camera_info``` (```sensor_msgs/msg/CameraInfo```) - Information about the camera +```/zed/depth/camera_info``` (```sensor_msgs/msg/CameraInfo```) - Information about the depth camera +```/zed/depth/image_raw``` (```sensor_msgs/msg/Image```) - Raw depth image +```/zed/image_raw``` (```sensor_msgs/msg/Image```) - Raw image +```/zed/points``` (```sensor_msgs/msg/PointCloud2```) - Point cloud of the camera's depth data (warning: visualizing this in RViz is VERY computationally intensive) + +### IMU +```/imu_controller/out``` (```sensor_msgs/msg/Imu```) - IMU data \ No newline at end of file