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。

后面的有时间再写。。。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Orca浏览器是一个高速、用户友好的网页浏览器,旨在为最新的firefox增加更多的功能。Orca浏览器不仅具有如安全、低内存占用、拼写检查、内置下载管理器等来自firefox的功能,还提高了网页浏览速度,增加了很多新特性,比如广告过滤器、flash过滤器、在线文件存储、自动表格填充、Outlook风格的RSS阅读器等。自动表格填充记忆、填充不同类型的网页表格、密码,并以密码的形式对其加以保护。在线文件存储允许用户创建拥有用户名和密码的账户,可以在任意一台计算机上访问、保存他们的个人数据,例如书签、自动填充、RSS种子等。 特点: 在线文件存储: Orca浏览器能把用户的书签,RSS 种子,配置文件 或网页密码等,保存在orca的在线存储里。这样,这样用户可以再任何地方访问他们的个人数据,如办公室,家里或有网络的咖啡屋,并且当重装系统的时候不用担心个人数据丢失。 自动填充: 帮助用户记忆网页密码, 并实现一键填充。 扩展: 支持火狐扩展,增强浏览器的用户体验。你希望在浏览器中添加或增强的很多扩展都可以用于 Orca浏览器。与Orca兼容的扩展列表可以在Avant Browser论坛里找到,请点击 这里。 弹窗/广告过滤器: 轻松过滤没用的横幅广告,动画广告和自动弹出的页面。 鼠标手势: 使用户通过鼠标手势进行各种常用的浏览操作。 安全恢复: 如果Orca浏览器非正常关闭,所有打开的页面将会保存并在下次启动浏览器时自动重新打开。 RSS 阅读器: 用户浏览RSS/ATOM种子就像浏览网页一样。用户可以将他们喜欢的RSS保存为书签。 隐私保护: 通过清除所有的浏览痕迹来保护用户的隐私:键入网址,自动完成,Cookies,历史,临时文件夹等。
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算法的一种简化实现,可以用于解决各种具有多目标优化问题的情况。当然,实际应用中可能还需要根据具体问题进行一些额外的调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值