Boris_Liu 发表于 2015-7-31 11:44:29

有头有脸的履带机器人

有头有脸的履带机器人偷插一张图

【案例说明】本例程为一款,基于Devastator 履带机器人移动平台,具有两个自由度云台的小车。希望能帮助初学者对Romeo BLE多合一控制器及其蓝牙控制方法有一定初步的了解, 同时对制作过程中的一些容易出错的地方做了整理和说明。 如有不足和疏漏的地方,望大家批评指正。
【所需的硬件清单】1. ROB0112 Devastator履带机器人移动平台2.TowerPro SG903. DFR0305 Romeo BLE 多合一控制器4.7.4V锂电池5.电源开关电池充电接口配件6.微型直流减速电机7.迷你2自由度云台(无舵机)8.TowerPro MG90舵机
注:以上配件在DFRobot 商城均有出售。Devastator履带机器人移动平台的搭建,请参考产品资料库 ,产品安装手册
视频效果
https://v.youku.com/v_show/id_XMTI5Nzc3NjIzMg==.html
【主控板图解】



注意事项说明:1.因为硬件设计的原因。数字串口D4,D5,D7,D6被默认控制M1,M2处的马达。拔掉跳线将释放数字口,电机控制器将被禁用。故该四个端口最好不要用于连接其他外部硬件。
2.当Romeo BlE与其他设备有进行蓝牙通讯的时候。将导致arduino程序无法下载。故下载时要留意蓝牙连接Link和配对Pair指示灯是否点亮。
【硬件原理图】




【程序分析】
因为控制程序较长。为便于初学者理解,将程序按功能分解为四个部分,一步步增加小车的功能,以便于初学者能循序渐进的掌握Arduino程序编写的过程。程序按功能从基本到扩展可分为如下几个步骤
Step1.小车基本运动的实现 >> Step2.蓝牙控制小车运动 >> Step3.蓝牙控制云台>>Step4.完整程序。
在进行下列代码学习之前,请先下载好和两个arduino扩展库。



Step1.小车基本运动的实现
测试代码:说明:改变LeftWheelSpeed, RightWheelSpeed两个变量的参数值(可取正负号),用于测试小车基本的前进,后退,左转,右转,停止等基本功能。
#include "DFMobile.h"DFMobile Robot (4, 5, 7, 6);                        //注释aint LeftWheelSpeed = 200;                            //注释bint RightWheelSpeed = 200;void setup () {       Serial.begin(9600);   Robot.Direction(false,true);}void loop () {Robot.Speed (LeftWheelSpeed, RightWheelSpeed);   //注释c        Delay(1000); }代码回顾
a.函数:DFMobile Robot (4,5,7,6);作用:用于初始化控制小车两侧直流电机的引脚。说明:DFMobil Robot (EnLeftPin,LeftPWMSpeedPin,EnRightPin,RightPWMSpeedPin);

b.函数:Robot.Direction(bool left, bool right));作用:用于改变两侧马达的控制方向说明:因为左右侧马达是反方向安装的,所以只有当两侧马达的转向相反时,小车才会沿着同一个方向运动。bool 即为布尔变量类型,其逻辑为ture 和false, 这里我们用于方便改变马达的转向。例:如本例中用DFMobilr.Direction(LOW,HIGH);可以用来修正马达相对反装而造成的编程逻辑上的麻烦。并且用户如果不小心将马达的接线接错,也可以用这个函数进行快速的改正这个错误。
c.函数: robot.Speed (int16_t left_speed, int16_t right_speed);作用: 用于设定小车两个轮子的速度,因为正负号可控制相反的电机转向,故在void setup()中用Robot.Direction设定好默认方向后。便可直接用DFMobile.Speed()表示小车的运动状态。说明:取值范围是-255~255,   值的绝对值越大,马达的输出转速越大。负号代表与原来设定的转向相反。
举例:void setup(){ robot.Direction(LOW,HIGH);}则: robot.Speed(255,255) //   小车前进 robot.Speed(-255,255)//   小车后退 robot.Speed(-255,255) //小车左转 robot.Speed(255,-255) //小车右转

dongshi720 发表于 2016-12-17 10:06:40

附带程序好像少了motorMetro.h这函数库:(

Boris_Liu 发表于 2015-7-31 12:01:54

Step2.蓝牙控制小车运动

测试代码:
说明:用于实现“走你”App控制小车基本前进,后退,左右转,停止等运动。详细资料参考海盗船套件进阶教程 手机遥控功能

测试文件下载

代码回顾a.函数: Goble.available()作用:当接收到蓝牙发过来的数值时它的值为TURE,否则返回False.备注:用于判断是否接收到“走你”App发来的蓝牙数据。下面是用法:if(Goble.available()){do.something;}
b.读取参数代码:int joystickX,joystickY;说明:joystickX,joystickY,buttonState这三个变量是针对GoBLE库定义的。分别用来存储摇杆X轴,Y轴以及6个按键的状态值的。 joystickX = Goble.readJoystickX();joystickX = Goble.readJoystickX();
各输入在”GoBLE“的分布,见下图
SWITCH_UP (上键) -- 1SWITCH_RIGHT (右键) -- 2
SWITCH_DOWN (下键) -- 3
SWITCH_LEFT (左键) -- 4
SWITCH_SELECT (选择键) -- 5
SWITCH_START (开始键) -- 6

c. 处理读取的摇杆参数代码: int SpeedX=2*joystickX-256;      int SpeedY=2*joystickY-256;说明:需要将手柄读到的数据映射到我们小车的轮子转速上,所以就有了下面这两句。将读到的原始数据0~255映射为小车速度-255~255。
d. 建立摇杆和小车运动的联系   
代码翻译
if (SpeedX>200 || SpeedX<-200){            LeftWheelSpeed=SpeedX;                     RightWheelSpeed=SpeedX;      Robot.Speed (LeftWheelSpeed,RightWheelSpeed);   }            else if (SpeedY>200 || SpeedY<-200){               LeftWheelSpeed=SpeedY-80;                   RightWheelSpeed=-SpeedY-80;      Robot.Speed(LeftWheelSpeed,RightWheelSpeed);   }   else if (SpeedX==0 && SpeedY==0){      Robot.Speed(0,0);   } 如果 ( 摇杆向上 或者(||) 摇杆向下 ){      小车前进或者后退;   }            如果 ( 摇杆向右 或者(||) 摇杆向左){         小车右转或者左转;   }   如果 (摇杆X轴没变化 并且(&&) 摇杆Y轴没变化){      小车停止;   }


Boris_Liu 发表于 2015-7-31 14:03:58

本帖最后由 Boris_Liu 于 2015-7-31 14:42 编辑

Step4.完整程序
经过以上三个步骤的分析,大家应该对这辆小车的编程有了一定程度的了解。那么尝试下,如何对以上的程序进行整合,得到我们想要的能用蓝牙同时控制小车的云台和基本的运动。这里我们给出了整合后的完整程序供大家参考。
完整程序及相关库下载链接:

附:【常用蓝牙配置】
这里整理了常用的AT指令配置蓝牙的方法, 供大家参考。详细信息可参考Bluno蓝牙4.0控制的Wiki

进入AT模式的方法和AT指令的输入。(固件版本1.8及以后)
1.打开Arduino IDE2.在菜单-》工具-》串口中选择正确的设备3.开启串口监视器 (点击窗口的右上角的按键)4.在两个下拉菜单中选择"No line ending"(①)和115200 baud(②)5.在输入框中(③)输入"+++",并点击发送键(④)6.如果收到“Enter AT Mode”(⑤),就证明已经进入AT指令模式.


Fig1: +++进去CMD模式7.在两个下拉菜单中选择"Both NL & CR"(①)和115200 baud(②)8.在输入框中(③)输入AT指令,并点击发送键(④)9.如果BLE配置成功,界面将会返回"OK"(⑤)



Fig1: 输入AT指令,记得更改为Both NL & CR10.如果收到“ERROR CMD”,可以再发一遍。发送多次后如果还是“ERROR CMD”,你需要检查一下指令发送是否正确.(大写字母)11.可以使用"AT+EXIT"来退出AT指令模式.
常用的两个AT指令
"AT+ROLE" 设置BLE芯片主从机状态
AT+ROLE=ROLE_CENTRAL<CR+LF>设置BLE工作在主机状态下
AT+ROLE=ROLE_PERIPHERAL<CR+LF>设置BLE工作在从机状态下
AT+ROLE=?<CR+LF>查询当前BLE芯片的主从机状态。 (默认值为ROLE_PERIPHERAL)


"AT+NAME" 设置和查询当前设备名称
AT+NAME=DFBLEduinoV1.0<CR+LF>设置模块名称为“DFBLEduinoV1.0”。ascii码形式,小于等于13字节
AT+NAME=?<CR+LF>查询当前模块名称, 默认值为DFBLEduinoV1.0









Boris_Liu 发表于 2015-7-31 12:06:24

本帖最后由 Boris_Liu 于 2015-7-31 12:19 编辑

Step3.蓝牙控制云台

测试代码
用于实现“走你”App控制小车云台的控制。

测试程序下载   

代码回顾
a.代码:for(int i; i<7; i++){            根据按键的情况改变伺服舵机的角度         }作用:使一次按键后,舵机改变7°。使得舵机角度调节更加明显和具有连续性。说明:这里的循环次数可以根据用户自己的实际用途进行修改。   b.函数:int clip(float min, float max, float Value)作用:用于限定舵机的角度范围。相对于云台的实际情况,它的调整范围并非伺服舵机固有的(0~180°)那么大。说明:其中flaot min , float max分别表示限定范围的最小值和最大值。而Value为要限定的变量。

大连林海 发表于 2015-7-31 17:05:28

这么详细 太赞了

丄帝De咗臂 发表于 2015-7-31 22:25:06

太详细了,视频看起来更赞

dbc0301 发表于 2015-7-31 23:16:25

真的很详细,先顶一个再说。:)

大连林海 发表于 2015-8-1 09:23:35

丄帝De咗臂 发表于 2015-7-31 22:25
太详细了,视频看起来更赞

下一次把课程加入履带车

丄帝De咗臂 发表于 2015-8-1 20:36:15

大连林海 发表于 2015-8-1 09:23
下一次把课程加入履带车

嗯,主意不错

luna 发表于 2015-8-4 10:24:21

小白也可以玩起来~真的很不错呢~

luna 发表于 2015-8-4 10:28:30

丄帝De咗臂 发表于 2015-8-1 20:36
嗯,主意不错

完全是优质教程~可以做为课程了

丄帝De咗臂 发表于 2015-8-4 10:41:20

luna 发表于 2015-8-4 10:28
完全是优质教程~可以做为课程了

:loveliness:教程很厉害,绝对优质

MoonShine 发表于 2015-8-4 12:17:55

大赞,好东西,不过5节电池够用吗?

xuelang 发表于 2015-9-28 08:27:31

sg90舵机hemg90舵机都需要么?

xuelang 发表于 2015-9-28 08:28:01

sg90舵机和mg90舵机都需要么?

Boris_Liu 发表于 2015-9-28 09:51:23

xuelang 发表于 2015-9-28 08:28
sg90舵机和mg90舵机都需要么?

推荐使用金属齿轮的小型舵机。

Boris_Liu 发表于 2015-9-28 09:52:20

xuelang 发表于 2015-9-28 08:28
sg90舵机和mg90舵机都需要么?

只需要两个 TowerPro MG90舵机。

Geemi 发表于 2015-12-30 16:09:44

创客大篷车…………挺好的

砖头墙 发表于 2016-5-10 23:37:18

额额    看标题进来的开始还以为是瓦力

dongshi720 发表于 2016-12-17 09:13:38

太给力,讲的真详细

dongshi720 发表于 2016-12-17 09:26:19

感觉可以把云台换成一个2自由度机械手臂,然后固定一个手机在小车上,通过QQ做视频监:)控
页: [1] 2
查看完整版本: 有头有脸的履带机器人