|
| 1 | +<?xml version="1.0"?> |
| 2 | +<!-- |
| 3 | +SPDX-FileCopyrightText: Alliander N. V. |
| 4 | +SPDX-License-Identifier: Apache-2.0 |
| 5 | +--> |
| 6 | +<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="imu_module"> |
| 7 | + |
| 8 | + <xacro:macro name="xsens_imu" |
| 9 | + params=" |
| 10 | + namespace |
| 11 | + parent |
| 12 | + name:=xsens |
| 13 | + use_sim:=false |
| 14 | + "> |
| 15 | + |
| 16 | + <link name="base_link"/> |
| 17 | + <link name="imu_link"> |
| 18 | + |
| 19 | + <visual> |
| 20 | + <origin xyz="0 0 0" rpy="0 0 0"/> |
| 21 | + <geometry> |
| 22 | + <mesh filename="package://alliander_description/xsens/meshes/MTi-6x0R.stl" scale="0.001 0.001 0.001"/> |
| 23 | + </geometry> |
| 24 | + <material name="dark_grey"> |
| 25 | + <color rgba="0.2 0.2 0.2 1.0"/> |
| 26 | + </material> |
| 27 | + </visual> |
| 28 | + |
| 29 | + <collision> |
| 30 | + <origin xyz="0 0 0" rpy="0 0 0"/> |
| 31 | + <geometry> |
| 32 | + <!-- 56.5 x 40.9 x 24.75 mm in metres --> |
| 33 | + <box size="0.0565 0.0409 0.02475"/> |
| 34 | + </geometry> |
| 35 | + </collision> |
| 36 | + |
| 37 | + <inertial> |
| 38 | + <!-- Approximate mass: 50g --> |
| 39 | + <mass value="0.050"/> |
| 40 | + <origin xyz="0 0 0" rpy="0 0 0"/> |
| 41 | + <!-- Box inertia tensor: I = m/12 * (a² + b²) for each axis --> |
| 42 | + <inertia ixx="8.22e-6" ixy="0" ixz="0" |
| 43 | + iyy="1.59e-5" iyz="0" |
| 44 | + izz="2.03e-5"/> |
| 45 | + </inertial> |
| 46 | + |
| 47 | + </link> |
| 48 | + |
| 49 | + <!-- Gazebo requires a joint to a link called "world" for statically mounted robots --> |
| 50 | + <xacro:if value="${parent == 'world'}"> |
| 51 | + <link name="${parent}" /> |
| 52 | + <joint name="${parent}_joint" type="fixed"> |
| 53 | + <parent link="${parent}" /> |
| 54 | + <child link="base_link" /> |
| 55 | + </joint> |
| 56 | + </xacro:if> |
| 57 | + |
| 58 | + <!-- Since Xsens publishes data on imu_link on hardware --> |
| 59 | + <joint name="imu_joint" type="fixed"> |
| 60 | + <parent link="base_link"/> |
| 61 | + <child link="imu_link"/> |
| 62 | + <origin xyz="0 0 0" rpy="0 0 0"/> |
| 63 | + </joint> |
| 64 | + |
| 65 | + <!-- MTi-6x0 IMU sensor specification: https://www.xsens.com/hubfs/Downloads/Manuals/MTi-600-series-datasheet.pdf --> |
| 66 | + <xacro:if value="${use_sim}"> |
| 67 | + <gazebo reference="imu_link"> |
| 68 | + <sensor name="${namespace}/imu" type="imu"> |
| 69 | + <always_on>true</always_on> |
| 70 | + <update_rate>100</update_rate> |
| 71 | + <topic>${namespace}/imu/data</topic> |
| 72 | + <visualize>false</visualize> |
| 73 | + <enable_metrics>false</enable_metrics> |
| 74 | + <gz_frame_id>${namespace}/imu_link</gz_frame_id> |
| 75 | + <imu> |
| 76 | + <orientation_reference_frame> |
| 77 | + <localization>ENU</localization> |
| 78 | + </orientation_reference_frame> |
| 79 | + <angular_velocity> |
| 80 | + <!-- Gyroscope noise density: 0.01 deg/s/sqrt(Hz), in-run bias: 2 deg/h --> |
| 81 | + <x><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></x> |
| 82 | + <y><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></y> |
| 83 | + <z><noise type="gaussian"><mean>0.0</mean><stddev>1.75e-4</stddev><bias_mean>9.7e-6</bias_mean><bias_stddev>0.0</bias_stddev></noise></z> |
| 84 | + </angular_velocity> |
| 85 | + <linear_acceleration> |
| 86 | + <!-- Accelerometer noise density: 0.003 m/s²/sqrt(Hz), in-run bias: 0.01 mg --> |
| 87 | + <x><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></x> |
| 88 | + <y><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></y> |
| 89 | + <z><noise type="gaussian"><mean>0.0</mean><stddev>3.0e-3</stddev><bias_mean>9.8e-5</bias_mean><bias_stddev>0.0</bias_stddev></noise></z> |
| 90 | + </linear_acceleration> |
| 91 | + </imu> |
| 92 | + </sensor> |
| 93 | + </gazebo> |
| 94 | + </xacro:if> |
| 95 | + |
| 96 | + </xacro:macro> |
| 97 | + |
| 98 | + <xacro:arg name="namespace" default="xsens" /> |
| 99 | + <xacro:arg name="parent" default="" /> |
| 100 | + <xacro:arg name="use_sim" default="false" /> |
| 101 | + <xacro:xsens_imu |
| 102 | + namespace="$(arg namespace)" |
| 103 | + parent="$(arg parent)" |
| 104 | + use_sim="$(arg use_sim)" /> |
| 105 | + |
| 106 | +</robot> |
0 commit comments