SDF法线计算

https://www.iquilezles.org/www/articles/normalsSDF/normalsSDF.htm

vec3 calcNormal( in vec3 pos )
{
vec2 e = vec2(1.0,-1.0)0.57730.0005;
return normalize( e.xyymap( pos + e.xyy ).x +
e.yyx
map( pos + e.yyx ).x +
e.yxymap( pos + e.yxy ).x +
e.xxx
map( pos + e.xxx ).x );
}

pos 代表当前点的位置 e代表取周围点的偏移量 根据周围4个点的sdf进行权值相加再归一化得出当前点的法线 在数学上的证明公式为 有限差分法 这个法线也叫梯度 几何意义为sdf场里增长最快的方向

### Gazebo 中通过 SDF 设置或调整摩擦力 在 Gazebo 的仿真环境中,可以通过修改 SDF 文件中的 `<surface>` 标签来设置或调整物体表面的摩擦力属性。具体来说,摩擦力主要由两个参数控制:`<mu1>` 和 `<mu2>`,它们分别代表沿着接触面法线方向的主要和次要摩擦系数。 #### 配置摩擦力的标签结构 以下是用于定义摩擦力的核心部分: ```xml <link> <collision name="collision"> <geometry> <!-- 定义几何形状 --> </geometry> <surface> <friction> <ode> <mu>0.8</mu> <!-- 主要摩擦系数 mu1 --> <mu2>0.6</mu2> <!-- 次要摩擦系数 mu2 --> <fdir1>0 0 0</fdir1> <!-- 可选:指定摩擦的方向向量 --> <slip1>0.0</slip1> <!-- 可选:滑动比例沿 fdir1 方向 --> <slip2>0.0</slip2> <!-- 可选:滑动比例垂直于 fdir1 方向 --> </ode> </friction> </surface> </collision> </link> ``` 上述代码片段展示了如何为碰撞体(`<collision>`)设定摩擦力参数[^1]。其中: - `<mu>` 是主要摩擦系数,默认值通常设为 `1.0`。 - `<mu2>` 是次要摩擦系数,一般小于等于 `<mu>`。 - `<fdir1>` 是可选项,用来指定摩擦作用的方向向量。如果未指定,则默认基于接触面法线计算。 - `<slip1>` 和 `<slip2>` 表示允许的最大滑移率,在某些情况下可用于模拟更复杂的物理行为。 #### 使用 URDF 转换到 SDF 并验证摩擦力配置 当使用 URDF 描述机器人模型时,可通过以下命令将其转换为 SDF,并检查是否正确应用了摩擦力参数[^2]: ```bash gz sdf -p MODEL.urdf > MODEL_converted.sdf ``` 此操作会生成一个 `.sdf` 文件,开发者可以在其中手动确认 `<mu>` 和 `<mu2>` 是否被正确定义并生效。 #### 获取实时状态数据 为了观察摩擦力的实际效果,可以订阅 `/gazebo/model_states` 或 `/gazebo/link_states` 主题,这些主题提供了关于模型位置、姿态以及速度的信息[^4]。利用 ROS 工具或其他消息监听手段捕获这些数据有助于分析运动学特性及其受摩擦影响的程度。 --- ### 示例代码 假设我们希望创建一个带有自定义摩擦特性的矩形底座,其对应的 SDF 片段可能如下所示: ```xml <?xml version='1.0'?> <sdf version="1.6"> <model name="custom_base"> <pose>0 0 0.5 0 0 0</pose> <link name="base_link"> <collision name="base_collision"> <geometry> <box><size>1 1 0.1</size></box> </geometry> <surface> <friction> <ode> <mu>0.9</mu> <mu2>0.7</mu2> </ode> </friction> </surface> </collision> <visual name="base_visual"> <geometry> <box><size>1 1 0.1</size></box> </geometry> </visual> </link> </model> </sdf> ``` 在此例子中,设置了较高的摩擦系数以防止底座轻易打滑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值