Robot | 用 RDK 做一个小型机器人(更新中)
目录
- 前言
- 架构图
- 开发过程
- 摄像头
- 模型转换
- 准备校准数据
- 使用 `hb_mapper makertbin` 工具转换模型
- 底版开发
- 结语
前言
最近想开发一个小型机器人,碰巧看到了 RDK x5 发布了,参数对于我来说非常合适,就买了一块回来玩。
外设也是非常丰富,机器人开发的接口都是有的
板子实物非常好看哈哈:
架构图
机器人大概的框架是这样的,也算比较简单的,也是比较入门的架构。
-
视觉:摄像头作为图形输入端,采集外部的图像,让机器人有一双眼睛,在 RDK x5 的板子上使用加速引擎对视觉模型进行部署,速度 25 fps 完全没有压力,
-
运动: 运动的主控主要是交给 STM32F103 ,其负责底部电机还有小型液晶屏的显示交互。
开发过程
下面重点讲解下开发的过程,主要涉及以下几点:
- 摄像头
- YOLO 量化部署
- 底版开发
摄像头
我用的摄像头是 MIPI 摄像头,简单说下 MIPI 摄像头的原理
MIPI:移动产业处理器接口(Mobile Industry Processorinterface) 是MIPI联盟发起的为移动应用处理器制定的开放标准。
更多细节见 MIPI官网
MIPI摄像头的工作原理主要包括以下几个步骤:
- 数据传输:MIPI接口支持高速、低延迟的数据传输,确保相机捕获的图像和视频数据能够迅速且准确地传输到主处理器(如应用处理器)进行处理1。
- 协议支持:CSI(Camera Serial Interface)是关键协议,定义了相机传感器与处理器之间如何交换图像数据1。
- 同步与控制:同步信号和控制信号的传输确保相机与处理器之间的同步操作,并允许处理器对相机进行配置和控制,如调整曝光时间、增益等参数1。
- 图像处理:处理器接收到来自MIPI相机的原始图像数据后,会进行一系列图像处理操作,如去噪、色彩校正、图像压缩等,以生成最终可供显示或存储的图像1。
MIPI接口的特点和优势:
- 优化功耗:MIPI接口通过低压差分信号传输,降低了功耗,提高了设备的续航能力2。
- 高速传输:数据传输速率可以达到Gbps级别,满足了IT领域对高速数据传输的需求2。
- 减少引脚数:采用串行通信方式可以大幅减少物理接口数量,同时提高数据传输的速率和效率3。
- 差分信号传输:有效地减少了电磁干扰(EMI)对信号质量的影响,提高了信号传输的稳定性和可靠性3。
- 多种通信协议:支持多种通信协议,可以根据需求进行选择和定制,具有较高的灵活性2。
MIPI接口在移动设备中的应用
MIPI接口广泛应用于智能手机、平板电脑、可穿戴设备等移动设备的摄像头、显示屏、存储和其他外设与主处理器之间的连接。通过优化数据传输速率、功耗和物理连接等方面的设计,MIPI接口使得移动设备能够搭载更高性能的相机系统,从而提供更出色的拍照和录像体验1。
在 RDK x5 上使用 MIPI 摄像机非常简单, RDK x5 文档如下;
RDK相机驱动的逻辑:
模型转换
因为我的项目需要微调 YOLO,训练好之后,将 pth -> onnx -> ptq -> bin 然后直接部署就可以了。
微调过程这里不展开讲了,有兴趣的同学可以参考我的博文:《 深度学习实战 | 智慧工地安全帽和危险区域检测系统(代码已开源!) 》 ,里面会从数据集准备到微调全链路覆盖讲解,非常详细。
每款芯片都有自己的推理引擎,例如 英伟达的 TensorRT,瑞芯微的 RKNN,高通的 SNPE,RDK x5 也有自己的推理引擎,我们需要完成浮点模型到 D-Robotics 混合异构模型的转换,经过这个阶段,我们将得到一个可以在D-Robotics 处理器上运行的模型。
模型转换使用 hb_mapper makertbin
工具完成,转换期间会完成模型优化和校准量化等重要过程,校准需要依照模型预处理要求准备校准数据。 为了方便您全面了解模型转换,本节将依次介绍校准数据准备、转换工具使用、转换内部过程解读、转换结果解读和转换产出物解读等内容。
准备校准数据
在进行模型转换时,校准阶段会需要 100份左右 标定样本输入,每一份样本都是一个独立的数据文件。 为了确保转换后模型的精度效果,我们希望这些校准样本来自于您训练模型使用的 训练集或验证集 ,不要使用非常少见的异常样本,例如 纯色图片、不含任何检测或分类目标的图片等。
转换配置文件中的 preprocess_on
参数,该参数启用和关闭状态下分别对应了两种不同的预处理样本要求。 preprocess_on
关闭状态下,我们需要把取自训练集/验证集的样本做与模型推理(inference)前一样的前处理, 处理完后的校准样本会与原始模型具备一样的数据类型( input_type_train
)、尺寸( input_shape
)和 layout( input_layout_train
),对于 featuremap
输入的模型,可以通过 numpy.tofile
命令将数据保存为float32格式的二进制文件, 工具链校准时会基于 numpy.fromfile
命令进行读取。 例如,YOLOv5 训练的用于分类的原始浮点模型,它只有一个输入节点,输入信息描述如下:
- 输入类型:
BGR
- 输入layout:
NCHW
- 输入尺寸:
1x3x640x640
使用验证集做模型推理(inference)时的数据预处理如下:
图像长宽等比 scale, 并缩放到 32 的倍数,如果不足 32 则用 144,144,144
的 pad 补齐。
使用 hb_mapper makertbin
工具转换模型
hb_mapper makertbin
提供两种模式,开启 fast-perf
模式和不开启 fast-perf
模式。
fast-perf
模式开启后,会在转换过程中生成可以在板端运行最高性能的bin模型,工具内部主要进行以下操作:
-
将BPU可执行算子尽可能运行在BPU上(RDK X5 则可以通过yaml文件中node_info参数指定在BPU上运行的算子)。
-
删除模型首尾不可删除的CPU算子,包括:
Quantize/Dequantize
(QAT过程会有的算子)、Transpose
、Cast
、Reshape
等。 -
以性能最高的O3优化等级编译模型。
hb_mapper makertbin
命令使用方式如下:
不开启 fast-perf 模式:
hb_mapper makertbin --config ${config_file} \--model-type ${model_type}
开启 fast-perf 模式:
hb_mapper makertbin --fast-perf --model ${caffe_model/onnx_model} --model-type ${model_type} \--proto ${caffe_proto} \--march ${march}
底版开发
底盘开发主要是 STM32F103 使用 软件 I2C 好 舵机控制版通信,舵机控制板会控制 3个舵机的运动,主要是让摄像头始终跟随某个物体使用的。
底板的 STM32 和控制板 RDK x5 只要是用串口通信的,整个协议也比较简单,这里不做过多的阐述了。
结语
好啦,以上就是我用 RDK x5 做的小机器人,后续我会持续更新,感谢大家看到这里。RDK x5 的板子真的非常好用,还在慢慢摸索更多功能哈哈。
相关文章:
Robot | 用 RDK 做一个小型机器人(更新中)
目录 前言架构图开发过程摄像头模型转换准备校准数据使用 hb_mapper makertbin 工具转换模型 底版开发 结语 前言 最近想开发一个小型机器人,碰巧看到了 RDK x5 发布了,参数对于我来说非常合适,就买了一块回来玩。 外设也是非常丰富…...
数据结构与算法——1120——时间空间效率问题求边界值
目录 1、效率问题 1、时间复杂度 1、O(1) 2、O(n) 3、O(n) 或O(n*log2n)——n倍的log以2为底n的对数 例题 4、O(n) 2、空间复杂度 3、数组和链表 2、面试题之求边界值 题目 解答 (1)-i (2)~i (3&#x…...
HTML通过JavaScript获取访问连接,IP和端口
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…...
TCP vs UDP:如何选择适合的网络传输协议?
在网络通信中,TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种非常重要的传输层协议。它们各有特点,适用于不同类型的应用场景。本文将详细探讨TCP和UDP协议的结构、优缺点及应用&…...
学习QT第二天
QT6示例运行 运行一个Widgets程序运行一个QT Quick示例 工作太忙了,难得抽空学点东西。-_-||| 博客中有错误的地方,请各位道友及时指正,感谢! 运行一个Widgets程序 在QT Creator的欢迎界面中,点击左侧的示例…...
递归算法专题一>Pow(x, n)
题目: 解析: 代码: public double myPow(double x, int n) {return n < 0 ? 1.0 / pow(x,-n) : pow(x,n); }private double pow(double x, int n){if(n 0) return 1.0;double tmp pow(x,n / 2);return n % 2 0 ? tmp * tmp : tmp …...
利用Python爬虫获取商品评论:技术与实践
在当今这个信息爆炸的时代,互联网上充斥着海量的数据。对于电商平台来说,用户评论是了解消费者喜好、优化产品策略的重要依据。Python作为一种强大的编程语言,其丰富的库支持使得爬虫技术成为获取这些数据的有效手段。本文将详细介绍如何使用…...
python之使用django框架开发web项目
本问将对django框架在python的web项目中的使用进行介绍,有不对之处,烦请指正。 首先使用创建一个django工程(本示例中使用pycharm2024+python3.12),名称和项目保存路径根据自己的需要自行修改,新手直接默认本机环境就好(关于conda将会另开一篇进行讲解。),最后点击cre…...
当产业经济插上“数字羽翼”,魔珐有言AIGC“3D视频创作大赛”成功举办
随着AI技术的飞速发展,3D数字人技术已成为驱动各行各业转型升级的重要力量。在这一背景下,2024山东3D数字人视频创作大赛应运而生,并在一番激烈的角逐后圆满落幕,为科技与创意的交融写下浓墨重彩的一笔。 11月20日,一…...
设计模式之策略模式
背景:导入功能需要做成根据编码code或者名称实现不同的导入逻辑,编码和名称都是可配置的,未知的变化,这里要写通用的导入、校验和具体的导入、校验。至此我想到采用设计模式之策略模式工厂模式实现此需求。若有不妥还望指正。 自…...
/etc/sudoers 文件格式解读
文章目录 例如 /etc/sudoers 文件中存在这样一行: ubuntu ALL(ALL:ALL) NOPASSWD: ALL 解释如下: 1. 第一个表示用户名,这意味着此行规则适用于名为 ubuntu 的用户。 2. 接下来等号左边的 ALL 表示允许从任何主机登录当前的用户账户…...
Linux虚拟机网络配置
Linux固定IP 跳转到 cd /etc/sysconfig/network-scripts/ 打开文件并编辑 vim ifcfg-ens33 增加或修改选中内容 重启网卡 systemctl restart network ifconfig -a 查看ip已固定 虚拟机网络编辑器调整 子网IP进行修改,例如本机IP修改为10.212.197.34 此处就修改…...
C++模版特化和偏特化
什么是模版特化 特化的含义:所谓特化,就是将泛型搞得具体化一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰(例如const或…...
17. 指针类型和步长概念问题
1. 项目场景: ➣ Jack Qiao对米粒说:“今天有道友遇到一个问题,举个栗子数组 arr[5] { 0 };道友发现&arr[0] 1与&arr 1打印出来的地址竟然不同。”米粒测试后果然是这样。 2. 问题描述 ☑ 举个栗子:数组 arr[5] { 0…...
如何自动下载和更新冰狐智能辅助?
冰狐智能辅助的版本更新非常快,如果设备多的话每次手工更新会非常麻烦,现在分享一种免费的自动下载和安装冰狐智能辅助的方法。 一、安装迅雷浏览器 安装迅雷浏览器1.19.0.4280版本,浏览器用于打开冰狐的官网,以便于从官网下载a…...
C# 数据结构之【队列】C#队列
1. 描述 队列:队列遵循先进先出(FIFO)原则,在一端进行插入操作,在另一端进行删除操作。 2. 应用示例 using System;namespace DataStructure {class Program{static async Task Main(string[] args){// 创建一个队列…...
Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
HTML+CSS网页模板,左侧导航,右侧内容,顶部LOGO
网页顶部是网站名称和LOGO,左侧是菜单导航,点击菜单,右侧显示内容。HTMLCSS代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"…...
Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的(面试) 上文介绍reids的安装以及基本概念,本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对(KEY - VALUE)存储的…...
Spring AOP
目录 1.AOP概述 2.Spring AOP快速实现 3.Spring AOP核⼼概念 编辑 3.1切点(Pointcut) 3.2连接点(Join Point) 3.3通知(Advice) 3.4切⾯(Aspect) 4.通知类型 5.PointCut 6.切⾯优先级 Order 7.annotation 1.AOP概述 (1)什么是AOP…...
SIMD AVX2 向量计算
_mm256_fmadd_ps: 能够在单个操作中执行乘法和加法,从而提高浮点计算的精度和性能。_mm256_sub_ps : Intel Advanced Vector Extensions (AVX) 指令集中用于从两个 AVX 寄存器中逐元素进行单精度浮点数减法的内联函数。这个函数允许同时对 8 个单精度浮点数进行减法…...
clipboard
clipboard 现代复制到剪贴板。无闪光。只有 3kb 的 gzip 压缩。 安装 npm install clipboard --save第三方cdn提供商 <script src"https://cdn.jsdelivr.net/npm/clipboard2.0.11/dist/clipboard.min.js"></script>使用 data-clipboard-target"…...
【JavaEE进阶】 JavaScript
本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名,…...
python程序的编写以及发布(形象类比)
最近重新接触python,本人之前对于python的虚拟环境,安装包比较比较迷惑,这里给出一个具象的理解。可以将 Python 程序运行的过程类比成一次 做菜的过程,从准备食材到最后出锅。以下是具体的类比步骤: 1. 安装 Python 环…...
游戏引擎学习第20天
视频参考:https://www.bilibili.com/video/BV1VkBCYmExt 解释 off-by-one 错误 从演讲者的视角:对代码问题的剖析与修复过程 问题的起因 演讲者提到,他可能无意中在代码中造成了一个错误,这与“调试时间标记索引”有关。他发现了一个逻辑问题…...
大数据面试题每日练习--HDFS是如何工作的?
HDFS(Hadoop Distributed File System)是一个分布式文件系统,设计用于存储非常大的文件。它的主要工作原理如下: NameNode:管理文件系统的命名空间,维护文件目录树和文件元数据信息。NameNode记录每个文件…...
高质量 JavaScript
高质量的 JavaScript 非常重要。它能够提升代码的可读性,让其他开发者可以轻松理解代码意图,减少沟通成本和维护难度。同时,合理的代码结构和正确的语法运用能够避免许多潜在的错误和性能问题,例如通过正确处理异步操作来防止程序…...
小白投资理财 - 解读威廉分形指标 Williams Fractals
小白投资理财 - 解读威廉分形指标 Williams Fractals WF 指标WF 的使用止损支撑和阻力 WF 缺点WF 组合使用WF EMAWF 和趋势线 WF 周期设定总结 你有看过这种情况吗?它能够准确的让你知道高点和低点,而且每次都能够完美的预测到反转的信号,其…...
五天SpringCloud计划——DAY2之使用Docker完成项目的部署
一、引言 刚刚学完了Docker的使用,现在知识在脑子里面还是热乎的,是时候把它总结一下了。 现在的我认为Docker时一个部署项目的工具(不知道是不是真的),相比于我以前使用宝塔面板部署项目,使用Docker更能让我看到代码之美,怎么一…...
HarmonyOS4+NEXT星河版入门与项目实战(11)------Button组件
文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…...
oracle的静态注册和动态注册
oracle的静态注册和动态注册 静态注册: 静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 , 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册,在动态注册不稳定时使用,特点是:稳定&…...
【系统架构设计师】真题论文: 论软件可靠性设计技术的应用(包括解题思路和素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2013年 试题3)解题思路论文素材参考软件可靠性设计技术概念主要的软件可靠性设计技术软件可靠性设计技术的应用流程真题题目(2013年 试题3) 随着软件的日益普及,系统中软件成分不断增加,使得系统对…...
网络运输层之(1)TCP连接管理
网络运输层之(1)TCP连接管理 Author: Once Day Date: 2024年10月22日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客…...
基于阿里云服务器部署静态的website
目录 一:创建服务器实例并connect 二:本地文件和服务器share 三:关于IIS服务器的安装预配置 四:设置安全组 五:建站流程 六:关于备案 一:创建服务器实例并connect 创建好的服务器实例在云…...
Git项目管理
Git项目管理 分区概念:创建本地仓库查看当前仓库的状态工作区添加到暂存区暂存区恢复到工作区工作区提交到本地仓库查看提交日志版本回滚查看版本变更的所有记录分支查看分支创建分支删除分支切换分支合并分支 冲突解决HEAD指针分支使用的一般规范masterdevelopfeat…...
实践指南:EdgeOne与HAI的梦幻联动
在当今快速发展的数字时代,安全和速度已成为网络服务的基石。EdgeOne,作为腾讯云提供的边缘安全加速平台,以其全球部署的节点和强大的安全防护功能,为用户提供了稳定而高效的网络体验。而HAI(HyperApplicationInventor…...
OmniDiskSweeper :一款专为 macOS 设计的磁盘使用分析工具
OmniDiskSweeper 是一款专为 macOS 设计的磁盘使用分析工具,由 The Omni Group 开发。它的主要目的是帮助用户可视化磁盘上的文件和文件夹,并找出占用大量空间的文件,从而帮助用户释放磁盘空间。 OmniDiskSweeper 的特点包括: 简…...
【Git】:Git基本操作
目录 创建、配置本地仓库 创建本地仓库 配置本地仓库 认识工作区、暂存区、版本库 修改文件 版本回退 撤销修改 删除文件 创建、配置本地仓库 创建本地仓库 我们通常可以通过以下两种方式之一获取 Git 存储库: 自己在本地目录创建一个本地仓库 从其它服务…...
C++设计模式:建造者模式(Builder) 房屋建造案例
什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…...
由于centos停更,yum、docker等不支持,采用阿里云仓库搭建K8S
一:准备 服务器信息主机名IP地址Centos7.9node1-master192.168.35.130Centos7.9node2192.168.35.131 # 查看系统版本 cat /etc/centos-release # 查看内核版本 uname -sr二:服务器前置操作 每个节点都需要操作 #使用 hostnamectl set-hostname设置主机…...
cocos creator 3.8 一些简单的操作技巧,材质的创建 1
这是一个飞机的3D模型与贴图 导入到cocos中,法线模型文件中已经包含了mesh、material、prefab,也就是模型、材质与预制。界面上创建一个空节点Plane,将模型直接拖入到Plane下。新建材质如图下 Effect属性选择builtin-unlit,不需…...
下载安装Android Studio
(一)Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english 
随着人口老龄化进程的加速,摔倒事故逐渐成为威胁老年人健康和安全的主要问题之一。研究表明,摔倒不仅可能导致老年人骨折、头部受伤等严重的身体损伤,还可能引发心理恐惧和行动能力下降,从而降低其生活质量和独立性。如何快速、准…...
C++特殊类设计(不能被拷贝的类、只能在堆上创建对象的类、不能被继承的类、单例模式)
C特殊类设计 在实际应用中,可能需要设计一些特殊的类对象,如不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类、只能创建一个对象的类(单例模式)。 1. 不能被拷贝的类 拷贝只会发生在两个场景…...
Javaweb前端HTML css 整体布局
最后一个是线条颜色 盒子,整体还是300,400...
数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall
数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 贵在坚持! 数据样例项目地址: * 相关项目 1)数据集…...
【从零开始的LeetCode-算法】3297. 统计重新排列后包含另一个字符串的子字符串数目 I
给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新排列后,word2 是重排字符串的 前缀,那么我们称字符串 x 是 合法的 。 请你返回 word1 中 合法 子字符串的数目。 示例 1: 输入:word1 "bcca", word2 "…...
【Redis_Day5】String类型
【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…...