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过程会有的算子)、TransposeCastReshape等。

  • 以性能最高的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 的板子真的非常好用,还在慢慢摸索更多功能哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins使用cli发行uni-app到h5

官网文档HBuilderX 文档 首先确定是否存在环境变量 正常情况cmd中执行cli 如果提示 cli 不是内部或外部命令,也不是可运行的程序或批处理文件。请先配置环境变量 Freestyle Project项目在Build Steps中增加Execute Windows batch command命令如下 d: cd D:\devsof…

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND有很多型号,在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器实现的SD卡。具有强大的坏块管理和纠错功能,并且在意外掉电的情况下同样能保证数据的安全。 其特点如下&…

【Java语言】String类

在C语言中字符串用字符可以表示,可在Java中有单独的类来表示字符串(就是String),现在我来介绍介绍String类。 字符串构造 一般字符串都是直接赋值构造的,像这样: 还可以这样构造: 图更能直观的…

【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的局部指标(二)

前言 1.学习背景 前几天笔者学习使用NSP (Network Segregation and Partnership) 算法计算大脑整合分离的全局指标,现在要在之前学习的基础上再来玩玩局部指标。 局部指标的计算主要在两个层面上进行:第一个层面是针对每个独立ROI的指标计算&#xff0…

WPF-控件的属性值的类型转化

控件的属性值需要转成int、double进行运算的&#xff0c;可以使用一下方法 页面代码 <StackPanel Margin"4,0,0,0" Style"{StaticResource Form-StackPanel}"> <Label Content"替换后材料增加金额&#xff…

Python3.11.9下载和安装

一、Python3.11.9下载和安装 1、下载 下载地址&#xff1a;https://www.python.org/downloads/windows/ 选择版本下载&#xff0c;例如&#xff1a;Python 3.11.9 - April 2, 2024 2、安装 双击exe安装 3、配置环境变量 pathD:\Program Files\python3.11.9 pathD:\Progr…

大模型学习笔记------BLIP模型的再思考

大模型学习笔记------BLIP模型的再思考 1、BLIP推理---如何进行“图生文”2、BLIP推理---如何进行视觉问答&#xff08;Visual Question Answering, VQA&#xff09;3、BLIP推理---如何进行图文检索&#xff08;Image-text retrieval&#xff09;任务4、总结 上一篇文章上文中讲…

超全面!一文带你快速入门HTML,CSS和JavaScript!

作为一名后端程序员&#xff0c;在开发过程中避免不了和前端打交道&#xff0c;所以就要了解一些前端的基础知识&#xff0c;比如三剑客HTML,CSS,JavaScript&#xff0c;甚至有必要学习一下Vue、React等前端主流框架。 学习文档&#xff1a;https://www.w3school.com.cn/ 一…

PcVue + SQL Grid : 释放数据的无限潜力

探秘PcVue系列&#xff1a;E3 PcVue SQL Grid : 释放数据的无限潜力 探秘PcVue之SQL 什么是SQL Grid&#xff1f; SQL Grid用于通过简单的sql查询语句&#xff0c;实现数据的查询和显示。结构化查询语句&#xff08;SQL&#xff09;可以帮助SCADA软件用户提高连接性以及发送和…

使用 Umami 部署博客分析工具

Umami 简介 Umami 是一款开源且注重隐私的网站分析工具&#xff0c;可替代 Google Analytics。它提供网站流量和用户行为等见解&#xff0c;但不使用 Cookie 或收集个人数据&#xff0c;符合隐私法规。Umami 轻巧易用&#xff0c;可自行托管。 如果你有自己的博客&#xff0c;…

Flink_DataStreamAPI_执行环境

DataStreamAPI_执行环境 1创建执行环境1.1getExecutionEnvironment1.2createLocalEnvironment1.3createRemoteEnvironment 2执行模式&#xff08;Execution Mode&#xff09;3触发程序执行 Flink程序可以在各种上下文环境中运行&#xff1a;我们可以在本地JVM中执行程序&#x…

数据结构——排序(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

MongoDB在现代Web开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 引言 MongoDB 概述 定义与原理 发展…

CSS的综合应用例子(网页制作)

这是html的一些最基本内容的代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <t…

【设计模式】行为型模式(二):策略模式、命令模式

行为型模式&#xff08;二&#xff09;&#xff1a;策略模式、命令模式 3.策略模式&#xff08;Strategy&#xff09;3.1 示例3.1.1 定义策略接口3.1.2 实现具体策略3.1.3 定义上下文类3.1.4 客户端代码3.1.5 输出结果 3.2 总结3.2.1 优点3.2.2 缺点 4.命令模式&#xff08;Com…

rocketmq——docker-compose安装

rocketmq安装 创建文件夹&#xff0c;这里我们分别部署namesrv和broker 1、namesrv.conf listenPort98762、broker.conf # 所属集群名字 brokerClusterNameDefaultCluster # broker 名字&#xff0c;注意此处不同的配置文件填写的不一样&#xff0c;如果在 broker-a.propert…

OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。 实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C+…

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…

字符串处理指南:Air780E软件的全新视角

今天我会把 Air780E软件的字符串处理详细解析&#xff0c;指南如下&#xff1a; 1、Lua字符串介绍 关于字符串&#xff0c;Lua提供了一些灵活且强大的功能&#xff0c;一些入门知识如下&#xff1a; 1.1 字符串定义 在Lua中&#xff0c;字符串可以用单引号或双引号"来定…

C/C++语言 多项式加法和乘法

多项式加法和乘法 多项式的加法题目描述输入输出样例步骤代码段全局变量设定新建结点合并链表 完整代码 多项式乘法题目描述输入输出样例代码段计算两多项式结果输入 完整代码 多项式的加法 题目描述 输入输出 样例 步骤 总体思想是用链表来做 ① 我们发现输入样例中&#xf…