如何在处理环绕时从固定方向确定角速度
2019-8-1 18:15:28
收藏:0
阅读:75
评论:2
我正在试图确定物体的角速度,单位为每秒度数。
我只有每1/60秒更新一次的方向,以度为单位(0为北,90为东)
我的具体问题是处理当物体从355度到5度通过0/360时的包围问题。
我目前的想法是通过时间平均读数,排除异常值,但这会给系统增加不必要的滞后,并降低该区域的精度。
下面是一个简单的示例代码,其中degreesIn是源,degreesPerSecondOut是结果
degreesPerSecondOut = (degreesIn或0 - degreesInOld) * 60
degreesInOld = degreesIn
预期结果是在通过0度时实现平稳而准确的过渡
附加思考:我计算角速度的物体不应超过每秒1次的旋转(甚至不应超过每1/60秒的旋转)。我不知道为什么,但我觉得这很有用。
点赞
用户6881240
函数 velocity(ain, aout)
ipersec = 60
raw = aout - ain
turn = math.min((-math.abs(raw))%360,math.abs(raw)%360)
direction = math.abs(raw) / raw
return direction * turn * ipersec
end
print(velocity(5, 355), velocity(355, 5), velocity(20, 40), velocity(40, 20))
--[[600 -600 1200 -1200--]]
我的想法-您有三个组成部分:
- 通过
% 360简单处理的包装。对于5.0,math.mod将起作用。 - 即使有了包装,您也有两种方法可以转向-我们总是想要最小的转向。
- 指示方向的符号部分。
一旦处理了包装,您就会意识到355->5或向后是没有区别的,就像10->20一样-您可以采取10度或350度,但我们假设最短的。
2019-08-01 18:57:12
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我认为我已经找到了我的答案。不幸的是,我不认为它一定是最好的解决方案,因为这个解决方案只能每个单位最多旋转 ~180 度(每秒 10800 度/每分钟 1800 转),但我相信它解决了我的问题,并且足够准确适用于我的应用程序。
下面是这个解决方案:
"angularVelocity" 是计算得出的速度
"rotationInDegrees" 是输入的旋转方向
"rotationInDegreesOld" 是之前的旋转方向
if (rotationInDegrees - rotationInDegreesOld > 180) then angularVelocity = rotationInDegrees - rotationInDegreesOld - 360 * 60 elseif (inputRotation - inputRotationOld < 180) then angularVelocity = rotationInDegrees- rotationInDegreesOld + 360 * 60 else angularVelocity= rotationInDegrees - rotationInDegreesOld * 60 end解释一下正在发生的事情。当速率很高,我假设它已经包裹(比如从 355 度到 5 度,当那个时间点的测量会是 -350 * 60 度每秒)时,在它上面加上 360,使其变为 10 度是更合理的选择。
在另一个方向上也是一样,但是要用减去 360 而不是加上。