【Altar小车机器人平台评测】esplora手柄控制【代码更新】-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12729|回复: 3

【Altar小车机器人平台评测】esplora手柄控制【代码更新】

[复制链接]
发表于 2016-11-27 18:45 | 显示全部楼层 |阅读模式
本帖最后由 沧海笑1122 于 2016-11-28 08:40 编辑

【Altar小车机器人平台评测】esplora手柄控制
【时间】11-20

  这也是上周欠下的帖子,上周做完了。

一、简要介绍一下esplora手柄
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=2775&highlight=esplora
    这是极客工坊的一个简要介绍,可以参考一下,你可以理解成,esplora的外观是游戏手柄、基于Atmega32U4的一块arduino主控板,上面预置了一些传感器(按钮、手柄、三轴传感器以及全彩led、温度、蜂鸣器、光敏等),对了,上面还有一块TFT和一个线性变阻器。很方便地扩展。比如一个怀旧的手持游戏机。
    我是2014年入手一块,把demo试过后就没有再玩,这次主要是希望配合altar的测试,将手柄通过蓝牙,控制小车。
153812igllhwt5ljjzkl1z.jpg
二、我们用到的pin,esplora引出来的pin不算多,一共两组输出,两组输入。
    根据图纸和丝印,我们看到,接蓝牙的rx,tx,softwareserial,我们需要用到d3,d11。 esplora的pin.png
另外就是三轴传感器。
三轴示意图.png
三、esplora的三轴传感器以及库函数的调用
   esplora上配置一只三轴传感器,MMA7361LCR2。可以输出三个轴向的角度。应该是经过了滤波处理。直接调用esplora官方类库,就可以访问。
#include <Esplora.h>
  xAxis = Esplora.readAccelerometer(X_AXIS);    // read the X axis
  yAxis = Esplora.readAccelerometer(Y_AXIS);    // read the Y axis
很方便地读出x,y轴偏移角度。也就是围绕X轴以及围绕Y轴旋转的角度,以水平位置为参考0°。关于esplora的库,请参考:
https://www.arduino.cc/en/Reference/EsploraLibrary

我们的控制原理,就是利用x,y轴的角度,来判断手柄的姿态:
前倾----小车前进
后倾---小车后退
左倾---小车左转
右倾---小车右转
从而衍生出,左前、右前、左后、右后等控制策略。

四、关于ajson的基本概念
(一)为什么要用ajson
    如果仅仅是体感控制方向,我们完全可以写一个简单的手机APP,与小车建立蓝牙连接后,控制前后左右。可以调用手机的姿态传感器。那么,如果要控制速度呢?如果你熟悉APP,当然也不是问题。
    也许你会说,可以通过蓝牙--串口,有很多控制方式啊,传输字符,传输十六进制数,都可以。的确如此,不过,你必须把控制指令和参数(如前进或后退指令,以及speed参数)送到小车端,就要面临数据打包、传输的校验。客户端(altar)的代码,你要考虑从遥控器传输过来的打包数据进行解析,以控制小车的行动。
    由于我的软硬件水平都很平常,我能找到的一个不错的解决方案,就是ajson。

    这是一个arduino库,可以将json格式的数据,打包传输并且在客户端解析还原。这样,控制指令、小车速度都可以传送,我们不用去操心数据的格式化、打包、合并以及客户端的解析。直接调用即可。
    在本次控制中,用到了对小车运动的控制,同时还对esplora的手柄中间按钮的状态进行读取,并且传送到altar。在小车上装了一个led模块(红色),按钮可以控制led的闪动。这是为下一步控制车载相机预留的一个功能。
   我2013年第一次在极客工坊看到这个帖子。http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3407&highlight=json
当时我也没感觉到它到底能做什么,后来慢慢被它吸引。觉得很适合小车控制,极客工坊的leo兄出品的boxz(盒仔)就用到了ajson库。我上一个小车用的就是boxz的库,支持l298以及l293d的电机驱动板,暂时不支持L9110S。
    我在2014年接触小贱钟(也不知谁起的这个名字,就是那个不断书写、不断擦写时间的简单的机械臂)时,发现两只机械臂的调试非常不方便,就用ajson+python写了一个小工具,将调试数据很方便地从PC送到arduino,来控制两只臂的角度,直到你找到最合适的参数,写进小贱钟程序即可。
    后来在写树莓派水滴碰撞控制器时,也试过asjon,即把各类参数用树莓派设置好,然后打包成ajson通过串口送给arduino,arduino解析后,负责执行即可。后来考虑到多线程控制,暂时没有再做下去。

你可以参考来自伟大的giuhub.com   https://github.com/interactive-matter/aJson
进一步了解ajson。
我在本次测试中ajson的数据格式及用法:

{"car":{"action":1,"x":95,"y":50},"camera":{"photo":1023}}
其中:
action=0  (停止)
       1  (前进)
       2  (后退)
x---左电机速度
y---右电机速度//因为是差速,所以这两个参数就可以完成各种转向,当然包括直行。

photo---0 拍照
        1023 不拍照

五、演示视频
    程序一共包括两个,一个是手柄端,一个是altar小车端。代码注释得应该比较清楚了。(1)就是小车部分的电机,我自己拆装了一次,所以对正反转,有我自己的定义。如果玩家看到这里,请对照自己的电机接线稍加修改即可。(2)代码里面有一些测试用的串口打印语句,实际运行中可以注释掉。
(3)对于控制端,你必须有一块esplora,在IDE中要选择espora。否则类库和三轴传感器都用不了。
我打包了程序和用到的ajson库,至于esplora库,是IDE内置的。


code&amp;lib.rar (23.67 KB, 下载次数: 23)
发表于 2016-11-27 19:00 | 显示全部楼层
这个拿来控制很合适啊
发表于 2016-11-27 23:16 | 显示全部楼层
是什么方式通信的
 楼主| 发表于 2016-11-27 23:47 | 显示全部楼层
蓝牙通信,详细请看我附件里面的源代码。
注意:修订了代码中间的一部分,转向部分。简化了一些。
Esplora_with_ajson1127.rar (1.58 KB, 下载次数: 8)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 02:21 , Processed in 0.098796 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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