文章来源于转载,为了写一系列TT文章,故此加原创 拆了之后没想到它是这样!第一眼看上去就感觉高端大气上档次有木有! ? 高度集成的电路系统,没有一个多余的设备,同时也没有设计散热风扇,整块铝合金散热板成为Tello的主要散热设备。 你最想看到的芯片信息在这里! ? ? 散热板之下有序排列着各种各样的芯片和电子元件,机尾是视觉传感器(中间那个小的RGB摄像头)和一组TOF红外传感器(两边两个大的,一个发射一个接收)。 刮掉导热硅胶可以看到三块主要芯片的一些信息。 ? 主要负责电源管理的ACTIVE 8846QM芯片,对Tello较长的续航时间起了比较大的作用。 ? “快”档时,Tello的灵敏度会有比较明显的提升,飞行速度也会根据APP内的倾角设定而变化,操控手感也更跟手。
好,我们具体的发送方式拿到了 ? 来搜索 ? 发送命令的C++版本,这个是最重要的 ? 串口的定义,是用了这个两个引脚来控制和接受飞机回传的信息 ? 我们接着打开大疆提供的Arduino,我们记下这个开发板子的型号 ? 来搜索,看到是两个地方 一个是封装好的,一个是没有封装的 ? 我们在资源管理器里面在看一下这个具体的板子 的定义在哪里 ? 板子的配置,有一些上传的速度,CPU的频率,Flash的频率和模式等 以及要不要打印详细的log。其实这个文件有点像一个设置的文件 ? 这里是定义了开发板的名字和上传时候要用的工具 最后两个有点有趣是硬件串口的功能,在这里被打开了 ? mcu的类型+core类型+pin类型+具体的名字 ? 上面也说了,这个串口的函数不是普通的串口函数是esp32的 我们接下来去具体的定义位置来寻找答案 ? 我这个位置处找到的源码 ? 这个是我找到的函数原型。有完整的函数签名 ?
腾讯云618采购季:2核2G云服务器爆品秒杀低至18元!云产品首单0.8折起,企业用户购买域名1元起,还可一键领取6188元代金券,购后抽奖,iPhone、iPad等你拿!
这里必须插一个探测卡的范围,因为上面的命令都是在一个卡片形成的立体空间内响应的 ? 还得注意摆放的地区,要纹理丰富 ? 这个是一个例子,沿弧线飞行Tello无人机飞弧线若干问题 对于这个弧线疑惑的人可以看上面的文章 ---- 具体的说明: https://www.dji.com/cn/robomaster-tt/downloads 星球:TT 通过探测星球排列图案识别挑战卡 ID,并且获取在该挑战卡坐标系中的坐标值。小火箭:代表该 ? 挑战卡坐标系中 X 轴正方向。挑战卡 ID:分别为数字1-8,方便用户区别不同挑战卡。 星球:TT 通过探测星球排列图案识别挑战卡 ID,并且获取在该挑战卡坐标系小火箭:代表该挑战卡坐标系中 X 轴正方向。挑战卡 ID:分别为数字1-8,方便用户区别不同挑战卡。 星球:TT 通过探测星球排列图案识别挑战卡 ID,并且获取在该挑战卡坐标标值
这个是由于没有连接飞机的WIFI造成的 ? 这段代码是我在后面又加入了一个关于时间戳的功能 ---- 注意的是,先要选择对TT的IP地址,否则后面的都是空谈。 有解码线程,显示线程,以及视频流的帧线程等 后面是关于声音相关的线程,TT没有扬声器,所以不读了 ? 这些是它的一些优点 ? 这个是conn的py文件里面的函数,主要是处理接收的各种流数据 ? 这个也是一个小demo,来验证TT的基本功能,以及连接情况。 https://robomaster-dev.readthedocs.io/zh_CN/latest/python_sdk/beginner_drone.html 对于SDK的使用,可以去看官方的文档 也可以看我写过的一些文章Robomaster SDK安装(Win10+Py3.8) Robomaster SDK源码解读.Camera.上 RoboMaster SDK 解读(TT无人机) RoboMaster
https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html 注意:要在code中使用任何文件系统功能,请在草图中添加以下内容: // 闪存上的文件系统开销也最小。 ? 一个是lib库 一个是shell的包装库 一个是控制库 一个是游戏手柄控制的库 值得一提的是,这个文件就是所谓的原厂固件 ? shell的头文件 ? 这里打开的时候是注释状态,所以这里是个调试开关 https://www.cnblogs.com/youngforever/articles/3169629.html __FILE__,__LINE__ 都是与定义的宏,使用_和 __开始的函数一般都是专用的函数,一般都是于特定系统相关的,如果要想有更好的移植性,应该避免使用。 双击的间隔时间是 500 https://www.dji.com/cn/robomaster-tt/downloads ? 这里我打开一个tof的demo ? serial串口配置 ?
接下来的文章就是由我收集到的这些资料,加入自己的测试与理解做一些对无人机的解读,文章来源于官网,博客简书等.如有侵权,后台滴滴我~~~~~~~~~ ? 这个图是大疆官网的图,首先看的出来颜色真的太亮眼了,还有一个突兀的灰色东西,包括一个常见的飞机浆保护罩 https://www.dji.com/cn/robomaster-tt? 看见这个芯片没有 https://wireless.murata.com/type1gc.html ? 就是一个射频芯片 ? 也就是所谓的这个新增的5.8G模块 ? ? 我pdd买了秤,回来进行沉重,为后期改装做研究 这个飞机接口还有数据传输的功能(因为可以被扩展件传输数据) ? 电脑插上以后有反应 ? 这个地方是ESP32 的蓝牙串口 ? 这就是TT的驱动 ? ? 保养建议 https://www.dji.com/cn/robomaster-tt/faq ? 这个有待商榷
这个函数很明了,作用就是等待TT的初始化完成,以收到ok串结束生命 ? 首先是I2C的总线初始化,27和26脚 下面的串口是连接TT的串口,里面的参数是重映射,具体看上个文章 ? 使用了一个串的比较函数 https://www.runoob.com/cprogramming/c-function-strncmp.html ? http://blog.sina.com.cn/s/blog_bcaa53900102vbtv.html ---- 这个地方就是一种log的形式了,将这个飞机传回来的strings,通过Serial这个串口发送到 https://www.w3cschool.cn/arduino/arduino_delay_function.html 串口的问题不会再详细的写了,再写就是一些操作的细节问题了。 读懂了这些我们就可以拥有自己的扩展模块了,改造TT的日子快来咯~
我们上篇文章完成了对TT下视摄像头的测试,以及相应的使用了内置的RC指令,完成了对飞行器的实时控制。 ? 具体的RC参数含义在这里 ---- 这篇文章我们来分析完成无人机的巡线操作需要的一个大致的流程。 我们的TT是一个高度精密的电子设备,所以控制它自己动起来需要很多不同领域的知识才可以,以下的思维导图呈现了我们TT在巡线任务中涉及到的各种知识。 ? 然后稳定输出 会捕获到一些视频流的信息,做参考用。 ? 预览画面 ---- 如果不想频繁的将PC的wifi断开去连TT的话,推荐使用路由器来进行连接。 easytello是封装的简易版TT支持包,优点在于写法简洁,视频可以用cv2的标准接口读取 一款合适的编辑器,可以完成对项目的管理,代码的自动补全,debug等,使用自己喜欢的就好。
我们现在为止已经获得处理好的二值化图像了,接着就是提取线的特征了。 ? 这里我们插一个小细节,就是图像的方向不对 ---- 怎么处理? 可能最牛逼的做法就是,飞机横着飞了,相对的图像就正了。 我们这里用的算法是边缘检测算法 找到目标像素点的个数 记录对应目标像素点的索引(位置) 接着去把中心白线数值输出,接着与标准中心做差 得到的误差作为指导TT控制飞行的变量 def get_line_pos 我们要用到简单的PID控制:完成对TT的控制,但是我们还需要一些关于飞行器飞行时的姿态描述. ? 最后将实时的运动指令发给飞行器 ? 第一个函数是从主机发送命令给TT ? 只是第二个函数的使用参数表 ? 发送函数的使用就是这样,直接发送命令字符串 注意中间的延时,是用来让机器进入稳定状态的。 模式,这样电脑可以一边上网一边调试 在station模式下,记得在代码中指定TT的IP地址 在实地飞行的时候一定要保证地面不反光,且拥有丰富的纹理 保证循迹线与周围的地表具有强烈的颜色反差,最好是处于色轮相对位置的颜色
这边选择mPy,会自动上传安装mPy的固件 ? 可以看到tt扩展件内部有什么 ? 这边也可以从本地来加载二进制的固件 ? 可以看到文件后缀是bin文件 ? 这边有几个二进制文件 ? 这个地方也可以看到固件的版本,是0.0.1. ? 我这边把编译的文件给抽取出来做一些分析 ? 按照目录我们来分析,第一个就是我们TT自己的支持库 ? 这里是GitHub的忽略文件,可以看到.这个库是用vscode写出来的 ? 第二个目录是蓝牙的功能 ? 可以从readme里面跳转到这个开源的库里面 https://github.com/nkolban/esp32-snippets ? 我们打开一个关于文件系统的代码片段 ? ? 里面自带的两份pdf文件 ? 单总线的库 ? 可以看到这个库可以用到哪些开发板的编译,这里是全部支持esp32的 ? 头文件缩起来的样子
这篇写一些之后需要改进的地方: 图像算法不会再用简单的边缘算法了,会使用快速回归算法来拟合赛道。 我正在将openmv中的相关函数转换为通用的Python接口 在控制方面会使用完整的PID控制,相关的工作已经完成,下个版本发布 将控制端移植到树莓派和Jetson上,树莓派手头只有B+的型号,有需要移植的同学可以赞助哦 (有硬件才考虑写,不想云体验>.<) 控制界面用GUI来写,可以自定义赛道识别的颜色,赛道的宽度和曲率等 在多场景下做足够多的测试,增强程序的鲁棒性 集成更多的识别条件,使飞行器飞行更平稳 会将识别+控制开源 ,使更多人来完善 还是想感慨一下,学习最快的方式还是有明确的需求,这样才能够有足够驱动力去完成。 当然现在的学生的学习条件是真的好,毕竟在我小学的时候,拥有一台电脑真的很奢侈的一件事情,但是现如今的孩子们都在学习各种机器人的技术,真的是发展飞快。
一种是station模式,就是TT会接入到一台路由器里面,看下面的示意图 ? 优点首先是不会断开主机的网络,而且支持多个TT接入。缺点是在编码时需要指定对应机器的IP地址。 我们这里用的算法是边缘检测算法 找到目标像素点的个数 记录对应目标像素点的索引(位置) 接着去把中心白线数值输出,接着与标准中心做差 得到的误差作为指导TT控制飞行的变量 def get_line_pos 我们要用到简单的PID控制:完成对TT的控制,但是我们还需要一些关于飞行器飞行时的姿态描述. ? 最后将实时的运动指令发给飞行器 ? 第一个函数是从主机发送命令给TT ? 只是第二个函数的使用参数表 ? 发送函数的使用就是这样,直接发送命令字符串 注意中间的延时,是用来让机器进入稳定状态的。 模式,这样电脑可以一边上网一边调试 在station模式下,记得在代码中指定TT的IP地址 在实地飞行的时候一定要保证地面不反光,且拥有丰富的纹理 保证循迹线与周围的地表具有强烈的颜色反差,最好是处于色轮相对位置的颜色
TT扩展件microPython实现.1,这个是上篇,下面是下篇 ? blog.csdn.net/weibo1230123/article/details/82817006 https://www.cnblogs.com/benio/archive/2010/10/25/1860394.html https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html 大致说明如下: 在编译C、Ada源文件(C++也可以),在gcc/g+ 这些是TT的编译库 c:\program files (x86)\mind+\arduino\static\hardware\dfrobot\mpython\libraries\ble\telloesp32 正常情况,链接的时候库文件只会按它们出现在命令行的顺序搜索一遍,如果包里有未定义的引用标号,而且该包还被放在命令行的后面,这样链接器就无法解决该标号的引用问题。
今天分享一个非常重要的命令tt,全称是TimeTunnel,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。 (下)从大概功能上比较相似,区别在于watch如果想发挥足够的排查作用,必需熟练掌握ognl语法,特别是高级语法这样才能从大量的请求中筛选出来自己想要的,tt命令相对简单,而且还支持录制、重放功能,可以说非常强大 在arthas运行的过程中,经过tt命令保存的方法都是可以重放的。 OBJECT 执行对象的hashCode() CLASS 执行的类名 METHOD 执行的方法名 这里有个问题视频中未讲明白,hashcode()方法得到的是对象在JVM中内存地址的映射。 arthas命令tt方法时空隧道 Demo代码 package com.fun; import com.alibaba.fastjson.JSONObject; import com.fun.frame.httpclient.FanLibrary
天天会用到object的这个单词,让我们看看它的意思有多丰富 ? 我们先看这个,是包含在机器人里面的飞行类,按照这个思路还有船 这里是传一个浮点的量,后面有相应的参数范围,加了一个重发的模块 ? 实时的控制方向的命令 ? 注意你观看飞机的视角,旋转方向会不一样 ? 控制飞行额度,单位是厘米 ? 悬停的命令,也是经常用的 ? ? 这两个做一些自动调控的时候可以考虑,平时用的不多 ? 最后是两个取消 对于飞行器来说,我关注的就是这些东西~
感谢小马的美图 这个Mind+中有支持TT扩展件MicroPython实现,今日做个整理以及有一些实验要做: from machine import * from RMTTLib import * ) # 设置按下的对应的IO脚 uart1 = UART(1, baudrate=1000000, tx=18, rx=23) # 飞行控制的按钮,就是摁下按钮开始进入command模式 # 使用的是 ): pass # 这个代码是如何来判断TT的按键有没有按下,是用来开启机器的关键 def getTelloMsgString(self, cmd, timeout): while ,参数是串口 while not ((p34.value() == 0)): pass # 这个代码是如何来判断TT的按键有没有按下,是用来开启机器的关键 def getTelloMsgString 这个数据是不停的更新的,上面的命令相当于一个读取频率# 然后用print语句来打印相关的information。读取这个信息来做一写动作 ? ? ? 可以读取这些
https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/RM-TT/RoboMaster%20TT%20Arduino%20IDE% #define RMTT_I2C_SDA 27 #define RMTT_I2C_SCL 26 这是TT的引脚 引脚具体 在Lib头文件被定义 这里为I2C写了一对锁 https://www.wenjiangs.com /doc/33ymb7sv 宝藏网站附上 RTOS的中文文档 这个是按钮占用的IO口 在这里 #define RMTT_KEY_PIN 34 TT的按钮 看这个飞行控制功能 /*! /downloads/RoboMaster%20TT/Tello_SDK_3.0_User_Guide_cn.pdf SDK里面指明的通信方式 内置的通信串口1,串口0是下载程序什么的 可以看到内部确实是用串口 大部分都是1,3是串口0 这里是是用的18 23 这里找到一个也是18 和 23 这是TT的demo,可以看到到处这个初始化的写法 发送命令的函数 HardwareSerial(int
群内大佬(真大佬,TT源泉)发了几份文件,我打开看了一下感觉有必要写写欸~ 抱歉。。。我文章太过久远,不完整了。 一个是巡线,一个是抓取功能,就解读这两个就好。 文档内的文件是个mind+的文件,这个积木有点多,不知道谁写的 因为用到了robomaster的库,这里也就下载下来一并看。 ,传入一个字符串的a,因为这个是rob的库函数,这里就去找这个函数的位置看看。 块钱的板子,串口,I2C,SPI引脚 这是C3的引脚 你看这里的A->D的转换 这些引脚对于不同的芯片来讲不一样,是用数组定义的 我们看看这个例子 这是ESP32里面的定义 ESP32延时的函数定义 ,是有技术含量的 里面的一些定义,一层层的包装 定义三个灯的引脚 设置我们的灯 函数的实现 一参数引脚,二参数,chan?
还记得我们说的读取上次的状态吗,这个就是所有上次的状态 print(protocol.getTelloStatusWithName("temph")) print(protocol.getTelloMsgInt 死循环的话就是不停的发送里面的命令,此处我们需要发送俩类: 发给TT本身的 发给扩展件的 ? 发送给TT的命令,又分为两种: 发送成功的 发送失败的 ? 这里是一段读取失败的处理代码 先最一开始获取从开机到现在的时间,内部是目前的运行时间 如果这个差大于1000ms,就是继续发送命令。接着把时间位更新 ? ,1000)) 这个命令是查询TT的SN,下面是接收的函数 String RMTT_Protocol::getTelloMsgString(char *cmd, uint32_t timeout) { 如果就用积木的话 而且看库的导入情况,只用用到了自身的库
文档服务(DS)由腾讯云数据万象提供,支持多种类型的文件生成图片或 html 格式的预览,可以解决文档内容的页面展示问题,满足多端的文档在线浏览需求。同时,还提供文本隐私筛查能力,可以有效识别文本中的身份证号、手机号等敏感数据,满足数据可用性和隐私保护的各种要求。
扫码关注云+社区
领取腾讯云代金券