有头有脸的履带机器人

2015-07-314.2万
精华项目
AI 快速预览详细 收起
本文介绍了一个基于Devastator履带机器人移动平台和Romeo BLE多合一控制器的项目,旨在帮助初学者了解蓝牙控制方法及Arduino编程。项目包括硬件清单、注意事项及详细的程序编写步骤。通过逐步增加小车的功能,初学者可以循序渐进地掌握Arduino编程的过程。
有头有脸的履带机器人
偷插一张图
有头有脸的履带机器人图7

【案例说明】
本例程为一款,基于Devastator 履带机器人移动平台,具有两个自由度云台的小车。希望能帮助初学者对Romeo BLE多合一控制器及其蓝牙控制方法有一定初步的了解, 同时对制作过程中的一些容易出错的地方做了整理和说明。 如有不足和疏漏的地方,望大家批评指正。

所需的硬件清单

注:以上配件在DFRobot 商城均有出售。Devastator履带机器人移动平台的搭建,请参考产品资料库 ,产品安装手册

视频效果


【主控板图解】

有头有脸的履带机器人图5


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

【硬件原理图】

有头有脸的履带机器人图4



【程序分析】

因为控制程序较长。为便于初学者理解,将程序按功能分解为四个部分,一步步增加小车的功能,以便于初学者能循序渐进的掌握Arduino程序编写的过程。程序按功能从基本到扩展可分为如下几个步骤

Step1.小车基本运动的实现 >> Step2.蓝牙控制小车运动 >> Step3.蓝牙控制云台>>Step4.完整程序。

在进行下列代码学习之前,请先下载好下载附件DFMobile.zip下载附件GoBLE.zip两个arduino扩展库。




Step1.小车基本运动的实现

测试代码:
说明:改变LeftWheelSpeed, RightWheelSpeed两个变量的参数值(可取正负号),用于测试小车基本的前进,后退,左转,右转,停止等基本功能。

#include "DFMobile.h"
DFMobile Robot (4, 5, 7, 6);                        //注释a
int LeftWheelSpeed = 200;                            //注释b
int 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);
有头有脸的履带机器人图2

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) //  小车右转

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(21)
Amos Young
Amos Young

非常好的项目分享,讲的真详细
Amos Young
Amos Young
好厉害,膜拜大神作品
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
黑珍珠
黑珍珠
楼主手柄控制的怎么弄?PS2的库我也有现在就是卡在ISP通信不了,能不能加个QQ或者微信教哈我
黑珍珠
黑珍珠
必须的赞楼主 我现在在弄PS2的 现在直接一头的雾水
dalaonb
dalaonb
真是太详细了,感谢大神分享
dongshi720
dongshi720
附带程序好像少了motorMetro.h这函数库:(
dongshi720
dongshi720
感觉可以把云台换成一个2自由度机械手臂,然后固定一个手机在小车上,通过QQ做视频监:)控
dongshi720
dongshi720
太给力,讲的真详细
砖头墙
砖头墙
额额 看标题进来的 开始还以为是瓦力
qq913622228180
qq913622228180
创客大篷车…………挺好的
xuelang
xuelang
sg90舵机和mg90舵机都需要么?
Boris_Liu
Boris_Liu
作者
回复xuelang
只需要两个 TowerPro MG90舵机。
Boris_Liu
Boris_Liu
作者
回复xuelang
推荐使用金属齿轮的小型舵机。
xuelang
xuelang
sg90舵机hemg90舵机都需要么?
appzpp12
appzpp12
大赞,好东西,不过5节电池够用吗?
luna
luna
小白也可以玩起来~真的很不错呢~
dbc0301
dbc0301
真的很详细,先顶一个再说。:)
丄帝De咗臂
丄帝De咗臂
太详细了,视频看起来更赞
丄帝De咗臂
丄帝De咗臂回复luna
:loveliness:教程很厉害,绝对优质
luna
luna回复丄帝De咗臂
完全是优质教程~可以做为课程了
共4条回复,已加载2条,点击查看更多共4条回复,已加载全部
qq815076543322
qq815076543322
这么详细 太赞了
Boris_Liu
Boris_Liu
作者
[align=left][font=微软雅黑]Step4.完整程序[/font][/align][align=left][font=微软雅黑]
[/font]
[/align][align=left][font=微软雅黑]经过以上三个步骤的分析,大家应该对这辆小车的编程有了一定程度的了解。那么尝试下,如何对以上的程序进行整合,得到我们想要的能用蓝牙同时控制小车的云台和基本的运动。这里我们给出了整合后的完整程序供大家参考。[/font][/align][align=left][font=微软雅黑]
[/font][/align][align=left][font=微软雅黑]完整程序及相关库下载链接:

[/font][/align]
[align=left][font=微软雅黑]附:【常用[/font][font=微软雅黑]蓝牙配置[/font][font=微软雅黑][/font][/align]
[font=微软雅黑]这里整理了常用的[font=Courier New]AT[/font][font=微软雅黑]指令配置蓝牙的方法[/font][font=Courier New], [/font][font=微软雅黑]供大家参考。详细信息可参考[/font][/font][font=微软雅黑][font=Courier New]Bluno[/font][/font]蓝牙[font=Courier New]4.0[/font][font=微软雅黑]控制[/font][font=微软雅黑]的[/font][font=Courier New]Wiki[/font]
[align=left][font=微软雅黑] [/font][/align][font=微软雅黑]
[/font][font=微软雅黑]进入AT模式的方法和AT指令的输入固件版本1.8及以后[/font][align=left][font=微软雅黑]
[/font][/align][align=left][font=微软雅黑]1.打开Arduino IDE[/font][/align][align=left][font=微软雅黑]2.在菜单-》工具-》串口中选择正确的设备[/font][/align][align=left][font=微软雅黑]3.开启串口监视器 (点击窗口的右上角的按键)[/font][/align][align=left][font=微软雅黑]4.在两个下拉菜单中选择"No line ending"(①)和115200 baud(②)[/font][/align][align=left][font=微软雅黑]5.在输入框中(③)输入"+++",并点击发送键(④)[/font][/align][align=left][font=微软雅黑]6.如果收到“Enter AT Mode”(⑤),就证明已经进入AT指令模式.[/font][/align][align=left][font=微软雅黑]
[/font][/align]

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

[/font][/align][align=left][font=微软雅黑]
[/font][/align][align=left][font=微软雅黑]Fig1: 输入AT指令,记得更改为Both NL & CR[/font][/align][align=left][font=微软雅黑]10.如果收到“ERROR CMD”,可以再发一遍。发送多次后如果还是“ERROR CMD”,你需要检查一下指令发送是否正确.(大写字母)[/font][/align][align=left][font=微软雅黑]11.可以使用"AT+EXIT"来退出AT指令模式.[/font][/align][align=left][font=微软雅黑]
[/font][/align][align=left][font=微软雅黑]常用的两个AT指令[/font][/align][align=left][font=微软雅黑]
[/font]
[/align][align=left][font=微软雅黑]"AT+ROLE" 设置BLE芯片主从机状态[/font][/align][table]
[tr][td=285][align=center][align=left][font=微软雅黑]AT+ROLE=ROLE_CENTRAL[/font][/align][/align][/td][td=274][align=right][align=left][font=微软雅黑]设置BLE工作在主机状态下[/font][/align][/align][/td][/tr]
[tr][td=285][align=right][align=left][font=微软雅黑]AT+ROLE=ROLE_PERIPHERAL[/font][/align][/align][/td][td=274][align=right][align=left][font=微软雅黑]设置BLE工作在从机状态下[/font][/align][/align][/td][/tr]
[tr][td=285][align=right][align=left][font=微软雅黑]AT+ROLE=?[/font][/align][/align][/td][td=274][align=right][align=left][font=微软雅黑]查询当前BLE芯片的主从机状态。 (默认值为ROLE_PERIPHERAL)[/font][/align][/align][/td][/tr]
[/table][font=微软雅黑]
[/font][align=left][font=微软雅黑]
[/font][/align][align=left][font=微软雅黑]"AT+NAME" 设置和查询当前设备名称[/font][/align][table]
[tr][td=244][align=center][align=left][font=微软雅黑]AT+NAME=DFBLEduinoV1.0[/font][/align][/align][/td][td=314][align=right][align=left][font=微软雅黑]设置模块名称为“DFBLEduinoV1.0”。ascii码形式,小于等于13字节[/font][/align][/align][/td][/tr]
[tr][td=244][align=right][align=left][font=微软雅黑]AT+NAME=?[/font][/align][/align][/td][td=314][align=right][align=left][font=微软雅黑]查询当前模块名称, 默认值为DFBLEduinoV1.0[/font][/align][/align][/td][/tr]
[/table]
Boris_Liu
Boris_Liu
作者
[font=微软雅黑]Step3.蓝牙控制云台
[/font][font=微软雅黑]测试代码
用于实现“走你”App控制小车云台的控制。[/font]
[font=微软雅黑]测试程序下载

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