Hi @duckfrost2
Here is my file. The main difference is that I only add jaw joint between head_link and upperlegs, without the “prismatic joints” on foot_links. And the way I tried to insert 2 “insert_block” is in macro of “gurdy_leg”, which contains " *origin1 " and " *origin2 " (line 263). And apply them with 2 tag “origin1” and “origin2” (line346-356).
<?xml version="1.0"?>
(sorry it shoud contain this:
robot xmlns:xacro=“http://www.ros.org/wiki/xacro” name=“gurdy”
but I don’t know why it cannot show when I sometimes add <>)
<xacro:macro name="gurdy_head" params="">
<link name="base_link">
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.01 0.01 0.01"/>
</geometry>
</collision>
<visual>
<origin xyz="0 0 0.01" rpy="0 0 0"/>
<geometry>
<box size="0.01 0.01 0.01"/>
</geometry>
</visual>
</link>
<link name="head_link">
<inertial>
<origin xyz="0 0 0.02" rpy="0 0 0"/>
<mass value="0.01" />
<inertia ixx="7.58333333333e-07" ixy="0.0" ixz="0.0" iyy="7.58333333333e-07" iyz="0.0" izz="1.25e-06"/>
</inertial>
<collision>
<origin xyz="0 0 0.02" rpy="0 0 0"/>
<geometry>
<cylinder radius="0.05" length="0.04"/>
</geometry>
</collision>
<visual>
<origin rpy="0.0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://my_gurdy_description/models/gurdy/meshes/gurdy_head_v2.dae"/>
</geometry>
</visual>
</link>
<gazebo reference="head_link">
<mu1>10.0</mu1>
<mu2>10.0</mu2>
</gazebo>
<joint name="base_joint" type="fixed">
<parent link="base_link"/>
<child link="head_link"/>
<origin xyz="0 0 0" rpy="0 -0 0"/>
</joint>
</xacro:macro>
<xacro:macro name="upperleg_yaw_link" params="number">
<link name="upperleg_M${number}_yaw_link">
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="0.01"/>
<inertia ixx="2.13333e-07" ixy="0" ixz="0" iyy="2.13333e-07" iyz="0" izz="3.2e-07"/>
</inertial>
<collision>
<origin rpy="0.0 0 0" xyz="0 0 0"/>
<geometry>
<cylinder radius="0.008" length="0.008"/>
</geometry>
</collision>
<visual>
<origin rpy="0.0 0 0" xyz="0 0 0"/>
<geometry>
<cylinder radius="0.008" length="0.008"/>
</geometry>
</visual>
</link>
</xacro:macro>
<xacro:macro name="trans_yaw" params="number">
<transmission name="tran_M${number}_head_upper_yaw">
<type>transmission_interface/SimpleTransmission</type>
<joint name="head_upperlegM${number}_yaw_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor_M${number}_head_upper_yaw">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:macro name="upperleg_link" params="number">
<link name="upperleg_M${number}_link">
<inertial>
<origin xyz="0 0 0.03" rpy="0 0 0"/>
<mass value="0.01"/>
<inertia ixx="3.015625e-06" ixy="0" ixz="0" iyy="3.015625e-06" iyz="0" izz="3.125e-08"/>
</inertial>
<collision>
<origin rpy="0.0 0 0" xyz="0 0 0.03"/>
<geometry>
<cylinder length="0.06" radius="0.0025"/>
</geometry>
</collision>
<visual>
<origin rpy="0.0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://my_gurdy_description/models/gurdy/meshes/gurdy_higherleg_v2.dae"/>
</geometry>
</visual>
</link>
</xacro:macro>
<xacro:macro name="trans_upperleg" params="number">
<transmission name="tran_M${number}_head_upper">
<type>transmission_interface/SimpleTransmission</type>
<joint name="head_upperlegM${number}_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor_M${number}_head_upper">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:macro name="lowerleg_link" params="number">
<link name="lowerleg_M${number}_link">
<inertial>
<origin xyz="0 0 0.03" rpy="0 0 0"/>
<mass value="0.01"/>
<inertia ixx="3.005625e-06" ixy="0" ixz="0" iyy="3.005625e-06" iyz="0" izz="1.125e-08"/>
</inertial>
<collision>
<origin rpy="0 0 0" xyz="0 0 0.03"/>
<geometry>
<cylinder length="0.06" radius="0.0015"/>
</geometry>
</collision>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="package://my_gurdy_description/models/gurdy/meshes/gurdy_lowerleg_v2.dae"/>
</geometry>
</visual>
</link>
</xacro:macro>
<xacro:macro name="lowerleg_joint" params="number">
<joint name="upperleg_lowerleg_M${number}_joint" type="revolute">
<parent link="upperleg_M${number}_link"/>
<child link="lowerleg_M${number}_link"/>
<origin xyz="0 0.0095 0.06" rpy="0 0 3.14159"/>
<limit lower="-2.9" upper="1.57" effort="1.0" velocity="0.005"/>
<axis xyz="0 1 0"/>
</joint>
<transmission name="tran_M${number}_upper_lower">
<type>transmission_interface/SimpleTransmission</type>
<joint name="upperleg_lowerleg_M${number}_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor_M${number}_upper_lower">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:macro name="foot_link" params="number color">
<link name="foot_M${number}_link">
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="0.01"/>
<inertia ixx="2.56e-07" ixy="0" ixz="0" iyy="2.56e-07" iyz="0" izz="2.56e-07"/>
</inertial>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<sphere radius="0.008"/>
</geometry>
</collision>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<sphere radius="0.008"/>
</geometry>
</visual>
</link>
<gazebo reference="foot_M${number}_link">
<kp>1000.0</kp>
<kd>1000.0</kd>
<mu1>10.0</mu1>
<mu2>10.0</mu2>
<material>Gazebo/${color}</material>
</gazebo>
<joint name="foot_lowerleg_M${number}_joint" type="fixed">
<parent link="lowerleg_M${number}_link"/>
<child link="foot_M${number}_link"/>
<origin xyz="0 0 0.06" rpy="0 0 0"/>
</joint>
</xacro:macro>
<xacro:macro name="gurdy_leg" params="head_link_name Number Color *origin1 *origin2">
<!-- *upperleg_joint_origin -->
<!-- apply yaw link -->
<xacro:upperleg_yaw_link number="${Number}"/>
<!-- define yaw joint -->
<joint name="head_upperlegM${Number}_yaw_joint" type="revolute">
<parent link="${head_link_name}"/>
<child link="upperleg_M${Number}_yaw_link"/>
<!-- origins of yaw joints are different, so here to individually define, as an insert_block -->
<xacro:insert_block name="origin1"/>
<limit lower="-0.7" upper="0.7" effort="1.0" velocity="0.005"/>
<axis xyz="0 0 1"/>
</joint>
<!-- apply transmission of yaw joint -->
<xacro:trans_yaw number="${Number}"/>
<!-- apply upperleg link -->
<xacro:upperleg_link number="${Number}"/>
<!-- define upperleg joint -->
<joint name="head_upperlegM${Number}_joint" type="revolute">
<parent link="upperleg_M${Number}_yaw_link"/>
<child link="upperleg_M${Number}_link"/>
<xacro:insert_block name="origin2"/>
<limit lower="-1.55" upper="0" effort="1.0" velocity="0.005"/>
<axis xyz="0 1 0"/>
</joint>
<!-- apply transmission of upperleg joint -->
<xacro:trans_upperleg number="${Number}"/>
<!-- apply lowerleg link -->
<xacro:lowerleg_link number="${Number}"/>
<!-- apply lowerleg joint -->
<xacro:lowerleg_joint number="${Number}"/>
<!-- apply foot link -->
<xacro:foot_link number="${Number}" color="${Color}"/>
</xacro:macro>
<xacro:macro name="control_system" params="namespace">
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/${namespace}</robotNamespace>
</plugin>
</gazebo>
<gazebo>
<plugin name="gazebo_ros_imu_controller" filename="libgazebo_ros_imu.so">
<robotNamespace>/${namespace}</robotNamespace>
<topicName>imu/data</topicName>
<serviceName>imu/service</serviceName>
<bodyName>base_link</bodyName>
<gaussianNoise>0</gaussianNoise>
<rpyOffsets>0 0 0</rpyOffsets>
<updateRate>10.0</updateRate>
<alwaysOn>true</alwaysOn>
<gaussianNoise>0</gaussianNoise>
</plugin>
</gazebo>
</xacro:macro>
<xacro:gurdy_head />
<xacro:gurdy_leg head_link_name="head_link" Number="1" Color="Red">
<origin1>
<origin xyz="-0.02165 -0.0125 -0.008" rpy="0 0 0"/>
</origin1>
<origin2>
<origin xyz="0 0 0" rpy="3.14159 0 0.523599"/>
</origin2>
</xacro:gurdy_leg>
<!-- <xacro:gurdy_leg head_link_name="head_link" Number="2" Color="Green">
<origin xyz="0.02165 -0.0125 -0.008" rpy="0 0 0"/>
<uorigin xyz="0 0 0" rpy="3.14159 0 2.61799"/>
</xacro:gurdy_leg> -->
<!-- <xacro:gurdy_leg head_link_name="head_link" Number="3" Color="Blue">
<origin xyz="0 0.025 -0.008" rpy="0 0 0"/>
<origin xyz="0 0 0" rpy="3.14159 0 -1.57"/>
</xacro:gurdy_leg> -->
<xacro:control_system namespace="gurdy"/>
(and it shoud contain this:
/robot>
but I don’t know why it cannot show when I sometimes add <>)