带优先级加权截断累加的转向行为计算 - SteeringBehavior::CalculatePrioritized() 函数解析
这段代码是 SteeringBehavior 类的 CalculatePrioritized() 函数,用于计算带优先级的加权截断累计力。函数按照优先级顺序依次计算各个行为对应的力,并将它们加权求和得到最终的力。
函数中调用了多个行为对应的函数,如 WallAvoidance、ObstacleAvoidance、Evade 等,这些函数计算出当前行为对应的力。然后通过 AccumulateForce 函数将当前行为的力累加到总力 m_vSteeringForce 上,并判断是否达到截断条件。如果达到截断条件,就返回当前的总力。如果所有行为的力都计算完毕,仍未达到截断条件,就返回最终的总力 m_vSteeringForce。
在计算各个行为对应的力时,每个行为都有一个对应的权重,用于调整该行为对总力的贡献。例如,WallAvoidance 行为对应的权重为 m_dWeightWallAvoidance,Evade 行为对应的权重为 m_dWeightEvade 等。
总体来说,这段代码实现了一个带优先级的行为选择和加权的机制,可以用于模拟智能体的行为决策过程。
代码解析:
Vector2D force;
if (On(wall_avoidance)) {
force = WallAvoidance(m_pVehicle->World()->Walls()) *
m_dWeightWallAvoidance;
if (!AccumulateForce(m_vSteeringForce, force)) return m_vSteeringForce;
}
if (On(obstacle_avoidance)) {
force = ObstacleAvoidance(m_pVehicle->World()->Obstacles()) *
m_dWeightObstacleAvoidance;
if (!AccumulateForce(m_vSteeringForce, force)) return m_vSteeringForce;
}
// ... 其他行为的计算逻辑 ...
return m_vSteeringForce;
代码说明:
On(behavior):判断是否开启某个行为,例如On(wall_avoidance)表示是否开启墙壁避障行为。行为函数(参数):计算某个行为对应的力,例如WallAvoidance(m_pVehicle->World()->Walls())计算墙壁避障行为对应的力。m_dWeight行为名:某个行为对应的权重,例如m_dWeightWallAvoidance表示墙壁避障行为的权重。AccumulateForce(m_vSteeringForce, force):将当前行为的力累加到总力 m_vSteeringForce 上,并判断是否达到截断条件。
总结:
这段代码通过优先级排序和加权累加的方式,实现了智能体的行为决策过程。它能够根据当前环境和自身状态,选择并执行最优先的行为,并最终计算出最终的转向力。
原文地址: https://www.cveoy.top/t/topic/nTvV 著作权归作者所有。请勿转载和采集!