0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用Tactigon通过BLE控制Arduino驱动的机器人

454398 来源:工程师吴畏 2019-08-01 09:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我们需要什么

配置了Arduino IDE的Tactigon

机器人。我们使用带有Arduino板的2轮机器人和与UART接口的BLE无线电。其他类型的机器人或定制机器人也可以正常工作。

机器人BLE MAC地址和特征

趣味

收集BLE MAC地址和特征

配置好环境并且我们的电路板开启后,我们需要收集BLE MAC地址和特征。为此,我们使用了一个名为BLE Scanner的免费Android应用程序。

应用程序显示后几秒钟机器人的BLE:

如我们所见,我们周围的所有BLE设备都在本节中展示。我们需要记下Waveshare_BLE MAC地址:在这个例子中它是:00:0E:0B:0C:4A:00

通过点击CONNECT按钮,我们可以访问设备的信息作为属性,服务和自定义特征。

这里我们需要写下CUSTOM CHARACTERISTIC UUID,在这种情况下:0000ffe1-0000 -1000-8000-00805f9b34fb。

通过这些项目,我们可以将Tactigon BLE设置为代码的setup()部分中的BLE Central。

Tactigon Sketch

循环

在本节中,我们有草图的核心。在频率为50Hz时,我们更新四元数和欧拉角。

由Tactigon库提供的Analizyng俯仰角,我们可以通过减速来确定转向半径内轮和加速外轮。

Analizying roll,我们可以确定机器人的行进速度。

使用sprintf我们准备缓冲区以写入特征。

机器人草图

由于我们的蓝牙通过UART发送接收数据,因此我们可以直接在串行缓冲器中获得轮速。

我们将机器人引脚设置如下,全部作为输出:

要解析命令,我们首先读取所有串行缓冲区并验证它是否长于0:

如果命令包含“Wh”,我们可以解析字符串并收集leftSpeed和rightSpeed。

direct_motor函数将Tactigon传输的速度分配给机器人的每个车轮。通过这样做Tactigon将充当虚拟方向盘!

最终注意事项

此草图显示了Tactigon的潜在应用,BLE Central模式可以连接到现有的BLE设备并收集信息或控制它们。

请继续关注更多Tactigon的代码!

Alphabot2代码

Tactigon代码

#include

#include

#include

extern int ButtonPressed;

T_Led rLed, bLed, gLed;

T_QUAT qMeter;

T_QData qData;

T_BLE bleManager;

UUID targetUUID;

uint8_t targetMAC[6] = {0x00,0x0e,0x0b,0x0c,0x4a,0x00};

T_BLE_Characteristic accChar, gyroChar, magChar, qChar;

int ticks, ticksLed, stp, cnt, printCnt;

float roll, pitch, yaw;

void setup() {

// put your setup code here, to run once:

ticks = 0;

ticksLed = 0;

stp = 0;

cnt = 0;

//init leds

rLed.init(T_Led::RED);

gLed.init(T_Led::GREEN);

bLed.init(T_Led::BLUE);

rLed.off();

gLed.off();

bLed.off();

//init BLE

bleManager.setName(“Tactigon”);

bleManager.InitRole(TACTIGON_BLE_CENTRAL); //role: CENTRAL

targetUUID.set(“0000ffe1-0000-1000-8000-00805f9b34fb”); //target characteristic

bleManager.setTarget(targetMAC, targetUUID); //target: mac device and its char UUID

}

void loop() {

char buffData[24];

int deltaWheel, speedWheel;

int pitchThreshold, rollThreshold, th1, th2;

//update BLE characteristics @ 50Hz (20msec)

if(GetCurrentMilli() 》= (ticks +(1000 / 50)))

{

ticks = GetCurrentMilli();

//get quaternions and Euler angles

qData = qMeter.getQs();

//Euler angles: rad/sec --》 degrees/sec

roll = qData.roll * 360/6.28;

pitch = qData.pitch * 360/6.28;

yaw = qData.yaw * 360/6.28;

//build command to rover depending on Euler angles

//left/right

pitchThreshold = 15;

if(pitch 《 -pitchThreshold || pitch 》 pitchThreshold)

{

if(pitch《-pitchThreshold)

{

deltaWheel =- (fabs(pitch) - pitchThreshold)*3;

}

else

{

deltaWheel =+ (fabs(pitch) - pitchThreshold)*3;

}

}

else

{

deltaWheel=0;

}

//forward/backword

rollThreshold = 15;

th1 = 90 + rollThreshold;

th2 = 90 - rollThreshold;

roll = fabs(roll);

if(roll 》 th1)

{

speedWheel = (roll - th1) * 3;

}

else if(roll 《 th2)

{

speedWheel = (roll - th2) * 3;

}

else

{

speedWheel = 0;

}

//command in buffData

sprintf(buffData,“Wh(%d)(%d)”, speedWheel-(-deltaWheel/2), speedWheel+(-deltaWheel/2));

//if connected and attached to peripheral characteristic write in it

if(bleManager.getStatus() == 3)

{

//signal that connection is on

bLed.on();

//send command every 100msec

rLed.off();

cnt++;

if(cnt 》 5)

{

cnt = 0;

bleManager.writeToPeripheral((unsigned char *)buffData, strlen(buffData));

rLed.on();

}

}

//say hello on serial monitor every second and blink green led

printCnt++;

rLed.off();

if(printCnt 》 50)

{

//Serial.println(“Hello!”);

//Serial.println(roll);

printCnt = 0;

rLed.on();

}

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    213

    文章

    30590

    浏览量

    219607
  • BLE
    BLE
    +关注

    关注

    13

    文章

    745

    浏览量

    66011
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195974
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高精度机器人控制的核心——基于 MYD-LT536 开发板的精密运动控制方案

    控制系统: - 视觉定位模块:通过 CSI 接口将数据实时传输至 MYD-LT536; - 反馈环路:编码器信号经 CAN 总线反馈,实现机器人闭环控制与误差自适应补偿; - 误差修正
    发表于 11-14 15:48

    RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

    、远程作业机器人、特种检测机器人· 多摄像头输入:通过多路摄像头无死角监控作业现场,实现精准操作与安全监控。· 多屏显示:将不同视角的画面、传感器数据、控制界面分别显示,帮助操作员远程
    发表于 10-29 16:41

    小萝卜机器人的故事

    经过我的申请, 马老师发放了, 小萝卜机器人的, 开发权限, 原来的小萝卜公司, 因为经营不善倒闭, 作为科研产品, 几个技术对此惋惜, 自掏腰包, 要让小萝卜机器人, 再生, 每次听到小萝卜说
    发表于 10-23 05:24

    自制巡线解迷宫机器人(上)

    ,我再实现一款像稚晖君所做的Qbot那样的小型且高度集成的巡线机器人。 概述 巡线解迷宫机器人是一款能够通过红外反射传感器实现自主巡线以及解迷宫等功能的小型三轮机器人,该
    发表于 10-20 10:39

    Arduino Uno l两轮自平衡机器人 电机驱动无输出求解

    Arduino Uno l两轮自平衡机器人 电机驱动无输出求解
    发表于 10-15 06:36

    工业机器人的特点

    机器人是关键。工业互联网是通过端上的数据传输,经过大数据分析和云计算处理,再进行智能化决策的一整个过程,其中端的数据传输是基础。工业互联网的端包括机器人、传感器等一切线下连接端口。因此发展工业
    发表于 07-26 11:22

    轮式移动机器人电机驱动系统的研究与开发

    【摘 要】以嵌入式运动控制体系为基础,以移动机器人为研究对象,结合三轮结构轮式移动机器人,对二轮差速驱动转向自主移动机器人运动学和动力学空间
    发表于 06-11 14:30

    盘点#机器人开发平台

    地瓜机器人RDK X5开发套件地瓜机器人RDK X5开发套件产品介绍 旭日5芯片10TOPs算力-电子发烧友网机器人开发套件 Kria KR260机器人开发套件 Kria KR260-
    发表于 05-13 15:02

    详细介绍机场智能指路机器人的工作原理

    带)定位、Wi - Fi 定位等。蓝牙定位可以通过与机场内部署的蓝牙信标进行通信,获取机器人的大致位置信息。UWB 定位则利用超宽带信号实现更精确的定位,能够在复杂的室内环境中达到较高的定位精度,误差可控制
    发表于 05-10 18:26

    【「# ROS 2智能机器人开发实践」阅读体验】机器人入门的引路书

    ROS的全称:Robot Operating System 机器人操作系统 ROS的 目的 :ROS支持通用库,是通信总线,协调多个传感器 为了解决机器人里各厂商模块不通用的问题,让机器人快速开发
    发表于 04-30 01:05

    【「# ROS 2智能机器人开发实践」阅读体验】+内容初识

    讲解了如何在 ROS 2 中实现机器人的运动控制,包括速度控制、位置控制等。通过编写运动控制节点
    发表于 04-27 11:24

    开源项目!基于Arduino控制的六足机器人

    清单详见下方PDF附件: *附件:Parts-List.pdf *附件:Hardware-Usage.pdf 步骤1:CAD建模 通过Fusion 360完成六足机器人建模(见上图),定义腿部编号(前
    发表于 03-03 11:25

    【「具身智能机器人系统」阅读体验】2.具身智能机器人的基础模块

    具身智能机器人的基础模块,这个是本书的第二部分内容,主要分为四个部分:机器人计算系统,自主机器人的感知系统,自主机器人的定位系统,自主机器人
    发表于 01-04 19:22

    【「具身智能机器人系统」阅读体验】2.具身智能机器人大模型

    。 多模态融合的创新与突破 机器人控制技术的另一个重要突破在于多模态大模型的应用。相比于仅通过文字进行人机交互的传统方法,现代机器人能够融合视觉、声音、定位等多模态输入信息,为任务执行
    发表于 12-29 23:04

    【「具身智能机器人系统」阅读体验】1.初步理解具身智能

    与未来,涵盖如基于行为的人工智能、生物启发的进化人工智能及认知机器人技术的发展。这一历史背景为随后的大模型驱动的具身智能讨论奠定了基础,随着人工智能模型复杂性和能力的不断提升,这一主题也变得愈加
    发表于 12-28 21:12