Main question: How do I fix a link to the Gazebo world so it’s immobile?
Background:
I’ve gone through all the non-physical parts of Making a Mobile Robot before, with a lot of success.
I’m now at the point I want to buy parts for my own robot, so I’ve gone back and updated everything to a simple robot configuration that is interesting to me, and I’m having a bit of trouble with Gazebo.
My robot is a little flashlight holding bot, with an XY prismatic gantry and an AB revolute flashlight pointing head. It’s going to be mounted above my workbench and point a light at things I’m working on.
I want the base XY gantry to just be stuck floating in Gazebo about 1 m off the ground, and completely insensitive to inertial effects, like it’s been fastened to my workbench overhang.
Does anyone know how to do that? I haven’t found a good way to mark a URDF element as kinematic instead of dynamic for Gazebo.
My URDF is below, with placeholder inertial info for each link just to get it working in Gazebo:
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" >
<xacro:include filename="inertial_macros.xacro"/>
<!-- Materials -->
<material name="white">
<color rgba="1 1 1 1"/>
</material>
<material name="orange">
<color rgba="1 0.3 0.1 1"/>
</material>
<material name="blue">
<color rgba="0.2 0.2 1 1"/>
</material>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
<!-- Base Link -->
<link name="base_link">
</link>
<!-- Chassis Link -->
<joint name="chassis_joint" type="fixed">
<parent link="base_link" />
<child link="chassis"/>
<origin xyz="0 0 1" />
</joint>
<link name="chassis">
<visual>
<!-- Rear X Rail -->
<origin xyz="0 -0.25 0" />
<geometry>
<box size="1 0.05 0.05"/>
</geometry>
<material name="white"/>
</visual>
<visual>
<!-- Front X Rail -->
<origin xyz="0 0.25 0" />
<geometry>
<box size="1 0.05 0.05"/>
</geometry>
<material name="white"/>
</visual>
<visual>
<!-- Left Y Support -->
<origin xyz="-0.5 0 0" />
<geometry>
<box size="0.05 0.5 0.05"/>
</geometry>
<material name="white"/>
</visual>
<visual>
<!-- Right Y Support -->
<origin xyz="0.5 0 0" />
<geometry>
<box size="0.05 0.5 0.05"/>
</geometry>
<material name="white"/>
</visual>
<collision>
<!-- Rear X Rail -->
<origin xyz="0 -0.25 0" />
<geometry>
<box size="1 0.05 0.05"/>
</geometry>
</collision>
<collision>
<!-- Front X Rail -->
<origin xyz="0 0.25 0" />
<geometry>
<box size="1 0.05 0.05"/>
</geometry>
</collision>
<collision>
<!-- Left Y Support -->
<origin xyz="-0.5 0 0" />
<geometry>
<box size="0.05 0.5 0.05"/>
</geometry>
</collision>
<collision>
<!-- Right Y Support -->
<origin xyz="0.5 0 0" />
<geometry>
<box size="0.05 0.5 0.05"/>
</geometry>
</collision>
<xacro:inertial_box mass="0.5" x="0.3" y="0.3" z="0.15">
<origin xyz="0.15 0 0.075" rpy="0 0 0"/>
</xacro:inertial_box>
</link>
<!-- <gazebo reference="chassis">
<material>Gazebo/Grey</material>
<selfCollide>false</selfCollide>
</gazebo> -->
<!-- X Axis Link -->
<joint name="x_axis_joint" type="prismatic">
<parent link="chassis" />
<child link="x_axis"/>
<origin xyz="-0.45 0 0" />
<axis xyz="1 0 0"/>
<limit lower="0" upper="0.9" effort="20" velocity="0.05"/>
</joint>
<link name="x_axis">
<visual>
<origin xyz="0 0 0"/>
<geometry>
<box size="0.025 0.5 0.025"/>
</geometry>
<material name="black"/>
</visual>
<collision>
<origin xyz="0 0 0"/>
<geometry>
<box size="0.025 0.5 0.025"/>
</geometry>
</collision>
<xacro:inertial_box mass="0.5" x="0.3" y="0.3" z="0.15">
<origin xyz="0.15 0 0.075" rpy="0 0 0"/>
</xacro:inertial_box>
</link>
<!-- Y Axis Link -->
<joint name="y_axis_joint" type="prismatic">
<parent link="x_axis" />
<child link="y_axis"/>
<origin xyz="0 -0.175 -0.025" />
<axis xyz="0 1 0"/>
<limit lower="0" upper="0.35" effort="20" velocity="0.05"/>
</joint>
<link name="y_axis">
<visual>
<origin xyz="0 0 0"/>
<geometry>
<box size="0.1 0.1 0.025"/>
</geometry>
<material name="orange"/>
</visual>
<collision>
<origin xyz="0 0 0"/>
<geometry>
<box size="0.1 0.1 0.025"/>
</geometry>
</collision>
<xacro:inertial_box mass="0.5" x="0.3" y="0.3" z="0.15">
<origin xyz="0.15 0 0.075" rpy="0 0 0"/>
</xacro:inertial_box>
</link>
<!-- A Axis Link -->
<joint name="a_axis_joint" type="revolute">
<parent link="y_axis" />
<child link="a_axis"/>
<origin xyz="0 0 0" />
<axis xyz="0 0 1"/>
<limit lower="-3.14" upper="3.14" effort="20" velocity="12"/>
</joint>
<link name="a_axis">
<visual>
<origin xyz="0 0 0"/>
<geometry>
<sphere radius="0.05"/>
</geometry>
<material name="orange"/>
</visual>
<collision>
<origin xyz="0 0 0"/>
<geometry>
<sphere radius="0.05"/>
</geometry>
</collision>
<xacro:inertial_box mass="0.5" x="0.3" y="0.3" z="0.15">
<origin xyz="0.15 0 0.075" rpy="0 0 0"/>
</xacro:inertial_box>
</link>
<!-- B Axis Link -->
<joint name="b_axis_joint" type="revolute">
<parent link="a_axis" />
<child link="b_axis"/>
<origin rpy="-1.0 0 0 " xyz="0 0 0" />
<axis xyz="1 0 0"/>
<limit lower="0" upper="2.0" effort="20" velocity="12"/>
</joint>
<link name="b_axis">
<visual>
<origin xyz="0 0 -.05"/>
<geometry>
<box size="0.025 0.025 0.015"/>
</geometry>
<material name="orange"/>
</visual>
<collision>
<origin xyz="0 0 -.05"/>
<geometry>
<box size="0.025 0.025 0.015"/>
</geometry>
</collision>
<xacro:inertial_box mass="0.5" x="0.3" y="0.3" z="0.15">
<origin xyz="0.15 0 0.075" rpy="0 0 0"/>
</xacro:inertial_box>
</link>
</robot>