Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

6.1 MIRTE Modifications and Setup Guide

Authors
Affiliations
Delft University of Technology
Delft University of Technology
Updated: 26 Aug 2026

Clock Synchronization

To syncronise the two machines’ clocks, use the following command:

sudo date -s "date_and_time"

example:

sudo date -s "2026-01-01 12:01:01"

Install image pipeline:

sudo apt install ros-humble-image-pipeline

mirte-gazebo/launch/gazebo_mirte_world_generated.launch.xml

Add verbosity and add to gazebo model path

<launch>
<set_env name="GAZEBO_MODEL_PATH" value="$(env GAZEBO_MODEL_PATH ''):$(find-pkg-share mirte_gazebo)/models"/>
<set_env name="GAZEBO_MEDIA_PATH" value="$(env GAZEBO_MEDIA_PATH ''):$(find-pkg-share mirte_gazebo)/media"/>

<!-- /////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<set_env name="GAZEBO_MODEL_PATH" value="$(env GAZEBO_MODEL_PATH ''):$(find-pkg-share mirte_lc_gazebo)/worlds"/>
<!-- /////////////////////////////////////////////////////////////////////////////////////////////////////// -->

<arg name="gui" default="true"/>
<arg name="generated_world" default="$(find-pkg-share mirte_gazebo)/worlds/robocupjunior_simple.world"/>
<include file="$(find-pkg-share gazebo_ros)/launch/gazebo.launch.py">
    <arg name="world" value="$(var generated_world)"/>
    <arg name="gui" value="$(var gui)"/>

<!-- ///////////////////////////// -->
    <arg name="verbose" value="true"/>
<!-- ///////////////////////////// -->

</include>
</launch>

mirte-ros-packages/mirte_description/urdf/ultrasonic.urdf

Gazebo publishes invalid ranges if the range is larger than max

<gazebo reference="${name}_sonar">
  <sensor type="ray" name="range_sensor_${name}">
    <visualize>${visualize_sensors}</visualize>
      <ray>
        <scan>
          <horizontal>
            <!-- for some reason 1 does not work, we neex 2x2 -->
            <samples>2</samples>
            <resolution>1</resolution> 
            <min_angle>-0.26</min_angle>
            <max_angle>0.26</max_angle>
          </horizontal>
        <vertical>
          <samples>2</samples>
          <resolution>1</resolution> 
          <min_angle>-0.014835</min_angle>
          <max_angle>0.014835</max_angle> 
        </vertical>
     </scan>
     <range>
       <min>0.03</min>

       <!--/////////////-->
       <max>100</max>
       <!--/////////////-->

       <resolution>0.01</resolution>
     </range>

mirte-ros-packages/mirte_description/urdf/arm.urdf.xacro

Rename mimic joints with _mimic

_Gripper_joint_r_mimic
gripper_link_joint_l_mimic
_gripper_link_joint_r_mimic

mirte-ros-packages/mirte_description/mirte_master_description/urdf/arm.xacro

Replace the joint limit of the shoulder_lift_joint (line 55) to:

<limit
    lower="${-pi + 0.2}"
    upper="${pi - 0.2}"
    effort="2.0"
    velocity="2.0"
/>

mirte-ros-packages/mirte_moveit_config/config/mirte_master.srdf

Add group states for the mirte_arm move group

Copy the following lines exactly and place them under the "home" move group (line 29):

<group_state name="place_right" group="mirte_arm">
<joint name="shoulder_pan_joint" value="-2.88"/>
<joint name="shoulder_lift_joint" value="0.262"/>
<joint name="elbow_joint" value="-1.5"/>
<joint name="wrist_joint" value="-1.5"/>
</group_state>
<group_state name="place_left" group="mirte_arm">
<joint name="shoulder_pan_joint" value="2.88"/>
<joint name="shoulder_lift_joint" value="0.262"/>
<joint name="elbow_joint" value="-1.5"/>
<joint name="wrist_joint" value="-1.5"/>
</group_state>
<group_state name="standby" group="mirte_arm">
<joint name="shoulder_pan_joint" value="0.0"/>
<joint name="shoulder_lift_joint" value="-0.5"/>
<joint name="elbow_joint" value="-1.3"/>
<joint name="wrist_joint" value="-1.3"/>
</group_state>
<group_state name="vigilant" group="mirte_arm">
<joint name="shoulder_pan_joint" value="0.0"/>
<joint name="shoulder_lift_joint" value="-0.5"/>
<joint name="elbow_joint" value="-1.3"/>
<joint name="wrist_joint" value="-0.4"/>
</group_state>

Add Gazebo Camera

<joint name="gripper_camera_rgb_optical_joint" type="fixed">
    <origin xyz="0 0 0" rpy="1.5707963267949 -1.5707963267949 0" />
    <parent link="gripper_camera_rgb_frame" />
    <child link="gripper_camera_rgb_optical_frame" />
</joint>

<link name="gripper_camera_rgb_optical_frame" />

<gazebo reference="gripper_camera_rgb_optical_frame">
    <sensor name="gripper_camera_sensor" type="camera">
        <always_on>true</always_on>
        <visualize>false</visualize>
        <update_rate>30</update_rate>
        <camera name="gripper_camera">
            <horizontal_fov>1.047</horizontal_fov>
            <image>
                <width>640</width>
                <height>480</height>
                <format>R8G8B8</format>
            </image>
            <clip>
                <near>0.02</near>
                <far>6</far>
            </clip>
            <distortion>
                <k1>0.0</k1>
                <k2>0.0</k2>
                <k3>0.0</k3>
                <p1>0.0</p1>
                <p2>0.0</p2>
            </distortion>
        </camera>
        <ros>
            <namespace>gripper_camera</namespace>
            <imageTopicName>image_raw</imageTopicName>
            <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        </ros>
        <plugin name="gripper_camera_controller" filename="libgazebo_ros_camera.so">
            <camera_name>gripper_camera</camera_name>
        </plugin>
    </sensor>
</gazebo>

<gazebo>
    <plugin filename="libgazebo_grasp_fix.so" name="gazebo_grasp_fix">
    <arm>
        <arm_name>finger_gripper</arm_name>
        <palm_link>wrist</palm_link>
        <gripper_link>gripper</gripper_link>
        <gripper_link>_Gripper_r</gripper_link>
        <gripper_link>_gripper_link_l</gripper_link>
        <gripper_link>gripper_finger_l</gripper_link>
        <gripper_link>_gripper_link_r</gripper_link>
        <gripper_link>gripper_finger_r</gripper_link>
    </arm>
    <forces_angle_tolerance>100</forces_angle_tolerance>
    <update_rate>4</update_rate>
    <grip_count_threshold>4</grip_count_threshold>
    <max_grip_count>8</max_grip_count>
    <release_tolerance>0.005</release_tolerance>
    <disable_collisions_on_attach>false</disable_collisions_on_attach>
    </plugin>
</gazebo>

Setting up the MIRTE Master

Insert an SD card with an image into the MIRTE. Wait for flashing to conclude.

Turn on the MIRTE Master and wait for the hotspot to turn on. Connect to the MIRTE’s wifi.

On your pc, insert the command:

ssh mirte@mirte_local

and insert the password:

mirte_mirte

If necessary, switch motor pins in:

home/mirte/mirte_ws/src/mirte-ros-packages/mirte_bringup/telemetrix_config/mirte_master_config.yaml

On the MIRTE, change the PID values in:

opt/ros/humble/share/mirte_base_control/config/mirte_base_control.yaml

using:

sudo nano

Set:

P = 0.5, I = 2.0, D = 0.0

for all motors.

On the MIRTE, execute the following commands:

ros2 run mirte_test mirte_master_set_voltage_ranges
ros2 run mirte_test mirte_master_calibrate

Turn off ROS2 on the MIRTE and reassemble the arm components so they match the "home" pose.