Skip to content

Commit 91c1dd4

Browse files
authored
Merge pull request #31 from ctu-mrs/ft_ros2_ground_truth
[ROS2] Ground truth plugin + Refactoring
2 parents d86976b + 7a885fc commit 91c1dd4

25 files changed

+1757
-1383
lines changed

config/uav_ros_gz_bridge_config.yaml.jinja

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
direction: GZ_TO_ROS
2323
{% endfor %}
2424

25+
{%- for topic in odometry_topic_list -%}
26+
- ros_topic_name: "{{ topic["ros"] }}"
27+
gz_topic_name: "{{ topic["gazebo"] }}"
28+
ros_type_name: "nav_msgs/msg/Odometry"
29+
gz_type_name: "gz.msgs.Odometry"
30+
direction: GZ_TO_ROS
31+
{% endfor %}
32+
2533
{%- for topic in imu_topic_list -%}
2634
- ros_topic_name: "{{ topic["ros"] }}"
2735
gz_topic_name: "{{ topic["gazebo"] }}"

models/mrs_robots_description/sdf/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ gz topic -i -t topic_name
350350
- if there is `no subscriber` the topic is not being subscribed by `ros_gz_bridge`
351351
Both issues are most likely caused by incorrect topic names. Verify that the topic names in your sensor’s SDF file do not violate the rules described above, and check the autogenerated `ros_gz_bridge` config file located in the `/tmp` directory.
352352

353+
For more information about which message types can be bridged, we recommend the following [documentation](https://docs.ros.org/en/rolling/p/ros_gz_bridge/).
354+
353355
#### Tests
354356
There are unit tests that can partially verify the Jinja syntax within macros.
355357
Be aware that these tests only ensure the Jinja templates can be rendered successfully. They do not check whether the resulting SDF is valid. Additionally, there is a `test_camera_topic_names` test that verifies the naming conventions for all types of camera sensors.

models/mrs_robots_description/sdf/components/component_snippets.sdf.jinja

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,26 +43,30 @@ limitations under the License.
4343

4444
{%- set spawner_keyword = 'enable-ground-truth' -%}
4545
{%- set spawner_description = 'Enable ROS topic with ground truth odometry published under model namespace' -%}
46-
{%- set spawner_default_args = {'topic_name': 'ground_truth', 'frame_name': 'world', 'update_rate': 150} -%}
46+
{%- set spawner_default_args = {'topic_name': 'ground_truth', 'frame_name': 'world', 'update_rate': 150, 'noise' : 0} -%}
4747

4848
{%- if spawner_keyword in spawner_args.keys() -%}
4949
{{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }}
50-
51-
<!-- Ground truth {-->
52-
{{ generic.odometry_sensor_macro(
53-
odometry_sensor_name = 'ground_truth',
54-
parent_link = parent_link,
55-
topic_name = spawner_args[spawner_keyword]['topic_name'],
56-
noise = 0,
57-
frame_name = spawner_args[spawner_keyword]['frame_name'],
58-
update_rate = spawner_args[spawner_keyword]['update_rate'],
59-
x = x,
60-
y = y,
61-
z = z,
62-
roll = roll,
63-
pitch = pitch,
64-
yaw = yaw)
65-
}}
50+
51+
52+
{%- set world_frame_name = spawner_args[spawner_keyword]['frame_name'] -%}
53+
{%- set robot_base_frame = parent_link -%}
54+
{%- set topic_name = spawner_args['name'] + '/' + spawner_args[spawner_keyword]['topic_name']-%}
55+
{%- set update_rate = spawner_args[spawner_keyword]['update_rate'] -%}
56+
{%- set noise = spawner_args[spawner_keyword]['noise'] -%}
57+
58+
<plugin filename="gz-sim-odometry-publisher-system" name="gz::sim::systems::OdometryPublisher">
59+
<odom_frame>{{ world_frame_name }}</odom_frame>
60+
<robot_base_frame>{{ robot_base_frame }}</robot_base_frame>
61+
<odom_publish_frequency>{{ update_rate }}</odom_publish_frequency>
62+
<odom_topic>{{ topic_name }}</odom_topic>
63+
<odom_covariance_topic>{{ topic_name }}_with_covariance</odom_covariance_topic>
64+
<tf_topic>{{ topic_name }}/pose</tf_topic>
65+
<dimensions>3</dimensions>
66+
<xyz_offset>{{ x }} {{ y }} {{ z }}</xyz_offset>
67+
<rpy_offset>{{ roll }} {{ pitch }} {{ yaw }}</rpy_offset>
68+
<gaussian_noise>{{ noise }}</gaussian_noise>
69+
</plugin>
6670
<!--}-->
6771

6872
{%- endif -%}

models/mrs_robots_description/sdf/components/generic_components.sdf.jinja

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,21 +633,42 @@ limitations under the License.
633633
{%- endmacro -%}
634634
{# <!--}--> #}
635635

636+
{# odometry_sensor_macro {--> #}
637+
{%- macro odometry_sensor_macro(odometry_sensor_name, topic_name,
638+
noise, frame_name, update_rate,
639+
x, y, z, roll, pitch, yaw
640+
) -%}
641+
<plugin filename="gz-sim-odometry-publisher-system" name="gz::sim::systems::OdometryPublisher">
642+
<odom_frame>{{ frame_name }}</odom_frame>
643+
<robot_base_frame>{{ odometry_sensor_name }}</robot_base_frame>
644+
<odom_publish_frequency>{{ update_rate }}</odom_publish_frequency>
645+
<odom_topic>{{ topic_name }}</odom_topic>
646+
<odom_covariance_topic>{{ topic_name }}_with_covariance</odom_covariance_topic>
647+
<tf_topic>{{ odometry_sensor_name }}/pose</tf_topic>
648+
<dimensions>3</dimensions>
649+
<xyz_offset>{{ x }} {{ y }} {{ z }}</xyz_offset>
650+
<rpy_offset>{{ roll }} {{ pitch }} {{ yaw }}</rpy_offset>
651+
<gaussian_noise>{{ noise }}</gaussian_noise>
652+
</plugin>
653+
{%- endmacro -%}
654+
{# <!--}--> #}
655+
636656
{# imu_sensor_macro {--> #}
637657
{%- macro imu_sensor_macro(name, update_rate,
638-
imu_sdf_topic_name, imu_gz_topic_name, imu_ros_topic_name,
658+
imu_sdf_topic_name, imu_gz_frame_id, imu_gz_topic_name, imu_ros_topic_name,
639659
sensor_x, sensor_y, sensor_z, sensor_roll, sensor_pitch, sensor_yaw,
640660
angular_velocity_noise_mean_x, angular_velocity_noise_std_x,
641661
angular_velocity_noise_mean_y, angular_velocity_noise_std_y,
642662
angular_velocity_noise_mean_z, angular_velocity_noise_std_z,
643663
linear_acceleration_noise_mean_x, linear_acceleration_noise_std_x,
644664
linear_acceleration_noise_mean_y, linear_acceleration_noise_std_y,
645665
linear_acceleration_noise_mean_z, linear_acceleration_noise_std_z) -%}
646-
<sensor name="{{ name }}/imu" type="imu">
666+
<sensor name="{{ imu_gz_frame_id }}" type="imu">
647667
<pose>{{ sensor_x }} {{ sensor_y }} {{ sensor_z }} {{ sensor_roll }} {{ sensor_pitch }} {{ sensor_yaw }}</pose>
648668
<always_on>1</always_on>
649669
<update_rate>{{ update_rate }}</update_rate>
650670
<topic>{{ imu_sdf_topic_name }}</topic>
671+
<gz_frame_id>{{ imu_gz_frame_id }}</gz_frame_id>
651672
<imu_gz_topic>{{ imu_gz_topic_name }}</imu_gz_topic>
652673
<imu_ros_topic>{{ imu_ros_topic_name }}</imu_ros_topic>
653674
<imu>

models/mrs_robots_description/sdf/components/lidar/ouster/ouster.sdf.jinja

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
{%- set ouster_model = spawner_args[spawner_keyword]['model'] -%}
1717
{%- set sensor_link_name = sensor_name -%}
1818
{%- set lidar_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/lidar' -%}
19+
{%- set imu_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/imu' -%}
1920

2021
{# OS0 {--> #}
2122

@@ -186,6 +187,7 @@
186187
{{ generic.imu_sensor_macro(
187188
name = sensor_name,
188189
update_rate = 250,
190+
imu_gz_frame_id = imu_gz_frame_id,
189191
imu_sdf_topic_name = spawner_args['name'] + '/' + sensor_name + '/imu',
190192
imu_gz_topic_name = spawner_args['name'] + '/' + sensor_name + '/imu',
191193
imu_ros_topic_name = spawner_args['name'] + '/' + sensor_name + '/imu',

models/mrs_robots_description/sdf/components/lidar/scanse_sweep/scanse_sweep.sdf.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<!-- scanse sweep {-->
1515
{%- set sensor_name = 'scanse_sweep' -%}
1616
{%- set sensor_link_name = sensor_name -%}
17-
{%- set lidar_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/lidar' -%}
17+
{%- set sensor_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/lidar' -%}
1818

1919
{# -- tf from link to sensor -- #}
2020
{%- set lidar_x = 0.0 -%}

models/mrs_robots_description/sdf/components/lidar/velodyne/velodyne.sdf.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<!-- Velodyne {-->
3030
{%- set sensor_name = 'velodyne' -%}
3131
{%- set sensor_link_name = sensor_name -%}
32-
{%- set lidar_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/lidar' -%}
32+
{%- set sensor_gz_frame_id = spawner_args['name'] + '/' + sensor_name + '/lidar' -%}
3333

3434
<link name="{{ sensor_link_name }}">
3535
<pose relative_to="{{ parent_link }}">{{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }}</pose>

models/mrs_robots_description/sdf/drones/f330.sdf.jinja

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,21 @@
540540
{# || optional sensor definitions || #}
541541
{# ================================================================== #}
542542

543+
{# Ground truth {--> #}
544+
{{ components.ground_truth_macro(
545+
parent_link = root,
546+
x = 0,
547+
y = 0,
548+
z = 0,
549+
roll = 0,
550+
pitch = 0,
551+
yaw = 0,
552+
spawner_args = spawner_args)
553+
}}
554+
{# <!--}--> #}
555+
556+
{# ======================= rangefinder sensors ====================== #}
557+
543558
{# Garmin down {--> #}
544559
{{ components.garmin_down_macro(
545560
parent_link = root,

models/mrs_robots_description/sdf/drones/f450.sdf.jinja

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,19 @@
662662
{# || optional sensor definitions || #}
663663
{# ================================================================== #}
664664

665+
{# Ground truth {--> #}
666+
{{ components.ground_truth_macro(
667+
parent_link = root,
668+
x = 0,
669+
y = 0,
670+
z = 0,
671+
roll = 0,
672+
pitch = 0,
673+
yaw = 0,
674+
spawner_args = spawner_args)
675+
}}
676+
{# <!--}--> #}
677+
665678
{# ======================= rangefinder sensors ====================== #}
666679

667680
{# Garmin down {--> #}

models/mrs_robots_description/sdf/drones/f550.sdf.jinja

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,19 @@
710710
{# || optional sensor definitions || #}
711711
{# ================================================================== #}
712712

713+
{# Ground truth {--> #}
714+
{{ components.ground_truth_macro(
715+
parent_link = root,
716+
x = 0,
717+
y = 0,
718+
z = 0,
719+
roll = 0,
720+
pitch = 0,
721+
yaw = 0,
722+
spawner_args = spawner_args)
723+
}}
724+
{# <!--}--> #}
725+
713726
{# ======================= rangefinder sensors ====================== #}
714727

715728
{# Garmin down {--> #}

0 commit comments

Comments
 (0)