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-pipelinemirte-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_mimicmirte-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_localand insert the password:
mirte_mirteIf necessary, switch motor pins in:
home/mirte/mirte_ws/src/mirte-ros-packages/mirte_bringup/telemetrix_config/mirte_master_config.yamlOn the MIRTE, change the PID values in:
opt/ros/humble/share/mirte_base_control/config/mirte_base_control.yamlusing:
sudo nanoSet:
P = 0.5, I = 2.0, D = 0.0for all motors.
On the MIRTE, execute the following commands:
ros2 run mirte_test mirte_master_set_voltage_ranges
ros2 run mirte_test mirte_master_calibrateTurn off ROS2 on the MIRTE and reassemble the arm components so they match the "home" pose.