YTM32的HSM模块在信息安全场景中的应用
YTM32的HSM模块在信息安全场景中的应用
文章目录
- YTM32的HSM模块在信息安全场景中的应用
- 引言
- 应用场景:一点点密码学基础
- 硬件:YTM32的信息安全子系统
- HCU外设模块
- 硬件特性
- 基本的应用操作流程,以计算AES-ECB为例
- 硬件上对处理多块数据上的一些设计细节
- 处理多块消息 for AES / SHA
- 存储上下文数据,使用CR[CS]寄存器
- 操作流步骤
- 存放密钥Key
- 关于FIFO
- 软件资源
- Performance
- 小节
引言
随着汽车上通信系统越来越复杂,云端、远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车电子系统中。通常这类加解密算法都需要大量的数学运算,需要消耗相当多的CPU时间,但同时汽车应用场景对ECU有比较高的实时性要求,为了节省主CPU的资源,专用于执行加解密算法的硬件HSM模块应运而生。
广义上的HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的外设模块,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如AES-128、SHA-256等)。有了HSM模块,程序中就可以把加解密运算交给HSM来执行,同时主CPU就可以去做其他工作,一段时间后来查询结果,或等待HSM计算完成后通过中断等方式通知主CPU计算结果即可。HSM通常还拥有单独的存储区,包括RAM和NVM(Flash存储器),HSM的存储区在正常运行状态下应只允许HSM读写,主CPU不能读写。这样就可以把算法秘钥等重要数据存储在HSM存储区,与主CPU进行隔离,进一步加强安全性。此外HSM模块还会集成(或者共存)真随机数生成器等加密算法常用外设。
应用场景:一点点密码学基础
常用的加密方法,比较耳熟能详的是摘要算法(哈希算法,HASH)、对称加密、非对称加密等。
- 摘要算法是不可逆的,主要作用是对信息的完整性和一致性进行校验。
- 对称加密算法是可逆的,主要作用是保证私密信息不被泄露。不同于摘要算法(HASH),是真正意义上的加密算法。
- 相对于对称加密在加解密过程中使用同一个密钥,非对称加密在加密和解密过程中使用的密钥也是不同的(公钥和私钥)。
假设有发送方向接收方发送消息。如果没有任何加密算法,接收方发送的是一条明文消息:我是小灰。

如果中间人截获到消息,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了通信双方的私密。
因此,我们不再直接传送明文,而改用对称加密的方式传输密文,画风就变成了下面这样:

具体工作的步骤如下:
- 发送方利用密钥
123456,加密明文我是小灰,加密结果为TNYRvx+SNjZwEK+ZXFEcDw==。 - 发送方把加密后的内容
TNYRvx+SNjZwEK+ZXFEcDw==传输给接收方。 - 接收方收到密文
TNYRvx+SNjZwEK+ZXFEcDw==,利用密钥123456还原为明文我是小灰。(使用相同密钥的对称加密方法)
硬件:YTM32的信息安全子系统
HCU外设模块
YTM32的HCU(Hardware Cryptography Unit)是HSM的一种典型实现,使用硬件计算引擎,可以实现对用户数据的加解密计算,其中包括AES、SM4、SHA等算法,并配合真随机数发生器TRNG和HCU_NVR存储区,完成了对加解密系统的硬件支持。如图x所示。

从HCU外设的系统框图中可以看到,HCU的核心是一个复用成多种模式的计算引擎,用户可以通过FIFO向计算引擎送数参与计算,并在计算结束后,通过FIFO读出计算结果。HCU的用户操作接口(寄存器)并不复杂,主要的配置选项都在选择计算引擎的工作模式上(HCU_CR寄存器),DMA和中断,以及标志位的设置,都是面向FIFO的常规功能。
需要特别关注的是,HCU外设模块从Flash(EFM模块)存储器中导入Key到HCU_KEY寄存器的机制,以及众多面向具体加解密算法,需要通过专用的寄存器传入专用的参数,例如通过HCU_MSGINFO寄存器和HCU_MSGADL寄存器指定输入数据(“消息”,Message)的长度,通过HCU_ASECV寄存器为计算ASE-CTR算法时传入Counter参数,通过HCU_ASEIV寄存器为计算ASE-CBC算法时传入Initial Vector参数,通过HCU_ASEMAC寄存器为计算ASE-CMAC算法时传入或传出MAC值。
硬件特性
- 支持使用128-bit、192-bit、256-bit等不同长度的密钥。
- 可以实现加密和解密运算。
- 可以使用安全的硬件密钥(存放在以Flash为存储介质的HCU_NVR)和灵活的软件密钥(可软件写入HCU_KEY寄存器)。
- 实现了多种硬件加密算法的计算引擎
- AES (ECB, CBC, CTR, CCM, CMAC )
- SM4 (ECB)
- SHA (SHA-256, SHA-384)
- 以大端方式保存输入数据和输出数据,但支持按位、按字节和按16位字逆序。
- 使用输入FIFO和输出FIFO缓存数据,最大缓存深度可达128 Byte。
- 支持DMA和中断,可以从MCU的内存空间中取数和送数。
基本的应用操作流程,以计算AES-ECB为例
使用HCU计算引擎的流程大体相似:先准备密钥Key、配置引擎,到准备数据、执行计算,最后等待计算完成读取计算结果。这里以AES-ECB为例,具体说明使用HCU计算引擎的操作过程:
- 导入计算过程的密钥,可以使用预先烧录至Flash存储区的HCU_NVR,也可以人工向
HCU_KEY寄存器中写数。 - 配置计算引擎,设置
HCU_CR[ENGSEL]=1, HCU_CR[ALGSEL]=0,指定即将以AES-ECB模式进行计算。 - 指定实际使用密钥的长度,设置
HCU_CR[KEYLEN],例如,可指定长度为128。 - 向HCU的数据FIFO中写入即将要参与计算的数据,向
HCU_IFDAT寄存器中写数。 - 指定即将要参与计算的数据长度,向
HCU_MSGADL[MSGLEN]寄存器中写数。 - [可选的步骤] 根据不同计算模式的需要,需要额外写入计算参数:
- 对于
AES-CBC计算,需要在这个阶段写入HCU_IV寄存器。 - 对于
AES-CTR计算,需要在这个阶段写入HCU_CTR寄存器。
- 对于
- 指定即将要进行的是加密计算还是解密计算,设置
HCU_CR[ENC]寄存器。 - 启动计算,设置
HCU_GO[GO]=1。 - 等待计算完成。
- 当硬件计算完成后,将有标志位
HCU_SR[OD]=1。 - 从HCU的数据FIFO中读出计算的结果,从
HCU_OFDAT寄存器中读数。
其他计算模式的过程大体相同,在软件应用上,可以直接调用SDK软件包中的API,或者阅读参考手册对照具体的操作。
硬件上对处理多块数据上的一些设计细节
处理多块消息 for AES / SHA
一般应用中,AES / SHA计算引擎处理一个消息块的长度小于 32768 / 65536 字节,对应在HCU外设的寄存器字段HCU_CR[MSGLEN]中配置。但当用户需要处理(加密或解密)长度大于 32768 / 65536 字节的消息块,就需要使用处理多块消息的机制:需要指定寄存器HCU_CR[MSGB]和HCU_CR[MSGE],表示即将要进行处理的数据块是开始块(Begin Message)、中间块(Middle Message)或是结束块(End Message),并且需要配置HCU_CR[CS]=1指定即将处理完成数据块后,需要为下次计算保留种子(在AES-CBC和AES-CTR两种计算模式下,除了Key之外,还需要配合IV和CTR值才能启动数据块的计算)。
存储上下文数据,使用CR[CS]寄存器
大部分计算过程,都是对于一段不长的数据进行计算,经过一次计算就可以得到最终的结果。
但对于AES-CBC和AES-CTR这两种计算过程,可能会计算一组比较长的数据。在开始计算数据前,还需要预先设定IV寄存器(Initial Vector)和CTR寄存器参与计算。当设置HCU_CR[CS]=1,处理完数据块后,产生的IV和CTR值将被载入到硬件的HCU_IV寄存器和HCU_CTR寄存器,供下一个数据块的处理过程使用,并以此类推。
操作流步骤
通过HCU_MSGINFO和HCU_MSGADL分别指定完整数据块的长度和每次参与计算的数据子块的长度。设置HCU_CR[CS]=1,启用保存计算上下文。设置[HCU_CR[MSGB]:HCU_CR[MSGE]]的值为0b10、0b00、0b01,指定即将处理最开始的子数据块、若干个中间子数据块和最后一个字数据块。
- 配置准备开始执行分多块的计算:
- 配置
HCU_MSGINFO寄存器,设定真个长消息的数据长度(如果是AES-CCM,则不包含额外的数据长度)。 - 设置
HCU_CR[CS]=1,启用保存计算上下文。
- 配置计算第一个数据块:
- 设置
HCU_CR[MSGB]=1, HCU_CR[MSGE]=0,指定即将处理长消息的第一个子数据块。 - 设置
HCU_MSGADL[MSGLEN],指定即将处理的一个子数据块的长度。 - 配置执行加解密引擎。
- 设置
HCU_GO[GO]=1,启动计算引擎。等待计算完成。 - 当硬件计算完成后,将有标志位
HCU_SR[OD]=1。
- 配置计算中间的数据块:
- 设置
HCU_CR[MSGB]=0, HCU_CR[MSGE]=0,指定即将处理长消息的中间子数据块。 - 其余操作同上述计算过程相同。
- 配置计算最后的数据块:
- 设置
HCU_CR[MSGB]=0, HCU_CR[MSGE]=1,指定即将处理长消息的中间子数据块。 - 其余操作同上述计算过程相同。
注意:
- 分多块计算的功能仅适用于AES(CCM / CMAC)和 SHA 引擎。
- 设置各分块的大小,在计算SHA-256时,应为64字节的倍数,在计算SHA-384时,应为128字节的倍数。
存放密钥Key
根据手册中存储空间(Memory Map)和EFM模块(Embedded Flash Module)章节中的介绍,YTM32微控制器片内的Flash中,还划分了一块区域HCU_NVR,专门用于存放同HCU相关的密钥数据。如图x所示。

HCU_NVR中可以存放32组 AES-256的Key。用户可通过配置EFM_CTRL[AES_KEY_SEL]寄存器,指定AES-256的Key序号,然后在EFM_CMD寄存器中写入Load AES Key命令,如图x所示,就可以将对应的Key从Flash中的HCU_NVR载入到HCU_KEY寄存器中,参与AES算法的计算。这就是使用硬件密钥的方法。

当然,在调试阶段,或者需要使用灵活密钥的情况下,用户软件也可以不使用预先存放在硬件Flash中的密钥,而直接向HCU_KEY寄存器中写入Key值参与计算。
出于安全的考虑,用户软件(通过CPU)不能直接读取HCU_NVR存储区和HCU_KEY寄存器中的数据。用户可以通过写Flash的方式(带有KEY)向HCU_NVR中写数,但除了最初写数的人,别人是无法再读出正确的数。
关于FIFO
Input FIFO入口寄存器的位宽是32b,但手册上明确说明,要求每次向FIFO中写数必须为128b,这也就意味着对Input FIFO的操作,每次都要加倍再加倍,连续4次写入才算完成一次操作。

Input FIFO可以通过Watermark触发中断,但Watermark的值是以字(1 Word)为单位的,这也就意味着Watermark的实际设定值必须是4的倍数(4个Word对应128b)。
至于Input FIFO Watermark的中断,这里有一个逻辑。在Operation Done事件到来之前,Input FIFO Watermark的事件都是按需触发的,即只要当前FIFO中的数据量(Word数量)小于Watermark的设定值,就可以触发对应的中断。但若Operation Done事件到来,此时Input FIFO的检测逻辑就停了,哪怕Input FIFO中的数据已经耗尽,库存低于Watermark值,(刚消耗掉最后一组128b数据后),也不会再产生Input FIFO Watermark的中断。因此在YTMicro SDK的样例代码中,停用Input FIFO Watermark中断的操作并不是等着一个空的Input FIFO触发,而是同Operation Done事件放在一起停用的。
void HCU_IRQHandler(void)
{/* Operate done handler */if ((HCU_GetStatusFlag(OPERATION_DONE_FLAG)) && (HCU_GetIntMode(OPERATION_DONE_FLAG))){/* clear flags. */HCU_ClearStatusFlag(OPERATION_DONE_FLAG); /* Clear operate done flag *//* disable interrupts. */HCU_SetIntMode(OPERATION_DONE_FLAG, false);HCU_SetIntMode(INPUT_FIFO_WATERMARK_FLAG, false); /* Disable input watermark interrupt */...
}
软件资源
YTMicro SDK中,提供了HCU外设模块的驱动程序,以及一个基本的样例工程hcu_ecb。
从笔者的经验看来,目前设计这个样例工程更多是为验证HCU驱动代码,并简单演示HCU模块的应用流程。从用户角度看,如果需要更充分有效地利用好HCU外设,原厂的开发团队应该在后续会设计和发布专门的功能安全软件组件,将这些硬件细节隐藏在将来会逐渐统一的通用HSM软件接口之下(例如集成到AutoSAR软件体系中),因为HSM的开发者大多是算法专家,相对于某个具体的外设模块的实现,他们更多关注的是软件的应用场景,以及实际计算的速率。
所以,这里还是期待原厂的软件开发团队继续为开发者带来一些惊喜。
Performance
HCU模块在YTM的M系列中都有集成,但每个子系列中的HCU功能略有不同,如表x所示。


以 YTM32B1ME0 为例,在系统时钟为 120MHz PLL 下,测量各个算法处理 1KB 明文与 4KB 明文所需的时间。如下表所示。

小节
本文简要介绍了密码学在汽车电子系统中的应用场景,详细介绍了YTM32信息安全子系统中的核心模块HCU外设模块,以及基本用法,在文末汇总了HCU在YTM32微控制器中的分布情况,以及执行速度的参考指标。
本文尚未深入探究HCU以及信息安全的应用,期待后续HSM技术的应用规范逐渐形成标准,开发团队可依据规范开发和发布专用信息安全软件包。
相关文章:
YTM32的HSM模块在信息安全场景中的应用
YTM32的HSM模块在信息安全场景中的应用 文章目录 YTM32的HSM模块在信息安全场景中的应用引言应用场景:一点点密码学基础硬件:YTM32的信息安全子系统HCU外设模块硬件特性基本的应用操作流程,以计算AES-ECB为例硬件上对处理多块数据上的一些设计…...
时间序列大模型:TimeGPT
论文:https://arxiv.org/pdf/2310.03589.pdf TimeGPT,这是第一个用于时间序列的基础模型,能够为训练期间未见过的多样化数据集生成准确的预测。 大规模时间序列模型通过利用当代深度学习进步的能力,使精确预测和减少不确定性成为…...
CloudPanel RCE漏洞复现(CVE-2023-35885)
0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…...
WPF多值转换器
背景:实现Slider拖动可以调整rgb 单转换器:WPF中数据绑定转换器Converter-CSDN博客 在View中: <StackPanel Orientation"Vertical"><Slider x:Name"slider_R" Minimum"0" Maximum"255" Wi…...
x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言
目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统:综合 Perl 档案网络 (CPAN) 提供了超过 25,0…...
Jedis(一)与Redis的关系
一、Jedis介绍: 1、背景: Jedis是基于Java语言的Redis的客户端,Jedis Java Redis。Redis不仅可以使用命令来操作,现在基本上主流的语言都有API支持,比如Java、C#、C、PHP、Node.js、Go等。在官方网站里有一些Java的…...
K8S--安装Nginx
原文网址:K8S--安装Nginx-CSDN博客 简介 本文介绍K8S安装Nginx的方法。 1.创建Nginx目录及配置文件 mkdir -p /work/devops/k8s/app/nginx/{config,html} 在config目录下创建nginx.conf配置文件,内容如下: # events必须要有 events {wo…...
[BUUCTF]-PWN:babyfengshui_33c3_2016解析
又是一道堆题,先看保护 关键信息是32位,没开pie 直接看ida 大致是alloc创建堆块,free释放堆块,show查看堆块内容,fill填充堆块内容 其他的都没啥关键的要讲,但alloc那里非常需要解析一下 解释如上图 再具…...
小程序系列--9.生命周期
1. 什么是生命周期? 2. 生命周期的分类 3. 什么是生命周期函数 4. 生命周期函数的分类 5. 应用的生命周期函数 6. 页面的生命周期函数...
SQL注入实战操作
一:SQl注入分类 按照注入的网页功能类型分类: 1、登入注入:表单,如登入表单,注册表单 2、cms注入:CMS逻辑:index.php首页展示内容,具有文章列表(链接具有文章id)、articles.php文 章详细页&a…...
Microsoft Remote Desktop for Mac(远程桌面连接)激活版
Microsoft Remote Desktop是一款由微软开发的远程桌面连接工具,它允许用户从另一台计算机或移动设备远程连接到Windows桌面或服务器。 以下是该软件的一些主要特点和功能: 跨平台支持:Microsoft Remote Desktop支持Windows、macOS、iOS和Andr…...
分布式日志
1 日志管理 1.1 日志管理方案 服务器数量较少时 直接登录到目标服务器捞日志查看 → 通过 rsyslog 或shell/python 等脚本实现日志搜集并集中保存到统一的日志服务器 服务器数量较多时 ELK 大型的日志系统,实现日志收集、日志存储、日志检索和分析 容器环境 …...
21.云原生之ArgoCD CICD实战(部分待补充)
云原生专栏大纲 文章目录 部署项目介绍项目结构介绍GitLab CI/CDGitLab CI/CD主要特点和功能 部署测试argocd的cd过程CICD工作流准备工作github中工作流文件创建gitlab中工作流文件创建【实操待补充】GitLab CI示例 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami …...
一文读懂JavaScript DOM节点操作(JavaScript DOM节点操作详解)
一、什么是节点 DOM模型是树状结构模型,二组成这棵树的就是一个个点,在网络术语中称之为节点。 节点是一个模型中最基本的组成单位。DOM模型是由一个个节点组成的,DOM节点也有其不同的类型。 二、节点类型 DOM节点分为5种类型:…...
【Linux】常见指令(一)
前言: Linux有许多的指令,通过学习这些指令,可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…...
C语言大师(8)异常处理
引言 异常处理是C编程中处理运行时错误的关键机制。它通过 try、catch 和 throw 关键字提供了一种强大的方法来处理程序执行中可能出现的异常情况。了解如何有效地使用这些机制对于编写健壮且可维护的程序至关重要。 1. 基本异常处理 在C中,try 块用于包围可能发生…...
网络防御保护——1.网络安全概述
一.网络安全概念 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安全 APT攻击 --- 高级持续性威胁 网络安全(网络空间安全--Cyberspace)从其本质上讲就是网络上的信息安全,指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露…...
SpringBoot整合ElasticSearch实现分页查询
本文使用SpringBoot整合ElasticSearch实现分页查询 文章目录 环境准备 环境准备 还是继续使用spring-boot-starter-data-elasticsearch来实现分页查询操作...
[C++]使用yolov8的onnx模型仅用opencv和bytetrack实现目标追踪
【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介绍】 随着人工智能技术的不断发展,目标追踪已成为计算机视觉领域的重要研究方向。Yolov8和ByTetrack作为当前先进的算法&…...
打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码
大家好,今天用SpringBoot、vue写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 ,包含前端和后端,可以直接运行 使用本技术实现的项目:aicnn.cn,欢迎大家体验 如果文章知识点有错误的地方…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
