【发布时间】:2016-03-13 12:25:28
【问题描述】:
我无法上传图片,所以我会尽力解释我的问题。我想模拟独轮式机器人对移动物体的检测。机器人以位置 (x,y) 和方向 theta 作为三个状态进行建模。障碍物表示为半径为 r1 的圆。我想找到从机器人局部坐标系到圆的角度 alpha_1 和 alpha_2,如下所示:
所以我正在做的是试图找到从机器人到连接机器人和圆心的线的角度(这个角度在我的代码中称为 aux_t),然后找到切线和同一条线之间的角度(称为phi_c)。最后,我会通过在 aux_t 中添加和减去 phi_c 来找到我想要的角度。我正在考虑的图表如下所示:
问题是,当我尝试查找 alpha 角度时,我的代码遇到了问题:它开始正确计算角度(虽然是负值,但不确定这是否会引起我的麻烦),但作为汽车和cicle 越来越近,phi_c 变得比 aux_t 大,并且其中一个 alpha 突然改变了它的符号。例如我得到这个:
aux_t//////phi_c//////alpha_1//////alpha_2
-0.81//////+0.52//////-1.33//////-0.29
-0.74//////+0.61//////-1.35//////-0.12
-0.69//////+0.67//////-1.37//////-0.02
-0.64//////+0.74//////-1.38//////+0.1
所以基本上,alpha_2 在这里得到了错误的形式。我知道我做错了什么,但我不确定是什么,我不知道如何将角度从 0 限制到 pi。有没有更好的方法来找到阿尔法角? 这是我的代码部分:
【问题讨论】:
-
这可能是因为
atan2在 -pi 和 pi 之间返回了aux_t的值,所以它一越过那条半线就会改变符号。
标签: matlab math geometry robotics