读论文最耗时的不是看不懂,而是找句子、对公式、切窗口。这个 VS Code 扩展把原版 PDF、逐句译文、公式、批注和 AI 问答放在同一屏。
读论文最耗时的不是看不懂,而是找句子、对公式、切窗口。这个 VS Code 扩展把原版 PDF、逐句译文、公式、批注和 AI 问答放在同一屏。
状态参数化、观测残差、雅可比推导、损失构造与 LM 稀疏求解:一套可复用的多传感器相对定位建模方法。
基于 Yocto 与瑞萨 RZ/V2H 多核异构的跨海大桥智能巡检 ROV 全景结项总结 作者:林宇祥(SevenFriends) 个人技术博客:https://sevenfriends.xtkx.site 主控平台:瑞萨 RZ/V2H EK320(4× Cortex-A55 @ Linux/ROS2 + Cortex-M33 @ FreeRTOS + 双 DRP-AI3 NPU) 基站主控:瑞萨 RA4M2 + E22 LoRa 成果荣誉:2026 年全国大学生物联网设计竞赛全国一等奖(团队队长)、全国大学生嵌入式芯片与系统设计竞赛全国三等奖 前言:一次“不设退路”的冒险 这个项目的源头,来自于两个看似偶然的契机:一是在短视频平台上偶然刷到的青岛胶州湾大桥宏伟建设报道;二是在 B 站上长期关注的国外硬核 ROV(水下遥控无人潜航器)探险视频。 当时我们脑海里冒出了一个挥之不去的工程问题:面对常年遭受高盐、湍流、风浪侵蚀的跨海大桥混凝土桥墩,人类目前究竟是怎样做水下探伤与维护的? 深入调研后我们发现,行业现状远比想象中残酷与落后: 1. “脐带缆”缠绕梦魇:传统工业 ROV 极度依赖粗重的脐带缆供电与通信,在桥墩这种复杂水下异形柱群作业时,稍微遭遇横流扰动,缆绳缠绕桥墩往往直接导致设备损毁或永久沉没; 2. “只看不治”的被动低效:传统设备仅能充当被动的水下摄像机,水下浑浊视线下根本无法自动检测微细裂缝;面对藤壶、牡蛎等致密海洋生物的寄生硬壳,更毫无现场物理清除手段; 3. 过度依赖专业潜水员与飞手:水下作业风险极高,培养一个熟练的商业潜水员和飞手成本巨大。 “我们能不能做一台多核异构、片上边缘计算、具备‘无缆/微缆辅助定位’、能自己看懂裂缝、甚至能伸出机械爪现场清理病害的智能巡检 ROV?” 2025 年 12 月,我们正式锁定了这个题目。2026 年 1 月期末考结束的当天下午,我拿出了刚发到手的国家奖学金 10,000 元奖金,拉上队友,项目正式点火启动。我们当时没有给自己留任何退路——我们不认为嵌入式竞赛是电赛的下位替代,它是一个真正值得你把自己所有的工程狂想与技术底蕴倾注进去的顶尖舞台。 文中会见到两种外形不同的ROV,其中有着黑色尼龙外挡板的是最后升级版。旨在加强防水、平衡、稳定性与便捷性。 ▲ 图 1-1 水下实测实景:跨海大桥智能巡检 ROV 在深水试验池中稳定悬停与下潜巡检作业(搭载自研全向矢量推进器、水下高亮探照灯、作业机械夹爪、亚克力密封耐压舱及水声通信定位换能器) ▲ 图 1-2 跨海大桥智能巡检 ROV 整机与岸基基站系统桌面实物展示(配备 RA4M2 岸基便携无线基站、高增益 LoRa 射频天线与全套测控链路) ▲ 图 1-3 跨海大桥巡检作业流程概览(下潜巡航 -> 裂缝检测 -> 附着物清除 -> 紧急上浮) 一、全系统架构设计:多核异构如何破局? 水下机器人最核心的矛盾,永远是“大算力边缘 AI(重)”与“毫秒级高频运动控制(急)”的冲突。 如果采用传统高校方案——“树莓派/Jetson(跑算法)+ STM32/Pixhawk(跑飞控)”的双板拼凑模式,不仅仓内走线极其拥挤、两块板卡互相争抢电源与散热,而且两板之间的 UART 通信带宽只有几十 KB/s,延迟高达几十毫秒,根本不可能满足高动态水流下的闭环姿态伺服。 经过对半导体原厂路线的深度技术评估,我们大胆选用了瑞萨次世代边缘 AI 旗舰——RZ/V2H EK320 作为整机单芯片主控,构建了一套“片上多核异构(Heterogeneous Multi-core on Chip)”架构: ▲ 图 2-1 整体系统架构框图(RZ/V2H 单芯片 A55+M33+DRP-AI3 异构体系与外设总线拓扑) +-----------------------------------------------------------------------------------+ | 瑞萨 RZ/V2H EK320 单芯片大脑 | | | | +---------------------------------------+ +---------------------------------+ | | | Cortex-A55 大核群 (Linux / ROS2) | | Cortex-M33 实时小核 (FreeRTOS)| | | | | | | | | | • USB 摄像头采集 (640x480 RGB) | | • 100Hz 6路推进器 PWM 矢量驱动 | | | | • DRP-AI3 硬件加速推理 (YOLOv8m, 25fps)| | • Mahony 姿态解算 (IMU 9轴) | | | | • 裂缝与附着生物三维坐标解算 | | • 深度传感器闭环定深 (PID 控制)| | | | • 航迹规划与状态监控 | | • 3自由度清理机械夹爪控制 | | | | | | • 超声波水下避障探头采集 | | | +---------------------------------------+ +---------------------------------+ | | | | | | +======== [OpenAMP RPMsg 共享内存] =====+ | | (微秒级 150μs 核间通信总线) | +-----------------------------------------------------------------------------------+ | +--------------------------------+--------------------------------+ | (水下声学通信 / 少量坐标遥测) | (Lora 433MHz 岸基长距离链路) v v +-----------------------------+ +-----------------------------+ | 水声通信基站 (定位锚点) | | 岸基 RA4M2 边缘基站 | +-----------------------------+ +-----------------------------+ | (Web Serial API) v +-----------------------------+ | Three.js 3D 沉浸式数字孪生 | | Web 监控控制台 (零后端) |…
这块开发板配置有4个mipi csi接口,宣传是可以接入4路摄像头的。厂家在测试的时候使用的是瑞萨官方国外的摄像头,是成功的。而国内淘宝能购买到的摄像头线序和板子上的线序不同。绘制了转接板后再测试摄像头依然不行。大概率是国内的摄像头与瑞萨官方的摄像头寄存器地址设置等有所不同导致驱动无法兼容。若重新编译镜像,安装索尼官方的驱动,会出现时钟频率不匹配的问题,在我们尝试了更改驱动源文件以及设备树后依然没有解决这个问题。 如果有需要mipi转接板工程的可以直接联系我。如果哪位大佬解决了驱动的问题也欢迎交流!
如果遇到明明代码完全没问题,但是出现运行一会儿就会卡死的现象,可以聚焦这篇博客。微机原理指出,IO一般是通过控制器挂载在总线上的,而总线一般是只能由单个设备进行访问。所以当我们的CA55和CM33同时访问一个IO的时候就会产生总线冲突导致CA55内核崩溃或者CM33崩溃。这常见于A55和M33访问同一个i2c接口或者串口接口。若是要CM33获得这个IO的独有权,可以通过修改设备树的方式禁用CA55对这个IO的控制。 拿之前提到的linux使用i2c举例,如果我想要将这个接口划分给CM33,可以前往文件:linux/arch/arm64/boot/dts/myzr/myzr-rzv2h-ek320.dts 跳转至457行左右,修改i2c2的节点变为如下: 回到linux目录,重新编译设备树,然后重新烧录即可:
有时候我们希望一些外设可以直接通过串口USB接入linux中,这样既可以让A55直接对外设的数据进行接收处理,还可以节省我们的引脚资源。但是一般的嵌入式开发板不带CH340驱动,包括EK320这块开发板。所以我们需要手动编译驱动安装。有两种方法:①将驱动编译成.ko模块文件然后拷贝至开发板挂载驱动。②直接将驱动编译进内核中。由于主播在尝试方法①的时候发现并不十分稳定,还有可能造成内核崩溃。所以建议使用方法②。 1.修改配置,编译新内核 打开wsl2,进入我们之前已经创建过的linux目录。在目录下输入并执行: 打开图形化配置界面后进入: 找到USB Winchiphead CH341 Single Port Serial Driver,按下键盘上的Y。保存后退出图形化配置界面。 回到命令行后输入并执行以下指令: 输入并执行以下命令: 执行完毕后在linux/arch/arm64/boot可以得到新的内核文件。将他拷贝至U盘,替换原有的Image文件后重新烧录系统。 2.验证CH340驱动 重新烧录后将你的USB串口插在USB接口上,上电启动后在命令行输入以下指令: 可以看到输出以下信息: 可以看到已经识别出ttyUSB0这个端口了,然后我们对端口波特率进行设置,以及接收数据。这里博主用的是维特的陀螺仪进行验证,陀螺仪回传频率1000HZ,波特率设置为921600: 输入以下命令开始监听串口回传: 可以看到命令行中输出大量数据,随机挑选一帧数据发现符合维特的通信标准。 大家也可以直接将开发板串口和电脑串口连接在一起由电脑的串口助手进行发送,查看开发板是否可以接收,或者用单片机发送数据。
在前几期博客中我们调试外设总是会设计到电平标准的问题,为了方便调试和开发,博主抽时间为开发版画了一块电平转换板,整板成本不超过20元。芯片、电容电阻直接照着原理图买。扇出引脚购买30pin的弯双排针。如果使用了博主开源的散热保护壳,那扇入引脚的排母需要购买四层加高排母,塑高18.5mm。项目已在嘉立创开源,链接如下: 还有一点需要进行申明,由于这个转换芯片是自动检测方向,所以它输出电流的驱动能力是比较弱的,如果你输出驱动能力要求比较高,例如PWM控制电机转动等场景,需要在对应的引脚后面接一个缓冲器用来增强输出驱动能力,因为这类芯片通常有方向引脚,需要控制方向达到是输出还是输入会占用一个IO比较麻烦,所以可以单独焊一块板子固定接VCC设置为输出。原理图如下: 电平转接板需要添加其他丝印可以自行添加,效果图如下:
ai_sdk版本:v6.00translator版本:v1.04WSL2版本:Ubuntu20.04使用vscode开发 下载的插件包括但不限于:cmake、WSL、docker、c++等 从瑞萨官网下载ai_sdk: https://www.renesas.cn/zh/document/sws/rzv2h-ai-sdk-v600?r=25470141 解压zip于在WSL中得到RTK0EF0180F06000SJ文件夹文件目录如下: 这里的documents实际上是数据手册 里面有DRP-AI进行量化与编译的说明ai_sdk_setup里面包含了我们需要的工具(docker、交叉编译链、translator)其余内容可以暂时不管 (一)加载docker首先确保你的Ubuntu环境中有docker软件:如果没有docker,请按照以下命令下载docker: 如果有docker软件:首先需要找到你RTK0EF0180F06000SJ安装的路径,我这里的路径为~/new_sdk/RTK0EF0180F06000SJ: 执行以下命令启动docker环境,其中rzv2h_drp为该容器名称: 等待漫长时间后,由于是首次运行该容器,请按照以下命令运行: --name rzv2h_compiler 这里可以理解为别名 实际上不影响docker的功能-v $(pwd):/drp-ai_tvm/data/ 这里是挂载的目录rzv2h_drp /bin/bash 挂载到命令行以输入命令 如何理解docker:厂家为了让你跑通它的代码,会贴心的给你写好跑通代码需要的所有环境,通常以“dockerfile”的形式呈现,如果你感兴趣打开它(用记事本打开即可)就会发现里面大多是各种版本的各种软件,只需要用docker就可以一键下载环境,十分的方便。 同时docker可以隔离彼此的环境,比如你要跑3个项目,每个项目需要的软件版本不一样,但是docker的存在就不需要你跑一个项目就要从头配置环境了,只需要挂载docker后即可跑通代码。 还有就是宿主机(这里可以理解为WSL2里的Ubuntu)与docker之间的联系:-v $(pwd):/drp-ai_tvm/data/ docker与Ubuntu会共享这个文件夹:你在Ubuntu里添加一个文件,docker里会同步出现该文件 为了更方便的开发,我们在vscode中下载docker插件,在顶端的工具栏上找到“查看(View)”选项后点击子选项的第一个“命令面板(ctrl+shift+P)”,在新出现的选项中选择:“开发容器:附加到正在运行的容器” 选择你正在运行的docker 这里应该是rzv2h_compiler (由于我之前运行了其它容器,所以会显示其它选项)之后我们会进入到一个全新的容器内: 看左下角的蓝色图标即可知道已经进入了docker环境内 本次只是为了熟悉开发环境,接下来我们会在docker内进行yolo模型的下载、裁剪、量化、编译。 另外,上述docker方法只适用于第一次启动,如果你之前已经使用了docker run这个命令,那么下一次挂载docker时,不需要运行 docker run命令:先用docker ps -as 命令查看当前docker ID: 找到你的docker对应的ID后(这里是898e1da632d3),输入以下命令: 之后docker容器就会启动,如果成功启动会反馈给你已经启动的docker ID 之后就可以用插件进行挂载了。 另外,还有一些Linux常用命令仅供参考: 把当前文件复制到docker里:(反过来就是把顺序换一下) 查找特定文件: cp命令复制文件夹: 文件夹重命名: 查找特定文件就: 1. 挂载 U 盘 (假设设备是 sda1,如果之前挂载过忽略此步) su - # 先切换到 root 挂载mount /dev/sda1 /mnt/udiskexit # 挂载完退回到 rzv2h 用户!(一定要退回) 查看软件版本 压缩WSL节省空间用WizTree软件找到了WSL的磁盘所在位置 D:\WSL\ext4.vhdx在Powershell中运行 : 在弹出的窗口中: 显示文件修改时间 删除某个docker 查看wic镜像里的文件: 你会看到类似 /dev/loop0p1, /dev/loop0p2 的节点,p2 就代表第二个分区。 卸载与清理(重要): 第一篇章先告一段落,Linux初学者也不要着急,先慢慢地敲一敲命令以逐步上手Linux。 PS:本人初学Linux,水平有限,如有错误,请以斧正。
本文档记录了如何寻找CA55的Linux端存在的iic接口,并确定管脚,尝试点亮SSD1306芯片0.96寸oled。虽然CM33端有iic接口,但是有时候我们需要直接将从iic设备拿到的数据传入linux,会比从CM33再核间通信到CA55方便得多。开始测试前需要注意在linux端串口篇说过,输入的上拉是不好做的,这里的iic通信更是如此,所以博主直接找了个电平转换模块使用,板子上有1.8V的排针,查阅数据手册即可: 1.查找iic管脚 启动开发板,打开串口助手,在命令行输入以下指令: 可以看到命令行输出以下信息: 我们效仿uart去查询物理地址映射到了哪些管脚,输入以下指令: 可以看到命令行输出以下内容: 查询原理图,我们发现P34和P35刚好是被拓展排针引出来了的。所以使用这一对引脚进行iic通信: 2.测试iic接口 博主使用的是下面中间这个电平转换模块,支持1.8V-5V的电平转换: 将VCCA连接到开发板上的1.8V,VCCB连接到开发板上的3.3V,将GND接好。A0和A1分别连接P34和P35,B0和B1分别连接oled的SDA和SCL。再给oled接上GND和VCC。 在命令行输入以下命令: 这个指令是用来扫描iic总线上挂载的设备地址。可以看到输出以下内容: 可以看到有一个地址是0x3c的设备存在,而我们oled的硬件物理地址恰好就是0x3c!说明oled已经成功被芯片识别到,接下来我们就可以直接操作寄存器来做简单的测试。将stm32的oled驱动代码和字模交给AI让AI帮我们生成写字符的命令行指令: 直接将整段复制下来粘贴进命令行回车确认,我们就可以看见屏幕中间出现了博客的名称"Sevenfriends"!效果图如下: 以上就是本文档的全部内容。这篇博客只是进行了简单的iic测试,确保iic能够使用。包括教程中使用的oled,其实最正规的做法是将oled驱动编写为内核驱动,修改设备树为oled增加节点,然后重新编译系统。后期可能会更新相关教程!
本文档记录了如何寻找CA55的Linux端存在的串口,并确定管脚,进行简易的发数据测试。因为可能部分同学不会使用到Multi-os,更多的时候是使用一个RA下位机来代替CM33的功能,所以开发板和下位机的通讯就很重要了,最常用的通信方式就是串口。起初博主在开发板原理图上只找到一个3pin的串口接口,然后百般尝试都无法通过这三个排针发出数据,所以后面就尝试找到真正的管脚。 1. 确定管脚 我们直接给开发板上电,打开串口调试工具。等待开机后在命令行输入以下指令: 可以看到命令行会输出以下信息: 在这里我们看到开发板的串口驱动是正常工作的,且四个串口的物理地址都已分配,可以从这里看到各个串口收发数据分别是多少。有了物理地址,我们再去查物理地址被映射到了哪些管脚上,在命令行输入以下指令: 可以看到命令行输出了以下信息: 在这里我们终于可以看到具体的管脚了。比如我们的ttySC1,对应物理地址0x12801C00,对应的管脚是P84和P85。其他串口的管脚都有了,但是博主检查了以下其他三个串口的管脚都被我的cm33给占用了,所以后面我又尝试了下,被占用的管脚是无法进行串口通信的,所以这里就使用ttySC1。 2.通信测试 查看原理图,确定P84和P85管脚位置。由于这里我们的串口模块TX的电平标准是3.3,而P85的电平标准是1.8V,1.8V的上拉不太好做,所以这里只测试开发板向电脑发送信息: 串口模块的RX和P84直连,因为模块内部有3.3V上拉,在电脑上打开串口调试助手设置波特率为9600。在开发板命令行输入以下命令: 这表示通过ttySC1这个串口打印123这个信息。然后我们立马可以在串口调试助手看到接收数据: 可以看到前三个字节刚好是十进制的49,50,51,也就是刚好对应1,2,3的ASCll码。 关于解除其他几个被占用引脚是否可以正常通信博主也没试过,大家可以自己去尝试一下。后面还可以通过这个相似的方法找到iic的管脚,后面通过相同方法查到了未被cm33占用的iic管脚是P34和P35。以上就是本文的所有内容。
电子科技大学信息与通信工程学院电子信息工程专业本科生,主攻嵌入式软硬件协同开发、Linux 内核与驱动定制、多核异构系统架构(ARM Cortex-A55 + Cortex-M33)与端侧 AI 模型部署。