<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
    <!-- 通用链接(link)宏定义 -->
    <xacro:macro name="generic_link" params="link_name mesh_file 
                                            inertia_xyz inertia_rpy 
                                            mass ixx ixy ixz iyy iyz izz 
                                            color_rgba enable_collision">
        <link name="${link_name}">
            <!-- 惯性参数 -->
            <inertial>
                <origin xyz="${inertia_xyz}" rpy="${inertia_rpy}" />
                <mass value="${mass}" />
                <inertia ixx="${ixx}" ixy="${ixy}" ixz="${ixz}"
                        iyy="${iyy}" iyz="${iyz}" izz="${izz}" />
            </inertial>
            <!-- 可视化模型 -->
            <visual>
                <origin xyz="0 0 0" rpy="0 0 0" />
                <geometry>
                <mesh filename="${mesh_file}" />
                </geometry>
                <material name="${link_name}_material">
                <color rgba="${color_rgba}" />
                </material>
            </visual>
            <xacro:if value="${enable_collision}">
                <collision>
                    <origin xyz="0 0 0" rpy="0 0 0" />
                    <geometry>
                        <!-- <mesh filename="${mesh_file}" /> -->
                        <cylinder radius="0.1" length="0.1" />
                    </geometry>
                    <material name="blue">
                        <color rgba="0.1 0.1 1.0 0.5" />
                    </material>
                </collision>
            </xacro:if>

            <!-- 仅当启用碰撞时，添加碰撞物理参数 -->
            <xacro:if value="${enable_collision}">
                <gazebo reference="${link_name}">
                    <collision>
                        <surface>
                            <contact>
                                <ode>
                                    <!-- 刚度：根据轮子质量调整，建议 1e5~1e6（质量越大，kp适当增大） -->
                                    <kp>5e5</kp>  
                                    <!-- 阻尼：kp的1%~5%，确保振动快速衰减（关键参数） -->
                                    <kd>2e4</kd>  
                                    <!-- 静/动摩擦系数：0.8~1.0，避免打滑 -->
                                    <mu1>1000</mu1>  
                                    <mu2>1000</mu2>  
                                    <!-- 允许微小穿透（0.001~0.01m），减少高频抖动 -->
                                    <min_depth>0.005</min_depth>  
                                    <!-- 碰撞时的最大校正速度，防止剧烈弹跳 -->
                                    <max_vel>0.1</max_vel>  
                                </ode>
                            </contact>
                            <bounce>
                                <!-- 反弹系数：0 = 完全不反弹（核心参数） -->
                                <restitution_coefficient>0.0</restitution_coefficient>  
                                <!-- 碰撞速度阈值：设为0，确保所有碰撞都无反弹 -->
                                <threshold>0.0</threshold>  
                            </bounce>
                        </surface>
                    </collision>
                </gazebo>
            </xacro:if>
        </link>
    </xacro:macro>
</robot>