ORCA(动态避障)算法

  • 简介

ORCA算法会把移动的物体抽象成一个圆,圆心表示实体位置,半径表示实体大小 。ORCA算法的一个特点就是会考虑未来一段时间内的情况,通常是一秒或两秒,这个值可以根据移动物体的最大速度来修改。

算法认为,避障的责任是相互的,不是只有一方改变速度,可能在未来一段时间内发生碰撞的双方都会改变速度来避障。也就是说双方预测会发生碰撞时,双方都会采取行动来修正速度

  • 碰撞锥(碰撞区域)

 

上图中假设B物体处于静止状态,A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。此时会产生碰撞区域:  

红线画出来的锥形区域就是A相对于B的碰撞区域,也可以叫碰撞锥。那么问题来了,如果A和B都正在移动,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。

更专业的示意图 ,就是在速度坐标系下:

黄色涂抹区域是速度碰撞区,若A的速度点Va落在了速度碰撞区内,则在Va的单位时间内必定会发生碰撞。如果避障的话需要讲Va修正到速度碰撞区之外。

  • 相对速度

 A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。

后面的有时间再写。。。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
orca算法是一种用于解决多目标优化问题的算法。它基于自然界中的虚拟动物群体行为,模拟了八个主要环节的操作:搜索、归档、参考点更新、动量计算、避碰、迁移、震荡和适应度评估。 以下是一个基于python的简化版orca算法的代码实现: ```python import numpy as np # 定义目标函数 def objectives(x): return [x[0]**2, (x[0]-2)**2] # 定义参考点更新函数 def update_reference_point(ref_point, archive): for solution in archive: for i in range(len(ref_point)): ref_point[i] = min(ref_point[i], solution[i]) # 初始化参数 pop_size = 50 # 种群大小 max_gen = 100 # 最大迭代次数 dim = 2 # 问题的维度 # 初始化种群 population = np.random.random((pop_size, dim)) # 初始化参考点 reference_point = [float('inf')] * dim # 主循环 for gen in range(max_gen): # 计算适应度值 fitness = np.array([objectives(x) for x in population]) # 归档个体 archive = population[np.arange(pop_size), np.argmin(fitness, axis=1)] # 更新参考点 update_reference_point(reference_point, archive) # 计算动量方向 momentum = np.mean(population, axis=0) # 避碰 for i in range(pop_size): for j in range(dim): if population[i][j] < reference_point[j]: population[i][j] += np.random.random() * (momentum[j] - population[i][j]) else: population[i][j] += np.random.random() * (reference_point[j] - population[i][j]) # 迁移 population += np.random.normal(0, 0.1, (pop_size, dim)) # 震荡 population += np.random.random((pop_size, dim)) * (reference_point - population) # 适应度评估 fitness = np.array([objectives(x) for x in population]) # 更新参考点 update_reference_point(reference_point, population) # 输出当前代的最优解 best_solution = population[np.argmin(fitness)] print("Generation:", gen+1, "Best solution:", best_solution, "Best fitness:", min(fitness)) ``` 以上代码是orca算法的一种简化实现,可以用于解决各种具有多目标优化问题的情况。当然,实际应用中可能还需要根据具体问题进行一些额外的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值