极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12220|回复: 2

懂 小贱钟 程序的高手 请进

[复制链接]
发表于 2014-8-22 09:49:22 | 显示全部楼层 |阅读模式
本帖最后由 renzhe07 于 2014-8-22 10:04 编辑

最近对小贱钟很是着迷,在研究它的程序的时候,有个 set_XY 的函数,怎么也理解不了。不知道他的几何原理是什么?
跪求解答阿,谢谢了。

函数如下:

double return_angle(double a, double b, double c) {
  // cosine rule for angle between c and a
  return acos((a * a + c * c - b * b) / (2 * a * c));
}

void set_XY(double Tx, double Ty)
{
  delay(1);
  double dx, dy, c, a1, a2, Hx, Hy;

  // calculate triangle between pen, servoLeft and arm joint
  // cartesian dx/dy
  dx = Tx - O1X;
  dy = Ty - O1Y;

  // polar lemgth (c) and angle (a1)
  c = sqrt(dx * dx + dy * dy); //
  a1 = atan2(dy, dx); //
  a2 = return_angle(L1, L2, c);

  servo2.writeMicroseconds(floor(((a2 + a1 - M_PI) * SERVOFAKTOR) + SERVOLEFTNULL));

  // calculate joinr arm point for triangle of the right servo arm
  a2 = return_angle(L2, L1, c);
  Hx = Tx + L3 * cos((a1 - a2 + 0.621) + M_PI); //36,5°
  Hy = Ty + L3 * sin((a1 - a2 + 0.621) + M_PI);

  // calculate triangle between pen joint, servoRight and arm joint
  dx = Hx - O2X;
  dy = Hy - O2Y;

  c = sqrt(dx * dx + dy * dy);
  a1 = atan2(dy, dx);
  a2 = return_angle(L1, (L2 - L3), c);

  servo3.writeMicroseconds(floor(((a1 - a2) * SERVOFAKTOR) + SERVORIGHTNULL));

}

尤其是红色的部分,是怎么个几何关系呢
还有给舵机的us数,为什么是弧度乘高电平的宽度呢

懂得的大侠,麻烦告知一下,谢谢了



回复

使用道具 举报

发表于 2016-1-5 22:16:53 | 显示全部楼层
楼主我也是卡在这了 你搞懂没有
回复 支持 反对

使用道具 举报

发表于 2016-1-23 20:24:06 | 显示全部楼层
想和你私聊小贱钟的原理,不知道可不可以,可以能加我QQ1182063277,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 20:02 , Processed in 0.045866 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表