Arduino 六足机器人 六足昆虫 六爪兽 及 源代码

介绍

此文章是对 Arduino Hexapod Robot 的总结及中文翻译。针对于六足机器人的算法,可以先看看:https://oscarliang.com/inverse-kinematics-implementation-for-hexapod-robot/  如果你还不知道什么是 IK,可以先看看 IK 基础:https://oscarliang.com/inverse-kinematics-and-trigonometry-basics/

因为我网上买了一套六足机器人的框架,但还没到,所以决定先用塑胶做一个小尺寸的用来验证算法。我从上一个版本(2DOF 六爪昆虫)回收了不少材料,除了身体。

[31/Jan/2012]

[13/Feb/2012]

[03/Apr/2012]

[22/Aug/2012]

Arduino Hexapod Robot - base
Arduino Hexapod Robot - leg
Arduino Hexapod Robot - whole

用的是 Arduino Mega,加上自己焊的 Shield 配有20个舵机接口(俩备用或接传感器)。

Arduino Hexapod Robot - arduino shield
Arduino Hexapod Robot - far
===========================================
更新
28/01/2012
重新设计了底板,缩小了半径和加大了厚度。之前那个太大太软了,走的时候有点晃。
Arduino Hexapod Robot - messy cable

发现起直接转换 float 到 int 的时候,数字会造成 round off 错误,像是: 4.4 = 4,   4.8 同样 = 4

于是我写了一条函数来解决(四舍五入):

int FloatToInt(float input){
                // this is an alternative to cast number directly, to avoid floor rounding
                int temp = (int)input; // floor-rounded input
                float dif = input – (float)temp;             //
                if (dif < 0.5)            return temp;
                else                          return temp+1;
}

在 Arduino 上用 float 的坏处就是计算时间变长,导致机器人动作变得不流畅。用 Int 又不够准确。Arduino 天生计算能力比较差,唯有从准确度和计算速度上找到平衡点,之后再说这个问题。

=======================================================

更新
09/02/2012

改写了一下代码,用上了 Rotation Matrix 来转换不同的座标系统(Body 是一个系统,每一只脚都有它们各自的座标系统)。原来只是估算不同座标系统的转换,快,但不准确。原理可以看看我上一篇 讲 roation matrix 的那一部份。

同时我也加长了脚的长度。。。

=======================================================

更新
12/02/2012

昨晚终于写出了 6 step ripple 步法。

=======================================================
更新
19/02/2012

这个周末我实现了

1. 整理了一下舵的线路

2. 实现了 fast SIN, COS, ACOS functions (跟内装的三角函数比起来,牺牲了一些准确度,但快10倍以上)

3. 七个新步法(从 Jeroen Janssen 的代码中 copy 过来的)
(1) Ripple 12 steps
(2) Quadripple 9 steps
(3) Tripod 4 steps

(4) Tripod 6 steps
(5) Tripod 8 steps
(6) Wave 12 steps
(7) Wave 18 steps

=======================================================
更新
03/04/2012

这两个星期都没有怎么时间。。。不过终于让我把新买的六爪昆虫身体给拼出来了。这东西比我想像中的要重。其实老实说不太值。。用塑胶一样可以做出来。。。

因为我当前用的遥控器是 Wii Nunchuck 手柄,没什么按钮,所以如果决定用 state machine 的原理来做一个菜单的功能。

下图每个盒子代表一个状态,三个颜色的 LED 来表示我们所在的状态。

=======================================================
更新
10/08/2012

今天开始学新开发 Android App 啦。。。以前没用过 Java 所以有一定的 Learning Curve。。。

http://android-meda.blogspot.co.uk/2012/01/writing-your-first-android-app-body.html

http://www.elecfreaks.com/677.html

=======================================================
更新
12/08/2012

Android App 关不多好啦,以下是通信协议格式:

Command format:
4 bytes
[type]    [x]     [y]    [extra]

type – 操作类型
x      – 第一个输入 eg X axis
y      – 第二个输入 eg Y axis
extra –第三个输入, e.g. speed of the movement, or just 0 if not needed

Communication:
1. Arduino 等待 Android 的开始命令
2. arduino 发回“可继续”的讯号。
3. Android 收到“可继续”的讯号,发送动作命令,Arduino 每次执行完都会发回“可继续”的讯号。循环。。。原果 Android 那边没有命令可发,也是会发 “0”的。。。

=======================================================
Update
14/08/2012
Because I didn’t setup the servo constrain properly, tragedy happened! The teeth of the gear (the top copper one) are broken… probably happened because it was forcing it while the servo can’t move anymore… i could see how this happened! Luckily ( should i say that?) they have gear on ebay, although it’s not cheap but still better than buying a new one which is nearly 30!

If you want to discuss or share your ideas, you can post soething in our forum here.

One thought on “Arduino 六足机器人 六足昆虫 六爪兽 及 源代码

  1. liwooood

    于是我写了一条函数来解决(四舍五入): 这个算法可以优化一下,
    int FloatToInt(float input){
    return (int)(input+0.5);
    }
    这样应该就可以了。

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I only check blog comments once or twice a week, if you want a quick reply you can post your question on this forum IntoFPV.com... You might get a faster response from me there (multirotor related only).