diff --git a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja b/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja index 053e09f..e81254a 100644 --- a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja +++ b/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja @@ -70,7 +70,7 @@ limitations under the License. {# #} {# propellers_macro {--> #} -{%- macro propellers_macro(prop_list, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, rotor_drag_coefficient, rolling_moment_coefficient, meshes_z_offset, prop_ixx, prop_ixy, prop_ixz, prop_iyy, prop_iyz, prop_izz, spawner_args) -%} +{%- macro propellers_macro(prop_list, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, rotor_drag_coefficient, rolling_moment_coefficient, meshes_z_offset, use_mrs_plugin, prop_ixx, prop_ixy, prop_ixz, prop_iyy, prop_iyz, prop_izz, spawner_args) -%} {%- set spawner_keyword = 'disable-motor-crash' -%} {%- set spawner_description = 'Disables motor failure after a crash with the environment.' -%} @@ -80,6 +80,12 @@ limitations under the License. {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} + {%- if use_mrs_plugin -%} + {%- set motor_plugin_filename = "libMrsGazeboCommonResources_MotorPropModelPlugin.so" -%} + {%- else -%} + {%- set motor_plugin_filename = "libgazebo_motor_model.so" -%} + {%- endif -%} + {%- for prop_params in prop_list -%} @@ -103,6 +109,7 @@ limitations under the License. color = prop_params['color'], mesh_file = prop_params['mesh_files'][0], mesh_scale = prop_params['mesh_scale'], + motor_plugin_filename = motor_plugin_filename, x = prop_params['x'], y = prop_params['y'], z = prop_params['z'], @@ -139,6 +146,7 @@ limitations under the License. mesh_file_2 = prop_params['mesh_files'][1], meshes_z_offset = meshes_z_offset, mesh_scale = prop_params['mesh_scale'], + motor_plugin_filename = motor_plugin_filename, x = prop_params['x'], y = prop_params['y'], z = prop_params['z'], diff --git a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja.orig b/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja.orig deleted file mode 100644 index fb47f16..0000000 --- a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/component_snippets.sdf.jinja.orig +++ /dev/null @@ -1,3046 +0,0 @@ - - - -{%- import 'mrs_robots_description/sdf/generic_components.sdf.jinja' as generic -%} - -{# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #} -{# !! THIS DOCUMENT CONTAINS ONLY COMPLEX COMPONENT MACROS DESIGNED !! #} -{# !! FOR USE WITH THE MRS DRONE SPAWNER AND USE THE SPAWNER API !! #} -{# !! GENERIC SENSORS, VISUAL BLOCKS, PLUGINS ETC BELONG TO GENERIC !! #} -{# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #} - - - - - -{# ================================================================== #} -{# || Components using spawner API || #} -{# ================================================================== #} - -{# ground_truth_macro {--> #} -{%- macro ground_truth_macro(parent_link, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-ground-truth' -%} - {%- set spawner_description = 'Enable ROS topic with ground truth odometry published under model namespace' -%} - {%- set spawner_default_args = {'topic_name': 'ground_truth', 'frame_name': 'world', 'update_rate': 150} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - {{ generic.odometry_sensor_macro( - odometry_sensor_name = 'ground_truth', - parent_link = parent_link, - topic_name = spawner_args[spawner_keyword]['topic_name'], - noise = 0, - frame_name = spawner_args[spawner_keyword]['frame_name'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# propellers_macro {--> #} -{%- macro propellers_macro(prop_list, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, rotor_drag_coefficient, rolling_moment_coefficient, meshes_z_offset, prop_ixx, prop_ixy, prop_ixz, prop_iyy, prop_iyz, prop_izz, spawner_args) -%} - - {%- set spawner_keyword = 'disable-motor-crash' -%} - {%- set spawner_description = 'Disables motor failure after a crash with the environment.' -%} - {%- set spawner_default_args = none -%} - - {%- set enable_motor_crash = spawner_args[spawner_keyword] is undefined -%} - - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - {%- for prop_params in prop_list -%} - - {%- if prop_params['mesh_files'] | length == 1 -%} - - {{ generic.prop_macro( - direction = prop_params['direction'], - rotor_velocity_slowdown_sim = rotor_velocity_slowdown_sim, - motor_constant = motor_constant, - moment_constant = moment_constant, - parent = parent, - mass = mass, - radius = radius, - time_constant_up = time_constant_up, - time_constant_down = time_constant_down, - max_rot_velocity = max_rot_velocity, - motor_number = prop_params['motor_number'], - rotor_drag_coefficient = rotor_drag_coefficient, - rolling_moment_coefficient = rolling_moment_coefficient, - enable_motor_crash = enable_motor_crash, - color = prop_params['color'], - mesh_file = prop_params['mesh_files'][0], - mesh_scale = prop_params['mesh_scale'], - x = prop_params['x'], - y = prop_params['y'], - z = prop_params['z'], - roll = 0, - pitch = 0, - yaw = 0, - ixx = prop_ixx, - ixy = prop_ixy, - ixz = prop_ixz, - iyy = prop_iyy, - iyz = prop_iyz, - izz = prop_izz) - }} - - {%- elif prop_params['mesh_files'] | length == 2 -%} - - {{ generic.prop_macro_2_meshes( - direction = prop_params['direction'], - rotor_velocity_slowdown_sim = rotor_velocity_slowdown_sim, - motor_constant = motor_constant, - moment_constant = moment_constant, - parent = parent, - mass = mass, - radius = radius, - time_constant_up = time_constant_up, - time_constant_down = time_constant_down, - max_rot_velocity = max_rot_velocity, - motor_number = prop_params['motor_number'], - rotor_drag_coefficient = rotor_drag_coefficient, - rolling_moment_coefficient = rolling_moment_coefficient, - enable_motor_crash = enable_motor_crash, - color = prop_params['color'], - mesh_file_1 = prop_params['mesh_files'][0], - mesh_file_2 = prop_params['mesh_files'][1], - meshes_z_offset = meshes_z_offset, - mesh_scale = prop_params['mesh_scale'], - x = prop_params['x'], - y = prop_params['y'], - z = prop_params['z'], - roll = 0, - pitch = 0, - yaw = 0, - ixx = prop_ixx, - ixy = prop_ixy, - ixz = prop_ixz, - iyy = prop_iyy, - iyz = prop_iyz, - izz = prop_izz) - }} - - {%- endif -%} - - {%- endfor -%} - - -{%- endmacro -%} -{# #} - -{# ======================= rangefinder sensors ====================== #} - -{# garmin_down_macro (connected through pixhawk) {--> #} -{%- macro garmin_down_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-rangefinder' -%} - {%- set spawner_description = 'Add a laser rangefinder (Garmin LIDAR-Lite v3) pointing down. Creates a Gazebo publisher for gazebo_mavlink_interface. ROS topic must be created by mavros. Do not set range outside <0.06 - 40.0> (unrealistic)' -%} - {%- set spawner_default_args = {'update_rate': 100, 'min_range': 0.1, 'max_range': 36.0, 'noise': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set sensor_name = 'lidar0' -%} - - - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - - {{ generic.zero_inertial_macro() }} - - {{ generic.visual_mesh_macro( - name = sensor_name, - mesh_file = 'model://mrs_robots_description/meshes/sensors/garmin_lidar_v3.stl', - mesh_scale = '0.001 0.001 0.001', - color = 'DarkGrey', - x = 0.015, - y = 0, - z = 0, - roll = 0, - pitch = 0, - yaw = 0) - }} - - {{ generic.gazebo_rangefinder_sensor_macro( - name = sensor_name, - parent_frame_name = spawner_args['name'] + '/fcu', - sensor_frame_name = spawner_args['name'] + '/garmin', - topic = sensor_name, - update_rate = spawner_args[spawner_keyword]['update_rate'], - samples = 1, - fov = 0.03, - min_distance = spawner_args[spawner_keyword]['min_range'], - max_distance = spawner_args[spawner_keyword]['max_range'], - resolution = 0.005, - noise = spawner_args[spawner_keyword]['noise'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - - - {{ sensor_name }}_link - {{ parent_link }} - - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# garmin_down_external_macro (external -> connected to computer) {--> #} -{%- macro garmin_down_external_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-rangefinder-external' -%} - {%- set spawner_description = 'Add a laser rangefinder (Garmin LIDAR-Lite v3) pointing down. Creates a ROS topic /robot_name/garmin/range. Do not set range outside <0.06 - 40.0> (unrealistic)' -%} - {%- set spawner_default_args = {'update_rate': 100, 'min_range': 0.1, 'max_range': 36.0, 'noise': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set sensor_name = 'garmin' -%} - - - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - - {{ generic.zero_inertial_macro() }} - - {{ generic.visual_mesh_macro( - name = sensor_name, - mesh_file = 'model://mrs_robots_description/meshes/sensors/garmin_lidar_v3.stl', - mesh_scale = '0.001 0.001 0.001', - color = 'DarkGrey', - x = 0.015, - y = 0, - z = 0, - roll = 0, - pitch = 0, - yaw = 0) - }} - - {{ generic.rangefinder_sensor_macro( - name = sensor_name, - parent_frame_name = spawner_args['name'] + '/fcu', - sensor_frame_name = spawner_args['name'] + '/' + sensor_name, - topic = sensor_name + '/range', - update_rate = spawner_args[spawner_keyword]['update_rate'], - samples = 1, - fov = 0.03, - min_distance = spawner_args[spawner_keyword]['min_range'], - max_distance = spawner_args[spawner_keyword]['max_range'], - resolution = 0.005, - noise = spawner_args[spawner_keyword]['noise'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - - - {{ sensor_name }}_link - {{ parent_link }} - - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# garmin_up_external_macro (external -> connected to computer) {--> #} -{%- macro garmin_up_external_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-rangefinder-up' -%} - {%- set spawner_description = 'Add a laser rangefinder (Garmin LIDAR-Lite v3) pointing up. Creates a ROS topic /robot_name/garmin/range. Do not set range outside <0.06 - 40.0> (unrealistic)' -%} - {%- set spawner_default_args = {'update_rate': 100, 'min_range': 0.1, 'max_range': 36.0, 'noise': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set sensor_name = 'garmin_up' -%} - - - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - - {{ generic.zero_inertial_macro() }} - - {{ generic.visual_mesh_macro( - name = sensor_name, - mesh_file = 'model://mrs_robots_description/meshes/sensors/garmin_lidar_v3.stl', - mesh_scale = '0.001 0.001 0.001', - color = 'DarkGrey', - x = 0.015, - y = 0, - z = 0, - roll = 0, - pitch = 0, - yaw = 0) - }} - - {{ generic.rangefinder_sensor_macro( - name = sensor_name, - parent_frame_name = spawner_args['name'] + '/fcu', - sensor_frame_name = spawner_args['name'] + '/' + sensor_name, - topic = sensor_name + '/range', - update_rate = spawner_args[spawner_keyword]['update_rate'], - samples = 1, - fov = 0.03, - min_distance = spawner_args[spawner_keyword]['min_range'], - max_distance = spawner_args[spawner_keyword]['max_range'], - resolution = 0.005, - noise = spawner_args[spawner_keyword]['noise'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - - - {{ sensor_name }}_link - {{ parent_link }} - - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# teraranger_macro {--> #} -{%- macro teraranger_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-teraranger' -%} - {%- set spawner_description = 'Add a laser rangefinder (Teraranger One) pointing down' -%} - {%- set spawner_default_args = {'update_rate': 100, 'min_range': 0.1, 'max_range': 14.0, 'noise': 0.04} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set sensor_name = 'teraranger' -%} - - - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro(sensor_name, 0.015, 0.027, 0.033, 'Yellow', 0, 0, 0, 0, 0, 0) }} - {{ generic.rangefinder_sensor_macro( - name = sensor_name, - parent_frame_name = spawner_args['name'] + '/fcu', - sensor_frame_name = spawner_args['name'] + '/' + sensor_name, - topic = sensor_name + '/range', - update_rate = spawner_args[spawner_keyword]['update_rate'], - samples = 1, - fov = 0.03, - min_distance = spawner_args[spawner_keyword]['min_range'], - max_distance = spawner_args[spawner_keyword]['max_range'], - resolution = 0.005, - noise = spawner_args[spawner_keyword]['noise'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ parent_link }} - {{ sensor_name}}_link - - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# teraranger_evo_tower_macro {--> #} -{%- macro teraranger_evo_tower_macro(parent_link, visualize, frame_name, parent_frame_name, gaussian_noise, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-teraranger-evo-tower' -%} - {%- set spawner_description = 'Add the Teraranger Evo Tower laser scanner to the vehicle' -%} - {%- set spawner_default_args = none -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {# -- parameters of sensors -- (id, x, y, z, roll, pitch, yaw) #} - {%- set sensor_parameters = [(0, 0.046, 0.0, 0.001, 0.0, 0.0, 0.0), - (1, 0.032, 0.032, 0.001, 0.0, 0.0, math.radians(45)), - (2, 0.000, 0.046, 0.001, 0.0, 0.0, math.radians(90)), - (3, -0.032, 0.032, 0.001, 0.0, 0.0, math.radians(135)), - (4, -0.046, 0.000, 0.001, 0.0, 0.0, math.radians(180)), - (5, -0.032, -0.032, 0.001, 0.0, 0.0, -math.radians(135)), - (6, 0.000, -0.046, 0.001, 0.0, 0.0, -math.radians(90)), - (7, 0.032, -0.032, 0.001, 0.0, 0.0, -math.radians(45))] -%} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - 0 0 -0.014 0 0 0 - - - 0.001 - 0.06 - - - - - - - - {%- for id_, x_, y_, z_, roll_, pitch_, yaw_ in sensor_parameters -%} - - {{ generic.teraranger_evo_macro( - parent_link = parent_link, - id = id_, - visualize = visualize, - frame_name = frame_name, - parent_frame_name = parent_frame_name, - gaussian_noise = gaussian_noise, - x = x_, - y = y_, - z = z_, - roll = roll_, - pitch = pitch_, - yaw = yaw_) - }} - - {%- endfor -%} - - - - {{ parent_link }} - teraranger_evo_tower_link - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# ========================== LIDAR sensors ========================= #} - -{# rplidar_macro {--> #} -{%- macro rplidar_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-rplidar' -%} - {%- set spawner_description = 'Add the RPlidar A3 laser scanner. Do not set range outside <0.10 - 15.0> (unrealistic)' -%} - {%- set spawner_default_args = {'horizontal_samples': 1600, 'update_rate': 20.0, 'min_range': 0.15, 'max_range': 14.0, 'noise': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set sensor_name = 'rplidar' -%} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - - {{ generic.visual_mesh_macro( - name = 'base_visual', - mesh_file = 'model://mrs_robots_description/meshes/sensors/rplidar.stl', - mesh_scale = '0.001 0.001 0.001', - color = 'FlatBlack', - x = 0, - y = 0, - z = -0.029, - roll = 0, - pitch = 0, - yaw = math.radians(180)) - }} - - 0 0 -0.011 0 0 0 - - - 0.001 - 0.038 - - - - - - - - - - - false - {{ spawner_args[spawner_keyword]['update_rate'] }} - - - - {{ spawner_args[spawner_keyword]['horizontal_samples'] | int }} - 1 - -3.1241390751 - 3.1241390751 - - - - {{ spawner_args[spawner_keyword]['min_range'] }} - {{ spawner_args[spawner_keyword]['max_range'] }} - 0.01 - - - gaussian - 0.0 - {{ spawner_args[spawner_keyword]['noise'] }} - - - - {{ sensor_name }}/scan - {{ spawner_args['name'] }}/{{ sensor_name }} - {{ spawner_args['name'] }}/fcu - {{ x }} - {{ y }} - {{ z }} - {{ roll }} - {{ pitch }} - {{ yaw }} - - - - - - - - {{ parent_link }} - {{ sensor_name }}_link - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# scanse_sweep_macro {--> #} -{%- macro scanse_sweep_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-scanse-sweep' -%} - {%- set spawner_description = 'Add the Scanse Sweep laser scanner' -%} - {%- set spawner_default_args = {'horizontal_samples': 500, 'update_rate': 10.0, 'min_range': 0.45, 'max_range': 10.0, 'noise': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - - - 0 0 -0.031 0 0 0 - - - 0.0255 - 0.0234 - - - - - - - - - - 0.0385 - 0.0325 - - - - - - - - - - - false - {{ spawner_args[spawner_keyword]['update_rate'] }} - - - - {{ spawner_args[spawner_keyword]['horizontal_samples'] | int }} - 1 - 0 - 6.283185 - - - - {{ spawner_args[spawner_keyword]['min_range'] }} - {{ spawner_args[spawner_keyword]['max_range'] }} - 0.01 - - - gaussian - 0.0 - {{ spawner_args[spawner_keyword]['noise'] }} - - - - scanse_sweep/range - {{ spawner_args['name'] }}/scanse_sweep - {{ spawner_args['name'] }}/fcu - {{ x }} - {{ y }} - {{ z }} - {{ roll }} - {{ pitch }} - {{ yaw }} - - - - - - - - {{ parent_link }} - sweeper_link - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# ouster_macro {--> #} -{%- macro ouster_macro(parent_link, sensor_name, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-ouster' -%} - {%- set spawner_description = 'Add Ouster laser scanner to the vehicle. Select a model to automatically set number of lines, vertical FOV and range. Available models: OS0-32, OS0-64, OS0-128, OS1-16, OS1-32G1, OS1-32, OS1-64, OS1-128, OS2-32, OS2-64, OS2-128' -%} - {%- set spawner_default_args = {'model': 'OS1-16', 'horizontal_samples': 2048, 'update_rate': 10, 'noise': 0.03, 'use_gpu': false} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {# model selection {--> #} - {%- set ouster_model = spawner_args[spawner_keyword]['model'] -%} - - {# OS0 {--> #} - - {# OS0-32 #} - {%- if ouster_model == 'OS0-32' -%} - {%- set lasers = 32 -%} - {%- set vfov_angle = 90 -%} - {%- set range = 55 -%} - {%- endif -%} - - {# OS0-64 #} - {%- if ouster_model == 'OS0-64' -%} - {%- set lasers = 64 -%} - {%- set vfov_angle = 90 -%} - {%- set range = 55 -%} - {%- endif -%} - - {# OS0-128 #} - {%- if ouster_model == 'OS0-128' -%} - {%- set lasers = 128 -%} - {%- set vfov_angle = 90 -%} - {%- set range = 55 -%} - {%- endif -%} - - {# #} - - {# OS1 Generation 1 {--> #} - {# #} - {%- if ouster_model == 'OS1-16' -%} - {%- set lasers = 16 -%} - {%- set vfov_angle = 33.2 -%} - {%- set range = 120 -%} - {%- endif -%} - {# #} - - {# OS1 Generation 2 {--> #} - - {# OS1-32 Generation 2 #} - {%- if ouster_model == 'OS1-32' -%} - {%- set lasers = 32 -%} - {%- set vfov_angle = 45 -%} - {%- set range = 120 -%} - {%- endif -%} - - {# OS1-64 Generation 2 #} - {%- if ouster_model == 'OS1-64' -%} - {%- set lasers = 64 -%} - {%- set vfov_angle = 45 -%} - {%- set range = 120 -%} - {%- endif -%} - - {# OS1-128 Generation 2 #} - {%- if ouster_model == 'OS1-128' -%} - {%- set lasers = 128 -%} - {%- set vfov_angle = 45 -%} - {%- set range = 120 -%} - {%- endif -%} - - {# #} - - {# OS2 {--> #} - - {# OS2-32 #} - {%- if ouster_model == 'OS2-32' -%} - {%- set lasers = 32 -%} - {%- set vfov_angle = 22.5 -%} - {%- set range = 240 -%} - {%- endif -%} - - {# OS2-64 #} - {%- if ouster_model == 'OS2-64' -%} - {%- set lasers = 64 -%} - {%- set vfov_angle = 22.5 -%} - {%- set range = 240 -%} - {%- endif -%} - - {# OS2-128 #} - {%- if ouster_model == 'OS2-128' -%} - {%- set lasers = 128 -%} - {%- set vfov_angle = 22.5 -%} - {%- set range = 240 -%} - {%- endif -%} - - {# #} - - {# #} - - {# The real ouster is transforming lidar data from lidar_frame to sensor_frame directly for user. #} - {# For simplicity, we are placing sensor_frame to the same place as the lidar_frame is. #} - - {# setup local variables {--> #} - - {# -- gazebo links -- #} - {%- set sensor_link = sensor_name + '_sensor_link' -%} - - {# -- frame names -- #} - {%- set frame_fcu = spawner_args['name'] + '/fcu' -%} - {%- set frame_sensor = spawner_args['name'] + '/' + sensor_name + '_sensor' -%} - {%- set frame_lidar = spawner_args['name'] + '/' + sensor_name + '_lidar' -%} - {%- set frame_imu = spawner_args['name'] + '/' + sensor_name + '_imu' -%} - - {# -- topics -- #} - {%- set topic_lidar = '/' + spawner_args['name'] + '/' + sensor_name + '_cloud_nodelet/points' -%} - {%- set topic_imu = '/' + spawner_args['name'] + '/' + sensor_name + '_cloud_nodelet/imu' -%} - {%- set topic_diag = '/' + spawner_args['name'] + '/' + sensor_name + '_cloud_nodelet/is_alive' -%} - - {# -- tf from sensor to lidar -- #} - {%- set lidar_x = 0 -%} - {%- set lidar_y = 0 -%} - {%- set lidar_z = 0.0344 -%} - {%- set lidar_roll = 0 -%} - {%- set lidar_pitch = 0 -%} - {%- set lidar_yaw = 0 -%} - - {# -- tf from sensor to imu -- #} - {%- set imu_x = 0.006253 -%} - {%- set imu_y = -0.011775 -%} - {%- set imu_z = 0.007645 -%} - {%- set imu_roll = 0 -%} - {%- set imu_pitch = 0 -%} - {%- set imu_yaw = 0 -%} - - {%- if spawner_args[spawner_keyword]['use_gpu'] -%} - {%- set ouster_plugin_filename ='libMrsGazeboCommonResources_3DLidarGpuPlugin.so' -%} - {%- set sensor_type = 'gpu_ray' -%} - {%- else -%} - {%- set ouster_plugin_filename ='libMrsGazeboCommonResources_3DLidarPlugin.so' -%} - {%- set sensor_type = 'ray' -%} - {%- endif -%} - - {# #} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - - {{ generic.visual_mesh_macro( - name = 'base_visual', - mesh_file = 'model://mrs_robots_description/meshes/sensors/os1_64.dae', - mesh_scale = '1 1 1', - color = 'White', - x = 0, - y = 0, - z = 0, - roll = 0, - pitch = 0, - yaw = math.radians(90)) - }} - - 0 0 {{ lidar_z }} 0 0 - - - 0.035 - 0.038 - - - - - - - - - - - {{ imu_x }} {{ imu_y }} {{ imu_z }} {{ imu_roll }} {{ imu_pitch }} {{ imu_yaw }} - true - true - 100 - false - __default_topic__ - - - {{ topic_imu }} - {{ sensor_link }} - 100 - 0.005 - 0 0 0 - 0 0 0 - {{ frame_imu }} - - - - - - - {{ lidar_x }} {{ lidar_y }} {{ lidar_z }} {{ lidar_roll }} {{ lidar_pitch }} {{ lidar_yaw }} - false - {{ spawner_args[spawner_keyword]['update_rate'] }} - - - - {{ spawner_args[spawner_keyword]['horizontal_samples'] }} - 1 - 0 - {{ 2*math.pi }} - - - {{ lasers }} - 1 - {{ -vfov_angle/2*math.radians(180)/180.0 }} - {{ vfov_angle/2*math.radians(180)/180.0 }} - - - - 0.1 - {{ range }} - 0.03 - - - - {{ frame_fcu }} - {{ frame_sensor }} - {{ x + lidar_x }} - {{ y + lidar_y }} - {{ z + lidar_z }} - {{ roll + lidar_roll }} - {{ pitch + lidar_pitch }} - {{ yaw + lidar_yaw }} - - - {{ frame_lidar }} - 0 - 0 - 0 - 0 - 0 - {{ math.radians(180) }} - {{ topic_lidar }} - {{ topic_diag }} - 0.1 - {{ range }} - true - {{ spawner_args[spawner_keyword]['noise'] }} - - - true - {{ frame_imu }} - {{ imu_x - lidar_x }} - {{ imu_y - lidar_y }} - {{ imu_z - lidar_z }} - {{ imu_roll - lidar_roll }} - {{ imu_pitch - lidar_pitch }} - {{ imu_yaw - lidar_yaw }} - - - - - - - - {{ parent_link }} - {{ sensor_link }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# velodyne_macro {--> #} -{%- macro velodyne_macro(parent_link, sensor_name, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-velodyne' -%} - {%- set spawner_description = 'Add Velodyne PUCK laser scanner to the vehicle' -%} - {%- set spawner_default_args = {'horizontal_samples': 3600, 'lasers': 16, 'noise': 0.01, 'range': 100, 'vfov': 30, 'update_rate': 20, 'use_gpu': false} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {# setup local variables {--> #} - - {# The real ouster is transforming lidar data from lidar_frame to sensor_frame directly for user. #} - {# For simplicity, we are placing sensor_frame to the same place as the lidar_frame is. #} - {# Velodyne macro is using the same plugin as ouster macro. Therefore we need to render data in the same way. #} - - {# -- frame names -- #} - {%- set frame_fcu = spawner_args['name'] + '/fcu' -%} - {%- set frame_sensor = spawner_args['name'] + '/' + sensor_name + '_sensor' -%} - {%- set frame_lidar = spawner_args['name'] + '/' + sensor_name -%} - - {# -- topics -- #} - {%- set topic_lidar = '/' + spawner_args['name'] + '/' + sensor_name + '/scan' -%} - {%- set topic_diag = '/' + spawner_args['name'] + '/' + sensor_name + '/is_alive' -%} - - {# -- tf from sensor to lidar -- #} - {# The laser rays should be coming approximately from the half of sensor height #} - {%- set lidar_x = 0 -%} - {%- set lidar_y = 0 -%} - {%- set lidar_z = 0.037725 -%} - {%- set lidar_roll = 0 -%} - {%- set lidar_pitch = 0 -%} - {%- set lidar_yaw = 0 -%} - - {%- if spawner_args[spawner_keyword]['use_gpu'] -%} - {%- set velodyne_plugin_filename ='libMrsGazeboCommonResources_3DLidarGpuPlugin.so' -%} - {%- set sensor_type = 'gpu_ray' -%} - {%- else -%} - {%- set velodyne_plugin_filename ='libMrsGazeboCommonResources_3DLidarPlugin.so' -%} - {%- set sensor_type = 'ray' -%} - {%- endif -%} - {# #} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - - - 0 0 0.0094 0 0 0 - - - 0.0188 - 0.062 - - - - - - - - 0 0 0.0643 0 0 0 - - - 0.0148 - 0.062 - - - - - - - - 0 0 0.03785 0 0 0 - - - 0.0381 - 0.058 - - - - - - - - - - - {{ lidar_x }} {{ lidar_y }} {{ lidar_z }} {{ lidar_roll }} {{ lidar_pitch }} {{ lidar_yaw }} - {# 0 0 0 0 0 0 #} - false - {{ spawner_args[spawner_keyword]['update_rate'] }} - - - - {{ spawner_args[spawner_keyword]['horizontal_samples'] }} - 1 - {{ -math.radians(180) }} - {{ math.radians(180) }} - - - {{ spawner_args[spawner_keyword]['lasers'] }} - 1 - {{ -spawner_args[spawner_keyword]['vfov']/2*math.radians(180)/180.0 }} - {{ spawner_args[spawner_keyword]['vfov']/2*math.radians(180)/180.0 }} - - - - 0.1 - {{ spawner_args[spawner_keyword]['range'] }} - 0.03 - - - - {{ frame_fcu }} - {{ frame_sensor }} - {{ x + lidar_x }} - {{ y + lidar_y }} - {{ z + lidar_z }} - {{ roll }} - {{ pitch }} - {{ yaw }} - 0 - 0 - 0 - {{ lidar_roll }} - {{ lidar_pitch }} - {{ lidar_yaw }} - {{ topic_lidar }} - {{ topic_diag }} - {{ frame_lidar }} - 0.1 - {{ spawner_args[spawner_keyword]['range'] }} - {{ spawner_args[spawner_keyword]['noise'] }} - false - - - - - - - - {{ parent_link }} - velodyne_link - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# ============================= cameras ============================ #} - -{# realsense_top_macro {--> #} -{%- macro realsense_top_macro(camera_name, camera_suffix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-realsense-top' -%} - {%- set spawner_description = 'Add Intel Realsense D435 depth camera to the vehicle [1280x720 @ 30hz], pointed forward, placed on an aluminum frame above the body' -%} - {%- set spawner_default_args = {'realistic': False, 'update_rate': 30} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.realsense_d435_macro( - namespace = spawner_args['name'], - camera_name = camera_name, - camera_suffix = camera_suffix, - parent_link = parent_link, - realistic = spawner_args[spawner_keyword]['realistic'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# realsense_front_macro {--> #} -{%- macro realsense_front_macro(camera_name, camera_suffix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-realsense-front' -%} - {%- set spawner_description = 'Add Intel Realsense D435 depth camera to the vehicle [1280x720 @ 30hz], pointed forward placed on the front holder between the legs' -%} - {%- set spawner_default_args = {'realistic': False, 'update_rate': 30} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.realsense_d435_macro( - namespace = spawner_args['name'], - camera_name = camera_name, - camera_suffix = camera_suffix, - parent_link = parent_link, - realistic = spawner_args[spawner_keyword]['realistic'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# realsense_front_pitched_macro {--> #} -{%- macro realsense_front_pitched_macro(camera_name, camera_suffix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-realsense-front-pitched' -%} - {%- set spawner_description = 'Add Intel Realsense D435 depth camera to the vehicle [1280x720 @ 30hz], pointed forward pitched down by 10-45 deg (angle depends on vehicle model)' -%} - {%- set spawner_default_args = {'realistic': False, 'update_rate': 30} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.realsense_d435_macro( - namespace = spawner_args['name'], - camera_name = camera_name, - camera_suffix = camera_suffix, - parent_link = parent_link, - realistic = spawner_args[spawner_keyword]['realistic'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# realsense_up_macro {--> #} -{%- macro realsense_up_macro(camera_name, camera_suffix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-realsense-up' -%} - {%- set spawner_description = 'Add Intel Realsense D435 depth camera to the vehicle [1280x720 @ 30hz], pointed upwards' -%} - {%- set spawner_default_args = {'realistic': False, 'update_rate': 30} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.realsense_d435_macro( - namespace = spawner_args['name'], - camera_name = camera_name, - camera_suffix = camera_suffix, - parent_link = parent_link, - realistic = spawner_args[spawner_keyword]['realistic'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# realsense_down_macro {--> #} -{%- macro realsense_down_macro(camera_name, camera_suffix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-realsense-down' -%} - {%- set spawner_description = 'Add Intel Realsense D435 depth camera to the vehicle [1280x720 @ 30hz], pointed down' -%} - {%- set spawner_default_args = {'realistic': False, 'update_rate': 30} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.realsense_d435_macro( - namespace = spawner_args['name'], - camera_name = camera_name, - camera_suffix = camera_suffix, - parent_link = parent_link, - realistic = spawner_args[spawner_keyword]['realistic'], - update_rate = spawner_args[spawner_keyword]['update_rate'], - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} - -{%- endmacro -%} -{# #} - -{# bluefox_camera_macro {--> #} -{%- macro bluefox_camera_macro(camera_name, parent_link, x, y, z, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-bluefox-camera' -%} - {%- set spawner_description = 'Add bluefox camera to the vehicle [752x480 @ 50hz], pointing down' -%} - {%- set spawner_default_args = {'update_rate': 100, 'noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - frame_rate = spawner_args[spawner_keyword]['update_rate'], - horizontal_fov = 2.1, - image_width = 752, - image_height = 480, - min_distance = 0.02, - max_distance = 80, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = 0, - pitch = math.radians(90), - yaw = 0) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# bluefox_camera_reverse_macro {--> #} -{%- macro bluefox_camera_reverse_macro(camera_name, parent_link, x, y, z, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-bluefox-camera-reverse' -%} - {%- set spawner_description = 'Add bluefox camera to the vehicle [752x480 @ 50hz], pointing down but image is rotated by 180 deg' -%} - {%- set spawner_default_args = {'update_rate': 100, 'noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - frame_rate = spawner_args[spawner_keyword]['update_rate'], - horizontal_fov = 2.1, - image_width = 752, - image_height = 480, - min_distance = 0.02, - max_distance = 80, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = 0, - pitch = math.radians(90), - yaw = math.radians(180)) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# bluefox_camera_front_macro {--> #} -{%- macro bluefox_camera_front_macro(camera_name, parent_link, x, y, z, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-bluefox-camera-front' -%} - {%- set spawner_description = 'Add bluefox camera to the vehicle [752x480 @ 50hz], pointing forward' -%} - {%- set spawner_default_args = {'update_rate': 100, 'noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - frame_rate = spawner_args[spawner_keyword]['update_rate'], - horizontal_fov = 2.1, - image_width = 752, - image_height = 480, - min_distance = 0.02, - max_distance = 80, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = 0, - pitch = 0, - yaw = 0) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# mobius_down_macro {-->#} -{%- macro mobius_down_macro(camera_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-mobius-camera-down' -%} - {%- set spawner_description = 'Add mobius camera to the vehicle [1280x720 @ 30hz], pointing down' -%} - {%- set spawner_default_args = {'update_rate': 30, 'noise': 0.007} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - frame_rate = spawner_args[spawner_keyword]['update_rate'], - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - horizontal_fov = 2.28638, - image_width = 1280, - image_height = 720, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/mobius.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = -0.004, - visual_y = 0.0045, - visual_z = 0, - visual_roll = 0, - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# mobius_front_macro {-->#} -{%- macro mobius_front_macro(camera_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-mobius-camera-front' -%} - {%- set spawner_description = 'Add mobius camera to the vehicle [1280x720 @ 30hz], pointing forward' -%} - {%- set spawner_default_args = {'update_rate': 30, 'noise': 0.007} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - frame_rate = spawner_args[spawner_keyword]['update_rate'], - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - horizontal_fov = 2.28638, - image_width = 1280, - image_height = 720, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/mobius.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = -0.004, - visual_y = 0.0045, - visual_z = 0, - visual_roll = 0, - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# mobius_back_left_macro {-->#} -{%- macro mobius_back_left_macro(camera_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-mobius-camera-back-left' -%} - {%- set spawner_description = 'Add mobius camera to the vehicle [1280x720 @ 30hz], pointing to the back left' -%} - {%- set spawner_default_args = {'update_rate': 30, 'noise': 0.007} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - frame_rate = spawner_args[spawner_keyword]['update_rate'], - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - horizontal_fov = 2.28638, - image_width = 1280, - image_height = 720, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/mobius.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = -0.004, - visual_y = 0.0045, - visual_z = 0, - visual_roll = 0, - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# mobius_back_right_macro {-->#} -{%- macro mobius_back_right_macro(camera_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-mobius-camera-back-right' -%} - {%- set spawner_description = 'Add mobius camera to the vehicle [1280x720 @ 30hz], pointing to the back right' -%} - {%- set spawner_default_args = {'update_rate': 30, 'noise': 0.007} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - frame_rate = spawner_args[spawner_keyword]['update_rate'], - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - horizontal_fov = 2.28638, - image_width = 1280, - image_height = 720, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/mobius.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = -0.004, - visual_y = 0.0045, - visual_z = 0, - visual_roll = 0, - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# fisheye_bluefox_macro {--> #} -{%- macro fisheye_bluefox_macro(camera_name, topic_ns_prefix, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-fisheye-camera' -%} - {%- set spawner_description = 'Add a fisheye bluefox camera [752x480 @ 45hz, 180 deg] to the vehicle' -%} - {%- set spawner_default_args = {'update_rate': 45, 'noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.fisheye_camera_macro( - camera_name = camera_name, - topic_ns_prefix = topic_ns_prefix, - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_link = parent_link, - frame_rate = spawner_args[spawner_keyword]['update_rate'], - horizontal_fov = math.radians(180), - image_width = 752, - image_height = 480, - lens_type = 'custom', - lens_c1 = 1.05, - lens_c2 = 4, - lens_f = 1.0, - lens_fun = 'tan', - lens_scale = True, - lens_cutoff_angle = math.radians(90), - lens_texture_size = 512, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# servo_camera_macro {--> #} -{%- macro servo_camera_macro(parent, offset_pitch_link_x, offset_pitch_link_y, offset_pitch_link_z, offset_pitch_link_yaw, offset_pitch_link_roll, offset_pitch_link_pitch, offset_roll_link_x, offset_roll_link_y, offset_roll_link_z, offset_roll_link_yaw, offset_roll_link_roll, offset_roll_link_pitch, tilt_update_rate, max_pitch, min_pitch, max_pitch_rate, max_roll, min_roll, max_roll_rate, compensate_tilt_roll, compensate_tilt_pitch, parent_frame_name, sensor_base_frame_name, camera_frame_name, camera_update_rate, horizontal_fov, img_width, img_height, roll_link_mesh_file, pitch_link_mesh_file, mesh_scale, spawner_args) -%} - - {%- set spawner_keyword = 'enable-servo-camera' -%} - {%- set spawner_description = 'Add a camera on virtual servo to the vehicle' -%} - {%- set spawner_default_args = none -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - - 0 0 0 0 0 0 - {{ generic.zero_inertial_macro() }} - - 0 0 0 0 0 0 - - {%- if roll_link_mesh_file == '' -%} - - 0.01 0.01 0.01 - - {%- else -%} - - {{ roll_link_mesh_file }} - {{ mesh_scale }} - - {%- endif -%} - - - - - - - - - - - 0 0 0 0 0 0 - {{ generic.zero_inertial_macro() }} - - 0 0 0 0 0 0 - - {%- if pitch_link_mesh_file == '' -%} - - 0.01 0.01 0.01 - - {%- else -%} - - {{ pitch_link_mesh_file }} - {{ mesh_scale }} - - {%- endif -%} - - - - - - - {{ camera_update_rate }} - - {{ horizontal_fov }} - - {{ img_width }} - {{ img_height }} - - - 0.25 - 100 - - - gaussian - - 0.0 - 0.01 - - - - true - {{ camera_update_rate }} - servo_camera - image_raw - camera_info - {{ camera_frame_name }} - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - {{ parent_frame_name }} - {{ sensor_base_frame_name }} - - - - - - {{ tilt_update_rate }} - {{ max_pitch_rate }} - {{ max_pitch }} - {{ min_pitch }} - {{ max_roll_rate }} - {{ max_roll }} - {{ min_roll }} - servo_camera_pitch_joint - servo_camera_roll_joint - servo_camera_gimbal_link - {{ parent }} - {{ compensate_tilt_roll }} - {{ compensate_tilt_pitch }} - - - - - - {{ parent }} - servo_camera_gimbal_link - {{ offset_roll_link_x }} {{ offset_roll_link_y }} {{ offset_roll_link_z }} {{ offset_roll_link_roll }} {{ offset_roll_link_pitch }} {{ offset_roll_link_yaw }} - - 1 0 0 - - -0.5 - 0.5 - 1 - 10 - - - 0.0 - 0.0 - - - - - - servo_camera_gimbal_link - servo_camera_link - {{ offset_pitch_link_x }} {{ offset_pitch_link_y }} {{ offset_pitch_link_z }} {{ offset_pitch_link_roll }} {{ offset_pitch_link_pitch }} {{ offset_pitch_link_yaw }} - - 0 1 0 - - -1.57 - 1.57 - 1 - 10 - - - 0.0 - 0.0 - - - - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# TODO: Thermal camera plugin is not core #} -{# thermal_cameras_macro {--> #} -{%- macro thermal_cameras_macro(cameras_list, parent_link, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-thermal-cameras' -%} - {%- set spawner_description = 'Add several thermal cameras to the vehicle' -%} - {%- set spawner_default_args = {'image_width': 32, 'image_height': 32, 'update_rate': 14} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- if cameras_list | length > 0 -%} - - {%- for camera in cameras_list -%} - - {{ generic.thermal_camera_macro( - camera_name = camera['name'], - camera_topic_name = '/' + spawner_args['name'] + '/thermal/' + camera['name'], - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = 'thermal/' + camera['name'] + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/thermal/' + camera['name'], - parent_link = parent_link, - frame_rate = spawner_args[spawner_keyword]['update_rate'], - hfov = 0.575959, - image_width = spawner_args[spawner_keyword]['image_width'] | int, - image_height = spawner_args[spawner_keyword]['image_height'] | int, - x = camera['x'], - y = camera['y'], - z = camera['z'], - roll = camera['roll'], - pitch = camera['pitch'], - yaw = camera['yaw']) - }} - - {%- endfor -%} - - - {{ mount }} - - - - {%- endif -%} - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# basler_camera_down_macro {--> #} -{%- macro basler_camera_down_macro(camera_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-basler-camera-down' -%} - {%- set spawner_description = 'Add a Basler Dart camera pointing down' -%} - {%- set spawner_default_args = {'image_width': 1920, 'image_height': 1080, 'update_rate': 30, 'hfov': 1.990252, 'noise': 0.007} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.camera_macro( - parent_link = parent_link, - camera_name = camera_name, - camera_frame_name = spawner_args['name'] + '/' + camera_name + '_optical', - frame_rate = spawner_args[spawner_keyword]['update_rate'], - sensor_base_frame_name = spawner_args['name'] + '/' + camera_name, - parent_frame_name = spawner_args['name'] + '/fcu', - horizontal_fov = spawner_args[spawner_keyword]['hfov'], - image_width = spawner_args[spawner_keyword]['image_width'], - image_height = spawner_args[spawner_keyword]['image_height'], - min_distance = 0.02, - max_distance = 80, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/basler_dart.stl', - mesh_scale = '0.001 0.001 0.001', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = 0, - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# ========================= UVDAR components ======================= #} - -{# dual_uv_cameras_macro {--> #} -{%- macro dual_uv_cameras_macro(parent_link, x1, y1, z1, roll1, pitch1, yaw1, x2, y2, z2, roll2, pitch2, yaw2, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-dual-uv-cameras' -%} - {%- set spawner_description = 'Add right and left UV cameras to the vehicle. Requires param "calib_file" to be set. Setting param "occlusions" to True requires a BEEFY computer.' -%} - {%- set spawner_default_args = {'occlusions': False, 'calib_file': none, 'update_rate': 60} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- if spawner_args[spawner_keyword]['calib_file'] is not none -%} - - {{ generic.uvcam_macro( - parent_link = parent_link, - camera_publish_topic = '/' + spawner_args['name'] + '/uvdar_bluefox_left/image_raw', - calibration_file = spawner_args[spawner_keyword]['calib_file'], - occlusions = spawner_args[spawner_keyword]['occlusions'], - frame_rate = spawner_args[spawner_keyword]['update_rate'], - device_id = spawner_args['name'] + '_1', - x = x1, - y = y1, - z = z1, - roll = roll1, - pitch = pitch1, - yaw = yaw1) - }} - - {{ generic.uvcam_macro( - parent_link = parent_link, - camera_publish_topic = '/' + spawner_args['name'] + '/uvdar_bluefox_right/image_raw', - calibration_file = spawner_args[spawner_keyword]['calib_file'], - occlusions = spawner_args[spawner_keyword]['occlusions'], - frame_rate = spawner_args[spawner_keyword]['update_rate'], - device_id = spawner_args['name'] + '_2', - x = x2, - y = y2, - z = z2, - roll = roll2, - pitch = pitch2, - yaw = yaw2) - }} - - - {{ mount }} - - - - {%- endif -%} - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# back_uv_camera_macro {--> #} -{%- macro back_uv_camera_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-back-uv-camera' -%} - {%- set spawner_description = 'Add a back UV camera to the vehicle. Requires param "calib_file" to be set' -%} - {%- set spawner_default_args = {'occlusions': False, 'calib_file': none, 'update_rate': 60} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - {{ generic.uvcam_macro( - parent_link = parent_link, - camera_publish_topic = '/' + spawner_args['name'] + '/uvdar_bluefox_back/image_raw', - calibration_file = spawner_args[spawner_keyword]['calib_file'], - occlusions = spawner_args[spawner_keyword]['occlusions'], - frame_rate = spawner_args[spawner_keyword]['update_rate'], - device_id = spawner_args['name'] + '_3', - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# downward_uv_camera_macro {--> #} -{%- macro downward_uv_camera_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-downward-uv-camera' -%} - {%- set spawner_description = 'Add a UV camera to the vehicle pointed down. Requires param "calib_file" to be set' -%} - {%- set spawner_default_args = {'occlusions': False, 'calib_file': none, 'update_rate': 60} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - {{ generic.uvcam_macro( - parent_link = parent_link, - camera_publish_topic = '/' + spawner_args['name'] + '/uvdar_bluefox_bottom/image_raw', - calibration_file = spawner_args[spawner_keyword]['calib_file'], - occlusions = spawner_args[spawner_keyword]['occlusions'], - frame_rate = spawner_args[spawner_keyword]['update_rate'], - device_id = spawner_args['name'] + '_3', - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# uv_leds_macro {--> #} -{%- macro uv_leds_macro(parent_link, x1, x2, y1, y2, z, spawner_args) -%} - - {%- set spawner_keyword = 'enable-uv-leds' -%} - {%- set spawner_description = 'Add UV LEDs to the vehicle. Requires param "signal_id" to be set. Legacy params "left_id" and "right_id" may replace "signal_id" (for backwards compatibility)' -%} - {%- set spawner_default_args = {'signal_id': none, 'left_id': none, 'right_id': none} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {# setup led signals {--> #} - {%- if spawner_args[spawner_keyword]['signal_id'] is not none and spawner_args[spawner_keyword]['signal_id'] | length > 3 -%} - - {%- set led1 = spawner_args[spawner_keyword]['signal_id'][0] -%} - {%- set led2 = spawner_args[spawner_keyword]['signal_id'][1] -%} - {%- set led4 = spawner_args[spawner_keyword]['signal_id'][3] -%} - {%- set led3 = spawner_args[spawner_keyword]['signal_id'][2] -%} - - {%- elif spawner_args[spawner_keyword]['left_id'] is not none and spawner_args[spawner_keyword]['right_id'] is not none -%} - - {%- set led1 = spawner_args[spawner_keyword]['left_id'] -%} - {%- set led2 = spawner_args[spawner_keyword]['right_id'] -%} - {%- set led3 = spawner_args[spawner_keyword]['left_id'] -%} - {%- set led4 = spawner_args[spawner_keyword]['right_id'] -%} - - {%- endif -%} - {# #} - - {%- if led1 is not none and led2 is not none and led3 is not none and led4 is not none -%} - - {# -- leds configuration -- (id, signal_id, x, y, z, roll, pitch, yaw) #} - {%- set uv_leds_macro_parameters = [(1, led1, x1, y1, z, 0.0, math.radians(90), 0.0), - (2, led1, x2, y2, z, 0.0, math.radians(90), math.radians(90)), - (3, led2, x2, -y2, z, 0.0, math.radians(90), -math.radians(90)), - (4, led2, x1, -y1, z, 0.0, math.radians(90), 0.0), - (5, led3, -x2, y2, z, 0.0, math.radians(90), math.radians(90)), - (6, led3, -x1, y1, z, 0.0, math.radians(90), math.radians(180)), - (7, led4, -x1, -y1, z, 0.0, math.radians(90), -math.radians(180)), - (8, led4, -x2, -y2, z, 0.0, math.radians(90), -math.radians(90))] -%} - - - {%- for id_, signal_id_, x_, y_, z_, roll_, pitch_, yaw_ in uv_leds_macro_parameters -%} - - {{ generic.uvled_macro( - parent_link = parent_link, - device_id = spawner_args['name'] + '_' + id_ | string(), - signal_id = signal_id_, - x = x_, - y = y_, - z = z_, - roll = roll_, - pitch = pitch_, - yaw = yaw_) - }} - - {%- endfor -%} - - - {%- endif -%} - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# uv_leds_beacon_macro {--> #} -{%- macro uv_leds_beacon_macro(parent_link, x1, x2, y1, y2, z, spawner_args) -%} - - {%- set spawner_keyword = 'enable-uv-leds-beacon' -%} - {%- set spawner_description = 'Add UV LED beacon to the top of the vehicle. Requires param "signal_id" to be set.' -%} - {%- set spawner_default_args = {'signal_id': none} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- if spawner_args[spawner_keyword]['signal_id'] is not none -%} - - {# setup led signals {--> #} - {# -- leds configuration -- (id, signal_id, x, y, z, roll, pitch, yaw) #} - {%- set uv_leds_macro_parameters = [('b1', spawner_args[spawner_keyword]['signal_id'], x1, y1, z, 0.0, math.radians(90), 0.0), - ('b2', spawner_args[spawner_keyword]['signal_id'], x2, y2, z, 0.0, math.radians(90), math.radians(90)), - ('b3', spawner_args[spawner_keyword]['signal_id'], -x1, -y1, z, 0.0, math.radians(90), math.radians(180)), - ('b4', spawner_args[spawner_keyword]['signal_id'], -x2, -y2, z, 0.0, math.radians(90), math.radians(270))] -%} - - {# #} - - {%- for id_, signal_id_, x_, y_, z_, roll_, pitch_, yaw_ in uv_leds_macro_parameters -%} - - {{ generic.uvled_macro( - parent_link = parent_link, - device_id = spawner_args['name'] + '_' + id_ | string(), - signal_id = signal_id_, - x = x_, - y = y_, - z = z_, - roll = roll_, - pitch = pitch_, - yaw = yaw_) - }} - - {%- endfor -%} - - {%- endif -%} - - {%- endif -%} -{%- endmacro -%} -{# #} - - -{# ========================== VIO components ======================== #} - -{# vio_macro {--> #} -{%- macro vio_macro(sensor_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-vio' -%} - {%- set spawner_description = 'Add a forward-looking fisheye camera and a high-frequency IMU' -%} - {%- set spawner_default_args = {'camera_rate': 45, 'camera_noise': 0.0, 'imu_rate': 100, 'imu_noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.fisheye_camera_macro( - camera_name = sensor_name, - topic_ns_prefix = 'camera/', - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + sensor_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + sensor_name, - parent_link = parent_link, - frame_rate = spawner_args[spawner_keyword]['camera_rate'], - horizontal_fov = math.radians(180), - image_width = 752, - image_height = 480, - lens_type = 'custom', - lens_c1 = 1.05, - lens_c2 = 4, - lens_f = 1.0, - lens_fun = 'tan', - lens_scale = True, - lens_cutoff_angle = math.radians(90), - lens_texture_size = 512, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['camera_noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ generic.imu_sensor_macro( - sensor_name = sensor_name + '_imu', - parent_link = parent_link, - update_rate = spawner_args[spawner_keyword]['imu_rate'], - topic_name = '/' + spawner_args['name'] + '/' + sensor_name + '/imu', - frame_name = spawner_args['name'] + '/' + sensor_name, - noise_mean = spawner_args[spawner_keyword]['imu_noise'], - x = 0, - y = 0, - z = 0, - roll = -math.radians(90), - pitch = 0, - yaw = -math.radians(90)) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# vio_down_macro {--> #} -{%- macro vio_down_macro(sensor_name, parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-vio-down' -%} - {%- set spawner_description = 'Add a downward-looking fisheye camera and a high-frequency IMU' -%} - {%- set spawner_default_args = {'camera_rate': 45, 'camera_noise': 0.0, 'imu_rate': 100, 'imu_noise': 0.0} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - - {{ generic.fisheye_camera_macro( - camera_name = sensor_name, - topic_ns_prefix = 'camera/', - parent_frame_name = spawner_args['name'] + '/fcu', - camera_frame_name = spawner_args['name'] + '/' + sensor_name + '_optical', - sensor_base_frame_name = spawner_args['name'] + '/' + sensor_name, - parent_link = parent_link, - frame_rate = spawner_args[spawner_keyword]['camera_rate'], - horizontal_fov = math.radians(180), - image_width = 752, - image_height = 480, - lens_type = 'custom', - lens_c1 = 1.05, - lens_c2 = 4, - lens_f = 1.0, - lens_fun = 'tan', - lens_scale = True, - lens_cutoff_angle = math.radians(90), - lens_texture_size = 512, - min_distance = 0.02, - max_distance = 40, - noise_mean = 0.0, - noise_stddev = spawner_args[spawner_keyword]['camera_noise'], - mesh_file = 'model://mrs_robots_description/meshes/sensors/bluefox.dae', - mesh_scale = '1 1 1', - color = 'DarkGrey', - visual_x = 0, - visual_y = 0, - visual_z = 0, - visual_roll = math.radians(90), - visual_pitch = 0, - visual_yaw = 0, - x = x, - y = y, - z = z, - roll = roll, - pitch = pitch, - yaw = yaw) - }} - - - - {{ generic.imu_sensor_macro( - sensor_name = sensor_name + '_imu', - parent_link = parent_link, - update_rate = spawner_args[spawner_keyword]['imu_rate'], - topic_name = '/' + spawner_args['name'] + '/' + sensor_name + '/imu', - frame_name = spawner_args['name'] + '/' + sensor_name, - noise_mean = spawner_args[spawner_keyword]['imu_noise'], - x = 0, - y = 0, - z = 0, - roll = -math.radians(90), - pitch = 0, - yaw = -math.radians(90)) - }} - - - - {{ mount }} - - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# ==================== miscellaneous components ==================== #} - -{# light_macro {--> #} -{%- macro light_macro(parent_link, max_pitch_rate, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-light' -%} - {%- set spawner_description = 'Add a light on a gimbal to the vehicle. Requires a Gazebo world with enabled shadows' -%} - {%- set spawner_default_args = {'update_rate': 30, 'compensate_tilt': True, 'initial_on': True} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro('light', 0.01, 0.01, 0.01, 'Yellow', 0, 0, 0, 0, 0, 0) }} - - - - {{ x }} - {{ y }} - {{ z }} - {{ roll }} - {{ pitch }} - {{ yaw }} - {{ parent_link }} - {{ spawner_args[spawner_keyword]['update_rate'] }} - {{ max_pitch_rate }} - {{ spawner_args[spawner_keyword]['initial_on'] }} - {{ spawner_args[spawner_keyword]['compensate_tilt'] }} - - - - {{ parent_link }} - light_macro_link - - 0 1 0 - - -1.57 - 1.57 - 1 - 10 - - - 0.0 - 0.0 - - - - - - {%- endif -%} -{%- endmacro -%} - - -{# magnet_gripper_visualization_macro {--> #} -{%- macro magnet_gripper_visualization_macro(parent_link, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-magnetic-gripper' -%} - {%- set spawner_description = 'Add a magnetic gripper visualization' -%} - {%- set spawner_default_args = none %} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro('front', 0.005, 0.05, 0.06, 'Black', -0.09, 0, 0.03, 0, 0, 0) }} - {{ generic.visual_colored_box_macro('back', 0.005, 0.05, 0.06, 'Black', 0.09, 0, 0.03, 0, 0, 0) }} - {{ generic.visual_colored_box_macro('down', 0.18, 0.05, 0.005, 'Black', 0, 0, 0, 0, 0, 0) }} - {{ generic.visual_colored_box_macro('up', 0.18, 0.05, 0.005, 'Black', 0, 0, 0.06, 0, 0, 0) }} - - 0 0 0 0 0 0 - - - 0.18 0.05 0.005 - - - - - - - {{ parent_link }} - magnet_gripper_visualization_link - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# omni_ultrasounds_macro {--> #} -{%- macro omni_ultrasounds_macro(sensors_list, parent_link, spawner_args) -%} - - {%- set spawner_keyword = 'enable-omni-ultrasounds' -%} - {%- set spawner_description = 'Add omnidirectional ultrasonic sensors (up, down, 4 in horizontal plane)' -%} - {%- set spawner_default_args = none -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {%- for sensor in sensors_list -%} - - - {{ generic.ultrasonic_sensor_macro( - namespace = spawner_args['name'], - parent_link = parent_link, - suffix = sensor['suffix'], - x = sensor['x'], - y = sensor['y'], - z = sensor['z'], - roll = sensor['roll'], - pitch = sensor['pitch'], - yaw = sensor['yaw']) - }} - - - {%- endfor -%} - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# pendulum_macro {--> #} -{%- macro pendulum_macro(parent_link, x, y, z, spawner_args) -%} - - {%- set spawner_keyword = 'enable-pendulum' -%} - {%- set spawner_description = 'Add a pendulum to the vehicle. Specify the length and mass of the whole chain. Length and mass is uniformly distributed between the links' -%} - {%- set spawner_default_args = {'chain_length': 3.0, 'chain_mass': 0.5, 'num_links': 30, 'radius': 0.01} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ generic.single_chain_pendulum_macro( - parent_link = parent_link, - id = 0, - link_mass = spawner_args[spawner_keyword]['chain_mass'] / spawner_args[spawner_keyword]['num_links'], - link_radius = spawner_args[spawner_keyword]['radius'], - link_length = spawner_args[spawner_keyword]['chain_length'] / spawner_args[spawner_keyword]['num_links'], - joint_offset_x = x, - joint_offset_y = y, - joint_offset_z = z) - }} - - - {%- for id_ in range(1, spawner_args[spawner_keyword]['num_links'] | int) -%} - - - {{ generic.single_chain_pendulum_macro( - parent_link = 'pendulum_chain_' + (id_ - 1)| string() + '_link', - id = id_, - link_mass = spawner_args[spawner_keyword]['chain_mass'] / spawner_args[spawner_keyword]['num_links'], - link_radius = spawner_args[spawner_keyword]['radius'], - link_length = spawner_args[spawner_keyword]['chain_length'] / spawner_args[spawner_keyword]['num_links'], - joint_offset_x = 0, - joint_offset_y = 0, - joint_offset_z = -0.5 * (spawner_args[spawner_keyword]['chain_length'] / spawner_args[spawner_keyword]['num_links'])) - }} - - - {%- endfor -%} - - - {%- endif -%} -{%- endmacro -%} - - -{# safety_led_macro {--> #} -{%- macro safety_led_macro(parent_link, failure_duration_threshold, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-safety-led' -%} - {%- set spawner_description = 'Add a safety LED' -%} - {%- set spawner_default_args = none -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - - - safety_led - {{ failure_duration_threshold }} - 5.0 - {{ x }} - {{ y }} - {{ z }}} - {{ roll }} - {{ pitch }} - {{ yaw }} - - - - {{ parent_link }} - safety_led_link - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# TODO: Timepix is not core #} -{# Timepix detector {--> #} -{%- macro timepix_macro(parent_link, sensor_name, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-timepix' -%} - {%- set spawner_description = 'Add a Timepix radiation detector to the vehicle' -%} - {%- set spawner_default_args = {'material': 'si', 'exposition_time': 0.1, 'thickness': 0.0003} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro(sensor_name, 0.02, 0.09, 0.02, 'Green', 0, 0.05, 0, 0, 0, 0) }} - - - - {{ spawner_args[spawner_keyword]['exposition_time'] }} - {{ spawner_args[spawner_keyword]['material'] }} - {{ spawner_args[spawner_keyword]['thickness'] }} 0.01408 0.01408 - - - - {{ parent_link }} - {{ sensor_name }}_link - - - - {%- endif -%} - -{%- endmacro -%} - - -{# TODO: Timepix3 is not core #} -{# Timepix3 detector {--> #} -{%- macro timepix3_macro(parent_link, sensor_name, sensor_suffix, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-timepix3' -%} - {%- set spawner_description = 'Add a Timepix3 gamma event camera to the vehicle' -%} - {%- set spawner_default_args = {'material': 'cdte', 'max_message_window': 1.0, 'thickness': 0.002} %} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro(sensor_name, 0.02, 0.09, 0.02, 'Green', 0.05, 0, 0, 0, 0, 0) }} - - - - {{ material }} - {{ spawner_args[spawner_keyword]['thickness'] }} 0.01408 0.01408 - {{ spawner_args[spawner_keyword]['max_message_window'] }} - {{ sensor_suffix }} - - -<<<<<<< HEAD - - {{ parent_link }} - {{ sensor_name }}_link - - - - {%- endif -%} - -{%- endmacro -%} - - -{# TODO: UWB plugin is not core #} -{# uwb_range_macro {--> #} -{%- macro uwb_range_macro(parent_link, x, y, z, roll, pitch, yaw, mount, spawner_args) -%} - - {%- set spawner_keyword = 'enable-uwb-range' -%} - {%- set spawner_description = 'Add Qorvo DW1000 UWB transceiver. Requires param "signal_id" to be set.' -%} - {%- set spawner_default_args = {'signal_id': none, 'update_rate': 10} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- if spawner_args[spawner_keyword]['signal_id'] is not none -%} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - {{ spawner_args[spawner_keyword]['update_rate'] }} - 1 - - {{ spawner_args[spawner_keyword]['signal_id'] }} - /{{ spawner_args['name'] }}/uwb_range/range - {{ spawner_args['name'] }}/uwb - -150 - 0.1 - - - 6489.6 - 6240.0 - 6739.2 - 14.5 - 2.5 - - - - - {{ parent_link }} - uwb_range_link - true - true - - - - {{ mount }} - -======= - - {{ tilt_update_rate }} - {{ max_pitch_rate }} - {{ max_pitch }} - {{ min_pitch }} - {{ max_roll_rate }} - {{ max_roll }} - {{ min_roll }} - servo_camera_pitch_joint - servo_camera_roll_joint - servo_camera_gimbal_link - {{ parent }} - {{ compensate_tilt_roll }} - {{ compensate_tilt_pitch }} - - - - {{ parent }} - servo_camera_gimbal_link - {{ offset_roll_link_x }} {{ offset_roll_link_y }} {{ offset_roll_link_z }} {{ offset_roll_link_roll }} {{ offset_roll_link_pitch }} {{ offset_roll_link_yaw }} - - 1 0 0 - - -0.5 - 0.5 - 1 - 10 - - - 0.0 - 0.0 - - - ->>>>>>> master - - - - {%- endif -%} - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# water_gun_macro {--> #} -{%- macro water_gun_macro(parent_link, nozzle_offset_x, nozzle_offset_y, nozzle_offset_z, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-water-gun' -%} - {%- set spawner_description = 'Add a water gun for firefighting. Requires a dummy object (spawning_reservoir) to be present in the simulation' -%} - {%- set spawner_default_args = {'muzzle_velocity': 15.0, 'num_particles': 30, 'spread': 1.0, 'spawning_reservoir': 'the_void'} -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_colored_box_macro('water_bag', 0.02, 0.08, 0.03, 'Blue', 0, 0, 0, 0, 0, 0) }} - - {{ nozzle_offset_x - 0.08/2 }} {{ nozzle_offset_y }} {{ nozzle_offset_z - 0.006/2 }} 0 {{ math.radians(90) }} 0 - - - 0.08 - 0.006 - - - - - - - - - - {{ spawner_args[spawner_keyword]['muzzle_velocity'] }} - {{ nozzle_offset_x }} - {{ nozzle_offset_y }} - {{ nozzle_offset_z }} - {{ spawner_args[spawner_keyword]['spread'] }} - {{ spawner_args[spawner_keyword]['num_particles'] }} - {{ spawner_args[spawner_keyword]['spawning_reservoir'] }} - - - - {{ parent_link }} - water_gun_link - - - - {%- endif -%} -{%- endmacro -%} -{# #} - -{# whycon_box_macro {--> #} -{%- macro whycon_box_macro(parent_link, x, y, z, roll, pitch, yaw, spawner_args) -%} - - {%- set spawner_keyword = 'enable-whycon-box' -%} - {%- set spawner_description = 'Add a Whycon box for relative localization using visual markers' -%} - {%- set spawner_default_args = none -%} - - {%- if spawner_keyword in spawner_args.keys() -%} - {{ generic.handle_spawner_args(spawner_keyword, spawner_default_args, spawner_args) }} - - {%- set mesh_file = 'model://mrs_robots_description/meshes/sensors/whycon_box.dae' -%} - {%- set mesh_scale = '1 1 1' -%} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - {{ generic.visual_mesh_textured_macro("whycon_box", mesh_file, mesh_scale, x, y, z, roll, pitch, yaw) }} - - - - {{ parent_link }} - whycon_box_link - - - - {%- endif -%} - -{%- endmacro -%} - - -{# ==================== Unsupported components ==================== #} - -{# TODO: not supported in the current version #} -{# TODO: not used #} -{# gps_satelites_blocking_macro {--> #} -{%- macro gps_satelites_blocking_macro(parent_link) -%} - - 0 0 0 0 {{ -math.radians(90) }} 0 - {{ generic.zero_inertial_macro() }} - - false - 2 - - - - 4 - 1 - -1.1 - 1.1 - - - 4 - 1 - -0.9 - 0.9 - - - - 0.5 - 50 - 0.5 - - - - gps_sat_blocking - gps_blocking - - - - - - {{ parent_link }} - gps_blocking_link - -{%- endmacro -%} - - -{# TODO: not supported in the current version #} -{# TODO: not used #} -{# parachute_macro {--> #} -{%- macro parachute_macro(parent_link, x, y, z, roll, pitch, yaw) -%} - - - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - {{ generic.zero_inertial_macro() }} - - 0 0 0 0 0 0 - - - 0.1 - 0.048 - - - - - - - - - - 1.225 - 500 - 0.25 - 0 - 0 - -1.56 - - - - {{ parent_link }} - parachute_link - - - -{%- endmacro -%} -{# #} - - diff --git a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/generic_components.sdf.jinja b/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/generic_components.sdf.jinja index 6e97d33..0c6421a 100644 --- a/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/generic_components.sdf.jinja +++ b/ros_packages/mrs_uav_gazebo_simulation/models/mrs_robots_description/sdf/generic_components.sdf.jinja @@ -436,8 +436,8 @@ limitations under the License. {# ========================= drone propellers ======================== #} {# motor_plugins_macro {--> #} -{%- macro motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash) -%} - +{%- macro motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash, motor_plugin_filename) -%} + prop_{{ motor_number }}_joint prop_{{ motor_number }}_link @@ -464,7 +464,7 @@ limitations under the License. {# #} {# prop_macro {--> #} -{%- macro prop_macro(direction, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, motor_number, rotor_drag_coefficient, rolling_moment_coefficient, enable_motor_crash, color, mesh_file, mesh_scale, x, y, z, roll, pitch, yaw, ixx, ixy, ixz, iyy, iyz, izz) -%} +{%- macro prop_macro(direction, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, motor_number, rotor_drag_coefficient, rolling_moment_coefficient, enable_motor_crash, color, mesh_file, mesh_scale, motor_plugin_filename, x, y, z, roll, pitch, yaw, ixx, ixy, ixz, iyy, iyz, izz) -%} {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} @@ -491,7 +491,7 @@ limitations under the License. yaw = 0) }} - {{ motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash) }} + {{ motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash, motor_plugin_filename) }} {{ parent }} prop_{{ motor_number }}_link @@ -512,7 +512,7 @@ limitations under the License. {# #} {# prop_macro_2_meshes {--> #} -{%- macro prop_macro_2_meshes(direction, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, motor_number, rotor_drag_coefficient, rolling_moment_coefficient, enable_motor_crash, color, mesh_file_1, mesh_file_2, meshes_z_offset, mesh_scale, x, y, z, roll, pitch, yaw, ixx, ixy, ixz, iyy, iyz, izz) -%} +{%- macro prop_macro_2_meshes(direction, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, motor_number, rotor_drag_coefficient, rolling_moment_coefficient, enable_motor_crash, color, mesh_file_1, mesh_file_2, meshes_z_offset, mesh_scale, motor_plugin_filename, x, y, z, roll, pitch, yaw, ixx, ixy, ixz, iyy, iyz, izz) -%} {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} @@ -540,7 +540,7 @@ limitations under the License. yaw = 0) }} - {{ motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash) }} + {{ motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash, motor_plugin_filename) }} {{ parent }} prop_{{ motor_number }}_link @@ -560,114 +560,6 @@ limitations under the License. {%- endmacro -%} -{# TODO: UNUSED #} -{# mrs_motor_plugins_macro {--> #} -{%- macro mrs_motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash) -%} - - - prop_{{ motor_number }}_joint - prop_{{ motor_number }}_link - {{ direction }} - {{ time_constant_up }} - {{ time_constant_down }} - {{ max_rot_velocity }} - {{ motor_constant }} - {{ moment_constant }} - /gazebo/command/motor_speed - {{ motor_number }} - {{ rotor_drag_coefficient }} - {{ rolling_moment_coefficient }} - /motor_speed/{{ motor_number }} - {{ rotor_velocity_slowdown_sim }} - {{ enable_motor_crash }} - - - - - /motor_speed/{{ motor_number }} - -{%- endmacro -%} -{# #} - -{# TODO: UNUSED #} -{# prop_macro_2_meshes_mrs_motor_model {--> #} -{%- macro prop_macro_2_meshes_mrs_motor_model(direction, rotor_velocity_slowdown_sim, motor_constant, moment_constant, parent, mass, radius, time_constant_up, time_constant_down, max_rot_velocity, motor_number, rotor_drag_coefficient, rolling_moment_coefficient, enable_motor_crash, color, mesh_file_1, mesh_file_2, meshes_z_offset, mesh_scale, x, y, z, roll, pitch, yaw, ixx, ixy, ixz, iyy, iyz, izz) -%} - - {{ x }} {{ y }} {{ z }} {{ roll }} {{ pitch }} {{ yaw }} - - {{ mass }} - - {{ ixx }} - {{ ixy }} - {{ ixz }} - {{ iyy }} - {{ iyz }} - {{ izz }} - - - - - - {{ mesh_file_1 }} - {{ mesh_scale }} - - - - - {{ 0 }} {{ 0 }} {{ meshes_z_offset }} {{ 0 }} {{ 0 }} {{ 0 }} - - - {{ mesh_file_2 }} - {{ mesh_scale }} - - - - - - - - 0 0 0 0 {{ math.radians(90) }} 0 - - - {{ 2*radius }} - 0.01 - - - - - - - - - - - - - -{{ mrs_motor_plugins_macro(motor_number, direction, time_constant_up, time_constant_down, max_rot_velocity, motor_constant, moment_constant, rotor_drag_coefficient, rolling_moment_coefficient, rotor_velocity_slowdown_sim, enable_motor_crash) }} - - - {{ parent }} - prop_{{ motor_number }}_link - - 0 0 1 - - -1e+16 - 1e+16 - - - 0 - 0 - - 1 - - -{%- endmacro -%} -{# #} - {# =========================== base sensors ========================== #} {# odometry_sensor_macro {--> #} @@ -1112,7 +1004,6 @@ limitations under the License. {%- endmacro -%} {# #} -{# TODO: UNUSED #} {# gazebo_fluid_resistance_plugin_macro {--> #} {%- macro gazebo_fluid_resistance_plugin_macro(verbose, model_mass, parent_link, update_rate, uav_body_resistance_x, uav_body_resistance_y, uav_body_resistance_z) -%}