角度为圆切线

时间:2016-03-13 12:25:29

标签: matlab math geometry robotics

我无法上传照片所以我会尽力解释我的问题。我想用独轮车式机器人模拟移动物体的检测。机器人以位置(x,y)和方向θ为三个状态建模。障碍物表示为半径为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的角度。有没有更好的方法来找到α角? 这是我的代码部分:

2 个答案:

答案 0 :(得分:3)

就你的数学而言,我唯一的改变是从目标的角度减去 (pi/2 - theta)而不是添加它。这将为您提供更典型方向的角度(逆时针为正)。

我不完全确定您认为为什么alpha_2在您的答案中发布的数据中存在错误。发生的事情是你的机器人非常接近目标,alpha_2切线实际上移动到另一侧或指向机器人正在看的方向的线。我在这里创建了一个类似的情况,其中切线上的标签是相对于机器人的角度(黄线),并且所有角度都被强制在0到2 * pi之间。

enter image description here

解决有关强制角度在特定范围内的问题。为此,您需要使用模数(MATLAB中的mod)。在这些示例中,我使用了mod(theta, 2*pi),因为从技术上讲,如果您的机器人面向远离目标,则角度可能大于pi。

作为测试,我进行了一个简单的模拟,可以移动机器人并显示相对于机器人方向的切线角度(同样,在0到2pi之间)

enter image description here

如果您真的希望角度介于0和pi之间,则可以改为使用mod(theta, pi)

alpha_1 = mod(alpha_1, pi);
alpha_2 = mod(alpha_2, pi);

答案 1 :(得分:0)

点位于P,O处的圆圈和半径r。 你想要通过P的圆的切线,加上T

所以我们知道距离OP,我们知道距离OT,即r, 我们知道角度PTO是一个直角。 因此我们使用毕达哥拉斯来获得距离TP。然后cos theta(the 角度OPT是TP / OP。 我们可以节省一步并计算sin theta,但是cos theta 更容易处理,因为它给了我们的点积 方向矢量PT和PO。通常你不会真正需要 打电话给acos()。