有头有脸的履带机器人

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
好厉害,膜拜大神作品
DFS1w2cb8o8
厉害厉害
黑珍珠
楼主手柄控制的怎么弄?PS2的库我也有现在就是卡在ISP通信不了,能不能加个QQ或者微信教哈我
黑珍珠
必须的赞楼主 我现在在弄PS2的 现在直接一头的雾水
dalaonb
真是太详细了,感谢大神分享
dongshi720
附带程序好像少了motorMetro.h这函数库:(
dongshi720
感觉可以把云台换成一个2自由度机械手臂,然后固定一个手机在小车上,通过QQ做视频监:)控
dongshi720
太给力,讲的真详细
砖头墙
额额 看标题进来的 开始还以为是瓦力
qq913622228180
创客大篷车…………挺好的
xuelang
sg90舵机和mg90舵机都需要么?
Boris_Liu
Boris_Liu
作者
回复xuelang
只需要两个 TowerPro MG90舵机。
Boris_Liu
Boris_Liu
作者
回复xuelang
推荐使用金属齿轮的小型舵机。
xuelang
sg90舵机hemg90舵机都需要么?
appzpp12
大赞,好东西,不过5节电池够用吗?
luna
小白也可以玩起来~真的很不错呢~
dbc0301
真的很详细,先顶一个再说。:)
丄帝De咗臂
太详细了,视频看起来更赞
丄帝De咗臂
:loveliness:教程很厉害,绝对优质
luna
完全是优质教程~可以做为课程了
共4条回复,已加载2条,点击查看更多共4条回复,已加载全部
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]