Devastator履带机器人移动平台(金属电机版)

简介

Devastator Tank Mobile Platform 履带机器人是DFRobot 研制的机器人实验平台,该平台不但可以使用当前流行的Arduino控制器,也可以使用Raspberry pi等其他控制器控制。

机身采用高强度铝合金材料,高速电机加优质塑料履带,运动灵活快速,性能卓越的悬挂系统能让机器人轻松的翻越障碍物,适应大部分不规则场地。

履带机器人平台机身设计多种安装孔,兼容各种传感器、舵机、云台和主控板控制器安装(例如Romeo控制器、Raspberry Pi控制器),非常适合机器人比赛以及其相关研究项目。

参考的电源连接方式

电池盒供电方案

主控板的链接 电池盒的链接 接线头的链接

image:ROB0128 ConnectA.png|

本供电方式的优点是电路连接方式较为简单。但考虑到经济性,推荐使用可充电的AA电池。

可充电锂电池供电方案

7.4V锂电池的链接 接线开关的链接 接线头的链接

image:ROB0128 ConnectB.png|

本供电方式在搭建电路上相较于电池盒供电方案较为复杂。优点是一劳永逸,搭建后,锂电池可不用拆卸,履带车平台接上适配器后即可充电。

马达接线的调试

因为左右侧马达是反向安装的,所以当两个马达朝着同一方向转动时(如均顺时针转动),履带车必然是执行转弯的动作。这里可以通过两种方法纠正这个问题。

调整电机正负极与电机接线柱接线位置

image:ROB0112 Bluno connection.jpg|

修改程序中电机方向的参数

DFRobot专门为Romeo系列的控制板编写了控制电机的库“DFMobile”。只需要在程序中调用并修改相关语句即可。

函数:DFMobile Robot (4,5,7,6)

作用:用于初始化控制小车两侧直流电机的引脚。

说明:DFMobile Robot(EnLeftPin,LeftPWMSpeedPin,EnRightPin,RightPWMSpeedPin);

在Romeo系列的控制板上,默认数字引脚D4.D5.D6.D7用于控制左右电机的速度与方向。

image:Romeo_BLE.png|Romeo BLE电路原理图

函数:Robot.Direction(bool left, bool right)); //注,Robot为定义的对象名,用户可自行在程序开头声明

作用:用于改变两侧马达的控制方向

说明:只需要简单的修改"left","right"两个布尔变量的值,就可以方便地改变马达的转向。

例:如DFMobilr.Direction(LOW,HIGH);可以用来修正马达相对反装而造成的编程逻辑上的麻烦。并且用户如果不小心将马达的接线接错,也可以用这个 函数进行快速的改正这个错误。

实现蓝牙控制(以GoBLE App为例)

GoBLE简介

GoBle是一款通用的蓝牙遥控器! 让你可以与机器人、移动平台或无人机等任何你想要控制的设备进行通信。 遥控器具有一个模拟量的摇杆,六个数字按键,采用传统游戏手柄布局,符合DFRobot标准通讯协议,让用户能快速上手完成理想的作品。 苹果手机:appStore搜索"goble",下载app。 安卓手机:热心网友开发app:社区网友开发

image:GoBLE.png|

GoBle库文件中的函数说明

判断是否接受蓝牙数据

代码: Goble.available() 作用:当接收到蓝牙发过来的数值时它的值为TURE,否则返回False. 说明:用于判断是否接收到“走你”App发来的蓝牙数据。下面是用法:

if(Goble.available()){ do.something; }

定义变量

代码: int joystickX,joystickY,buttonState[6];

说明:这三个变量是针对GoBLE库定义的。分别用来存储摇杆X轴,Y轴以及6个按键的状态值的。

读取参数

代码: joystickX = Goble.readJoystickX(); joystickX = Goble.readJoystickX();

说明:读取摇杆参数。

处理读取的摇杆参数

代码: int SpeedX=2*joystickX-256; int SpeedY=2*joystickY-256;

说明:需要将手柄读到的数据映射到我们小车的轮子转速上,所以就有了下面这两句。将读到的原始数据0~255映射为小车速度-255~255。

建立摇杆和小车运动的联系

程序代码

效果

if (SpeedX>200

SpeedX<-200){

LeftWheelSpeed=SpeedX;
RightWheelSpeed=SpeedX;
Robot.Speed (LeftWheelSpeed,RightWheelSpeed);
}
else if (SpeedY>200