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.rhkb.cn/news/477438.html

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

相关文章

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展,保持应用程序的更新是必不可少的,这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示,适合刚入行的小白。我们将分步骤进行说明,每一步所需的代码及其解释都会一一列出…

软件工程导论 选填题知识点总结

一 原型化方法是一种动态定义需求的方法,提供完整定义的需求不是原型化方法的特征,其特征包括尽快建立初步需求、简化项目管理以及加强用户参与和决策。 软件危机的表现包括用户对已完成的软件系统不满意的现象经常发生、软件产品的质量往往靠不住、软件…

软件测试面试之常规问题

1.描述一下测试过程 类似题目:测试的生命周期 思路:这是一个“范围”很大的题目,而且回答时间一般在3分钟之内,不可能非常详细的描述整个过程,因此答题的思路要从整体结构入手,不要过细。为了保证答案的准确性,可以引…

Linux|内存级文件原理

目录 进程与文件 Linux下的文件系统 文件操作,及文件流 C语言函数 文件流 文件描述符 系统调用操作 系统调用参数 重定向与文件描述符 输出重定向 输入重定向 文件内容属性 Linux下一切皆文件 进程与文件 当我们对文件进行操作时,文件必须…

洛谷 P1722 矩阵 II C语言 记忆化搜索

题目&#xff1a; https://www.luogu.com.cn/problem/P1722 我们按照案例画一下 我们会发现&#xff0c;会出现重复的子结构。 代码如下&#xff1a; #include<iostream> using namespace std; int mem[300][300]; int n; int f[305][305]; int dfs(int x,int red,…

RTSP播放器EasyPlayer.js播放器分辨率高的视频在设置container的宽高较小时,会出现锯齿状的画面效果

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。随着技术的不断进步和市场的持续发展&#xff0c;流媒体播放器将在内容创新、用户体验优化以及跨平台互通等方面取得新的突破。对于从业者而言&#xff0c;把握这些趋势并积极应对挑战将是实现成功的关键…

半导体、晶体管、集成电路、芯片、CPU、单片机、单片机最小系统、单片机开发板-概念串联辨析

下面概念定义从小到大串联&#xff1a; 半导体&#xff08;semiconductor&#xff09;&#xff1a; 是一类常温下导电性能介于导体与绝缘体之间的材料&#xff0c;这种材料的导电性可以随着外部环境比如电压、温度、光照的变换而改变&#xff0c;导电特性区别于导体、超导体、…

WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理

WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是&#xff1a; 在官网说明里&#xff0c;才版本2024.1开始&#xff0c;默认启用的 Vue Language Server&#xff0c;但是在 Vue 2 项目…

app小程序web安全—sign签名绕过

一、环境准备 本文测试环境为JeecgBoot&#xff0c;代码链接&#xff1a;jeecgboot/Github 环境配置链接&#xff1a;IDEA启动项目 - JeecgBoot 文档中心 配置好依赖和数据库后启动后端&#xff1a;org.jeecg.JeecgSystemApplication 启动Vue3前端&#xff0c;点击dev&…

Javaweb前端HTML css 整体布局

最后一个是线条颜色 盒子&#xff0c;整体还是300&#xff0c;400

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式&#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…

003 STM32基础、架构以及资料介绍——常识

注&#xff1a; 本笔记参考学习B站官方视频教程&#xff0c;免费公开交流&#xff0c;切莫商用。内容可能有误&#xff0c;具体以官方为准&#xff0c;也欢迎大家指出问题所在。 01什么是STM32&#xff08;宏观&#xff09; STM32属于一个微控制器&#xff0c;自带了各种常用通…

flutter 专题十七 Flutter Flar动画实战

Flutter Flar动画实战 在Flare动面出现之前&#xff0c;Flare动画大体可以分为使用AnimationController控制的基础动画以及使用Hero的转场动画&#xff0c;如果遇到一些复杂的场景&#xff0c;使用这些动画方案实现起来还是有难度的。不过&#xff0c;随着Flutter开始支持Flar…

uniapp 自定义popup 弹窗 简单封装(微信小程序)

效果并不完整&#xff0c;有需求可以自行修改 适用于vue2 弹窗只支持居中弹出和下方弹出&#xff0c;内容可以自定义 效果图 子组件 代码 新建组件文件夹 zPopup <template><view class"zPopup_show" v-if"style_show":class"mod…

网络爬虫——常见问题与调试技巧

在开发网络爬虫的过程中&#xff0c;开发者常常会遇到各种问题&#xff0c;例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案&#xff0c;详细介绍解决常见错误的方法&#xff0c;以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…

[面试]-golang基础面试题总结

文章目录 panic 和 recover**注意事项**使用 pprof、trace 和 race 进行性能调试。**Go Module**&#xff1a;Go中new和make的区别 Channel什么是 Channel 的方向性&#xff1f;如何对 Channel 进行方向限制&#xff1f;Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有…

从 HTML 到 CSS:开启网页样式之旅(二)—— 深入探索 CSS 选择器的奥秘

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;二&#xff09;—— 深入探索 CSS 选择器的奥秘 前言一、CSS基本选择器1. 通配选择器2. 元素选择器3. 类选择器4. id选择器5.基本选择器总结 二、CSS复合选择器1. 后代选择器2. 子选择器3. 相邻兄弟选择器4.交集选择器5…

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…

Typora+PicGo+云服务器搭建博客图床

文章目录 前言一. 为什么要搭建博客图床&#xff1f;1.1 什么是图床&#xff1f;1.2 为什么要搭建博客图床? 二. 安装软件三. 配置阿里云OSS3.1 注册,开通对象储存3.2 创建bucket3.3 找到你的地域节点3.4 accessKeyId和accessKeySecret3.5 给你的阿里云账户充值 四. 配置4.1 配…

下载安装Android Studio

&#xff08;一&#xff09;Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会&#xff0c;出现 点同意后&#xff0…