KRS(Kratos Robotics Stack):让 Zynq / FPGA 机器人开发真正“跑”起来

在机器人与自主系统开发中,ROS 2 已经成为事实标准,但当它遇到 FPGA / Zynq / Kria 这类异构平台时,工程复杂度往往直线上升。

KRS(Kratos Robotics Stack) 正是为了解决这个问题而诞生的。

KRS 是一个由 Xilinx(AMD)官方推动的 开源机器人软件栈,目标非常明确:

让基于 ROS 2 的机器人应用,能够高效、可重复、工程化地运行在 Zynq 和 Kria 平台上。

先看下下面的应用视频:

🧠 什么是 KRS?

KRS(Kratos Robotics Stack) 是一个围绕 ROS 2 + FPGA 加速 构建的完整开发框架,主要面向:

  • Zynq UltraScale+ MPSoC
  • Kria SOM / Kria Robotics Stack(KR260 等)
  • 需要 CPU + FPGA 异构加速 的机器人与感知系统

它并不是“又一个 ROS 发行版”,而是一个 工程化工具集合 + 架构规范。

它通过与 ROS(机器人领域的通用语言)紧密集成,并结合现代 C++ 和高级综合 (HLS) 技术,以及参考开发板和设计架构,为机器人专家快速启动项目提供了可能。

KRS功能:

KRS特征

以 ROS 2 为中心

ROS之于机器人专家,正如Linux之于大多数计算机科学家和软件开发人员。它帮助机器人专家构建机器人应用程序。随着ROS 2的发布,机器人行为的生成能力已达到生产就绪状态,并有可能对众多行业产生深远影响。与那些用大量库的复制品或分支以及/或类似的机器人模拟器来重复发明轮子的新机器人平台不同,Xilinx的KRS方案满足了ROS机器人社区的需求,并基于ROS 2及其紧密集成的机器人模拟器Gazebo构建而成。

为了将 Xilinx 的硬件加速技术与 ROS 2 生态系统连接起来,并鼓励软件包维护者从中受益,Xilinx 创建了一系列 ROS 2 构建系统 ( ament) 和元构建工具 ( colcon) 的扩展,以最大限度地减少 ROS 2 软件包维护者的工作量。该架构基于三大支柱。

实时 ROS 2

实时性是机器人系统的端到端特性。运行在标量处理器(例如 CPU)上的 ROS 2 应用会受到各种不确定性因素的影响。上图展示了 OSI 模型栈中的这些不确定性因素。为了使机器人在使用 ROS 2 进行进程间、进程内或网络内信息交换时能够确定性地响应,OSI 模型栈中涉及的所有层都必须能够确定性地响应。除非所有覆盖层和底层都具有相同的时间限制,否则无法保证 ROS 2 的实时性。相应地,对于实时 ROS 2 交互,其所有层也必须是实时的。对于运行在 CPU 上的 ROS 2,需要针对每个层级解决不确定性因素。

FPGA 允许设计能够提供确定性响应的机器人电路。虽然可以仅依靠 FPGA 设计硬实时机器人系统,但当与通常运行在标量处理器 (CPU) 上的 ROS 2 进行交互时,确定性往往会受到影响。KRS 的目标是通过模块化方法提供机制来缓解标量处理器中所有这些不确定性问题。可以根据具体用例,优先选择并使用特定模块来消除所需的不确定性来源,并调整缓解措施。

一般来说,CPU 实时问题的解决方案可分为两大类:a) 在相应的抽象层中设置正确的优先级;b) 应用服务质量 (QoS) 技术。每一层都有其自身的 QoS 方法。在 OSI 模型第二层(OSI 2 层),有 IEEE 802.1Q 标准中规定的成熟 QoS 技术,以及诸如时间敏感网络 (TSN) 标准等新技术。对于 Linux 网络协议栈(OSI 模型第三层和第四层),流量控制允许配置 QoS 方法。类似地,从 Linux 内核到应用程序库,每一层都需要配置为限制最大延迟,才能使机器人系统具备实时能力。

ROS 2 加速应用

ROS 生态系统汇聚了全球数千名机器人专家,他们使用 ROS 2 抽象层开发机器人应用程序。从某种意义上说,ROS 是机器人专家构建机器人行为时常用的 API,也是机器人领域的参考软件开发工具包 (SDK)。随着机器人领域混合源代码技术生态系统的出现,在 ROS 领域,已经有许多公司围绕开源软件包提供价值,并回馈社区。

通过与 Xilinx 应用商店的连接,KRS 将 ROS 2 叠加工作区容器化为机器人加速应用。

除了扩展 ROS 2 构建系统和工具以简化 ROS 2 软件包的货币化过程外,KRS 还提供了额外的工具和扩展,以简化 ROS 2 overlay 工作区的打包和发布到 Xilinx 应用商店的过程。上面的 subverb 展示了其中一个这样的工具。

KRS 的核心理念

KRS 的设计思想可以总结为三点:

1️⃣ ROS 2 原生优先(ROS-native)

不改变 ROS 2 的使用方式

节点、话题、消息、launch 文件全部保持 ROS 生态一致

FPGA 加速被“封装”在 ROS 2 节点之下

👉 对上层算法工程师 几乎无感知

2️⃣ 异构加速可重用(Reusable Acceleration)

KRS 将 FPGA 加速抽象为 可复用组件:

图像处理

计算机视觉

运动规划

感知与控制链路

这些加速模块可以被多个 ROS 2 节点复用,而不是“一次性工程”。

3️⃣ 面向产品级部署(Production-ready)

KRS 从一开始就不是 Demo 导向,而是:

支持 Yocto / PetaLinux

支持容器化(Docker)

支持 CI / 自动化构建

面向 可量产、可维护系统

KRS 的整体架构

从官方文档来看,KRS 的结构大致分为三层:

上层:标准 ROS 2 应用

中层:KRS 提供的加速 ROS 2 组件

底层:FPGA 硬件加速(Vitis、HLS、RTL)

参考资料

https://xilinx.github.io/KRS/sphinx/build/html/docs/intro.html
https://github.com/Xilinx/Vitis_Libraries

✅ 总结一句话

KRS 不是教你“怎么用 FPGA”,而是教你“如何把 FPGA 自然地用进 ROS 2 机器人系统”。

它代表了一种趋势:

FPGA 不再是孤立的硬件模块,而是 ROS 生态中的一等公民。

关于这个机器人的项目,我们后面展开聊聊:

Read more

【图文】Windows + WSL + Ubuntu 安装 OpenClaw 全套流程(飞书机器人 + 百炼模型)

目录 * 一、安装 WSL * 二、安装基础组件 * 三、安装 Node.js(通过 nvm) * 1 安装 nvm * 2 安装 Node * 四、安装 OpenClaw * 五、OpenClaw 初始化配置 * 六、Hooks 配置(重要) * 七、打开 Web UI * 八、安装飞书插件 * 九、第三方飞书插件(备用方案) * 十、飞书权限配置(注意先做好飞书机器人设置,再配置channel) * 十一、配置飞书channel * 十二、配置飞书回调事件 * 十三、重启 OpenClaw * 十四、配置百炼模型

雷达信号处理中的CFAR技术详解

好的,我来为您总结归纳雷达信号处理中的恒虚警(CFAR)技术,并提供一个基于MATLAB的实际用例。 🧐 雷达信号处理之恒虚警(CFAR) 恒虚警率(Constant False Alarm Rate, CFAR)是一种自适应阈值目标检测技术,在雷达信号处理中用于从噪声和杂波背景中检测出目标回波。其核心思想是:无论背景噪声或杂波的功率如何变化,都保持虚警概率( )为一个预先设定的常数。 🎯 1. 基本原理与流程 CFAR算法通过实时估计待检测单元(Cell Under Test, CUT)周围的背景噪声或杂波功率,并根据期望的虚警率 自适应地确定检测阈值 。 主要步骤: 1. 滑动窗口(Detection Window):在待检测数据(通常是距离-多普勒图或距离向数据)上设定一个固定大小的滑动窗口。 2. 单元划分:窗口内的单元被划分为三个部分: * 待检测单元(CUT):位于窗口中心,是我们要判断是否包含目标的单元。 如果 ,则判断不存在目标(No Target)。 如果 ,则判断存在目标(

构建 基于无人机 RGB+红外(RGBT)双模态小目标行人检测系统 无人机视角下RGB+红外对齐行人小目标检测数据集 航拍无人机多模态行人检测数据集 红外可见光行人检测数据集

构建 基于无人机 RGB+红外(RGBT)双模态小目标行人检测系统 无人机视角下RGB+红外对齐行人小目标检测数据集 航拍无人机多模态行人检测数据集 红外可见光行人检测数据集

无人机视角下RGB+红外对齐行人小目标检测数据集 模态与视角:无人机搭载 RGBT 双光相机,从 50–80 m 高度、45°–60° 俯视角采集,同步 RGB + 热红外图像对。 规模:6,125 对图像(4,900 train / 1,225 test),分辨率 640×512,共 70,880 个行人实例。 任务:专门面向 tiny person detection 的无人机 RGBT 检测 benchmark。 1 1 以下是 无人机视角下 RGB+红外对齐行人小目标检测数据集 的详细信息整理成表格:

【数字图像处理与FPGA实现】00 绪,建立“算法思维“与“硬件思维“的桥梁

【数字图像处理与FPGA实现】00 绪,建立“算法思维“与“硬件思维“的桥梁

0、初衷 我的历程: 算法->rtl -> 算法&rtl 构建起这座桥,双向互译!直到 “写算法时心中有电路,写FPGA时心中有算法。” 阶段1:我曾是算法的"原教旨主义者"。 最早期,我和许多算法工程师一样,活在 MATLAB/Python/C语言 的抽象象牙塔里。 对我来说,图像就是 imread() 返回的那个完美矩阵, 处理就是调用 conv2() 或 cv2.GaussianBlur()等函数。 数据是静止的、无限的、免费的——内存不够就加条 DIMM, 算得慢就等几秒,边界处理? MATLAB 会帮我 padarray, Python 会帮我