当前位置: 首页 > news >正文

多传感器融合定位十五-多传感器时空标定(综述)

多传感器融合定位十五-多传感器时空标定

  • 1. 多传感器标定简介
    • 1.1 标定内容及方法
    • 1.2 讲解思路
  • 2. 内参标定
    • 2.1 雷达内参标定
    • 2.2 IMU内参标定
    • 2.3 编码器内参标定
    • 2.4 相机内参标定
  • 3. 外参标定
    • 3.1 雷达和相机外参标定
    • 3.2 多雷达外参标定
    • 3.3 手眼标定
    • 3.4 融合中标定
    • 3.5 总结
  • 4. 时间标定
    • 4.1 离散时间
    • 4.2 连续时间
    • 4.3 总结

Reference:

  1. 深蓝学院-多传感器融合
  2. 多传感器融合定位理论基础

文章跳转:

  1. 多传感器融合定位一-3D激光里程计其一:ICP
  2. 多传感器融合定位二-3D激光里程计其二:NDT
  3. 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
  4. 多传感器融合定位四-3D激光里程计其四:点云线面特征提取
  5. 多传感器融合定位五-点云地图构建及定位
  6. 多传感器融合定位六-惯性导航原理及误差分析
  7. 多传感器融合定位七-惯性导航解算及误差分析其一
  8. 多传感器融合定位八-惯性导航解算及误差分析其二
  9. 多传感器融合定位九-基于滤波的融合方法Ⅰ其一
  10. 多传感器融合定位十-基于滤波的融合方法Ⅰ其二
  11. 多传感器融合定位十一-基于滤波的融合方法Ⅱ
  12. 多传感器融合定位十二-基于图优化的建图方法其一
  13. 多传感器融合定位十三-基于图优化的建图方法其二
  14. 多传感器融合定位十四-基于图优化的定位方法
  15. 多传感器融合定位十五-多传感器时空标定(综述)

1. 多传感器标定简介

1.1 标定内容及方法

在这里插入图片描述

1.2 讲解思路

  1. 以思路讲解为主,并给出参考文献和开源代码,不做过多细节展开;
  2. 对已有方法做汇总分析,以求能在新的任务中掌握标定方案设计思路。

2. 内参标定

2.1 雷达内参标定

在这里插入图片描述

  1. 目的
    由于安装原因,线束之间的夹角和设计不一致,会导致测量不准。

  2. 方法
    多线束打在平面上,利用共面约束,求解夹角误差。

  3. 参考
    论文:Calibration of a rotating multi-beam Lidar
    论文:Improving the Intrinsic Calibration of a Velodyne LiDAR Sensor
    论文:3D LIDAR–camera intrinsic and extrinsic calibration: Identifiability and analytical least-squares-based initialization

2.2 IMU内参标定

  1. 目的
    由于加工原因,产生零偏、标度因数误差、安装误差。

  2. 方法
    分立级标定:基于转台;
    迭代优化标定:不需要转台。

  3. 参考
    论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments
    代码:https://github.com/Kyle-ak/imu_tk

2.3 编码器内参标定

  1. 目的
    用编码器输出解算车的位移增量和角度增量,需已知轮子半径和两轮轴距。

  2. 方法
    以车中心雷达/组合导航做观测,以此为真值,反推模型参数。

  3. 参考
    论文:Simultaneous Calibration of Odometry and Sensor Parameters for Mobile Robots

2.4 相机内参标定

在这里插入图片描述

  1. 目的
    相机与真实空间建立关联,需已知其内参。

  2. 方法
    张正友经典方法

3. 外参标定

3.1 雷达和相机外参标定

在这里插入图片描述

  1. 目的
    解算雷达和相机之间的相对旋转和平移。

  2. 方法
    PnP是主流,视觉提取特征点,雷达提取边缘,建立几何约束。

  3. 参考
    论文: LiDAR-Camera Calibration using 3D-3D Point correspondences
    代码: https://github.com/ankitdhall/lidar_camera_calibration
    论文: Automatic Extrinsic Calibration for Lidar-Stereo Vehicle Sensor Setups
    代码: https://github.com/beltransen/velo2cam_calibration

3.2 多雷达外参标定

在这里插入图片描述

  1. 目的
    多雷达是常见方案,使用时将点云直接拼接,但前提是已知雷达之间的外参(相对旋转和平移)。

  2. 方法
    基于特征(共面)建立几何约束,从而优化外参。

  3. 参考
    论文:A Novel Dual-Lidar Calibration Algorithm Using Planar Surfaces
    代码:https://github.com/ram-lab/lidar_appearance_calibration

3.3 手眼标定

在这里插入图片描述

  1. 目的
    手眼标定适用于所有无共视,但是能输出位姿的传感器之间标定。包括:
    • 无共视的相机、雷达,或雷达与雷达之间;
    • 相机与IMU,或雷达与IMU之间(前提是IMU要足够好,或直接使用组合导航)。

  2. 方法
    均基于公式 AX=XBAX=XBAX=XB

  3. 参考
    论文:LiDAR and Camera Calibration using Motion Estimated by Sensor Fusion Odometry
    代码:https://github.com/ethz-asl/lidar_align

3.4 融合中标定

  1. 目的
    • 脱离标靶,实现在线标定;
    • 某些器件无法提供准确位姿(如低精度IMU),不能手眼标定。

  2. 方法
    在融合模型中,增加外参作为待估参数。

  3. 参考
    众多vio/lio系统,如vins、 lio-mapping、 M-Loam 等

3.5 总结

  1. 这些方法中,推荐优先级从高到低为:
    a. 基于共视的标定
    b. 融合中标定
    c. 手眼标定

  2. 建议
    应在良好环境下标定,尽量避免不分场景的在线标定。良好环境指观测数据优良的场景,例如:
    a. GNSS 信号良好;
    b. 点云面特征丰富,没有特征退化;
    c. 动态物体较少

4. 时间标定

4.1 离散时间

  1. 目的
    在原有离散时间融合模式下,简单地解决时间同步问题。
    在这里插入图片描述

  2. 方案 I
    在这里插入图片描述简单但巧妙的策略: IMU时间保持不变,图像上特征点基于匀速运动模型修改位置。
    与不考虑时间误差时相比,架构不变,使用极小的改动,实现了期望的效果。
    elk=zlk−π(RckwT(Pl−pckw))zlk=[ulkvlk]T.↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓elk=zlk(td)−π(RckwT(Pl−pckw))zlk(td)=[ulkvlk]T+tdVlk.\begin{array}{l} \mathbf{e}_l^k=\mathbf{z}_l^k-\pi\left(\mathbf{R}_{c_k}^{w^T}\left(\mathbf{P}_l-\mathbf{p}_{c_k}^w\right)\right) \\ \mathbf{z}_l^k=\left[\begin{array}{ll} u_l^k & v_l^k \end{array}\right]^T . \\ \downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow \\ \mathbf{e}_l^k=\mathbf{z}_l^k\left(t_d\right)-\pi\left(\mathbf{R}_{c_k}^{w^T}\left(\mathbf{P}_l-\mathbf{p}_{c_k}^w\right)\right) \\ \mathbf{z}_l^k\left(t_d\right)=\left[\begin{array}{ll} u_l^k & v_l^k \end{array}\right]^T+t_d \mathbf{V}_l^k . \end{array} elk=zlkπ(RckwT(Plpckw))zlk=[ulkvlk]T.↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓elk=zlk(td)π(RckwT(Plpckw))zlk(td)=[ulkvlk]T+tdVlk.参考文献:Online Temporal Calibration for Monocular Visual-Inertial Systems

  3. 方案 II
    在滤波中计算相机位姿时,直接按时间差对积分区间进行调整。
    状态量:x=[xITICq‾TCpITtdc1T⋯cMT]T\mathbf{x}=\left[\begin{array}{lllllll} \mathbf{x}_I^T & { }_I^C \overline{\mathbf{q}}^T & { }^C \mathbf{p}_I^T & t_d & \mathbf{c}_1^T & \cdots & \mathbf{c}_M^T \end{array}\right]^Tx=[xITICqTCpITtdc1TcMT]T
    相机位姿估计:c^new=[GCq(t+td)^GpC(t+td)^]=[ICq^⊗GIq^(t+t^d)Gp^I(t+t^d)+GIR^(t+t^d)TIp^C]\hat{\mathbf{c}}_{n e w}=\left[\begin{array}{c}{ }_G^C \widehat{\mathbf{q}\left(t+t_d\right)} \\ { }^G \widehat{\mathbf{p}_C\left(t+t_d\right)}\end{array}\right]=\left[\begin{array}{c}{ }_I^C \hat{\mathbf{q}} \otimes{ }_G^I \hat{\mathbf{q}}\left(t+\hat{t}_d\right) \\ { }^G \hat{\mathbf{p}}_I\left(t+\hat{t}_d\right)+{ }_G^I \hat{\mathbf{R}}\left(t+\hat{t}_d\right)^T{ }^I \hat{\mathbf{p}}_C\end{array}\right]c^new=[GCq(t+td)GpC(t+td)]=[ICq^GIq^(t+t^d)Gp^I(t+t^d)+GIR^(t+t^d)TIp^C]
    参考文献:Online Temporal Calibration for Camera-IMU Systems: Theory and Algorithms

4.2 连续时间

  1. 原因
    预积分中把时间差作为待估状态量,对时间差进行建模,如下:
    Δpmi=∑k=κi−1(ΔvmkΔtk+ΔRmk2f⁡(tk−δtm−bfm)Δtk2)Δvmi=∑k=κi−1ΔRmkf(tk−δtm)−bfm)ΔtkΔRmi=∏k=κi=1Exp⁡(ω(tk−δtm)−bωm)Δtk),\begin{array}{l} \Delta \mathbf{p}_m^i=\sum_{k=\kappa}^{i-1}\left(\Delta \mathbf{v}_m^k \Delta t_k+\frac{\Delta \mathbf{R}_m^k}{2} \operatorname{f}\left(t_k-\delta_t^m-\mathbf{b}_f^m\right) \Delta t_k^2\right) \\ \left.\Delta \mathbf{v}_m^i=\sum_{k=\kappa}^{i-1} \Delta \mathbf{R}_m^k \mathbf{f}\left(t_k-\delta_t^m\right)-\mathbf{b}_f^m\right) \Delta t_k \\ \left.\Delta \mathbf{R}_m^i=\prod_{k=\kappa}^{i=1} \operatorname{Exp}\left(\omega\left(t_k-\delta_t^m\right)-\mathbf{b}_\omega^m\right) \Delta t_k\right), \end{array} Δpmi=k=κi1(ΔvmkΔtk+2ΔRmkf(tkδtmbfm)Δtk2)Δvmi=k=κi1ΔRmkf(tkδtm)bfm)ΔtkΔRmi=k=κi=1Exp(ω(tkδtm)bωm)Δtk),由于要对时间差求雅可比,因此插值函数必须可导,雅可比如下:
    ΔRm(bω,δt)i≈ΔRm(bˉωm,δˉδm)iExp⁡(∂ΔRmi∂bωb^ωm+∂ΔRmi∂δtδ^tm).Δvm(bf,bω,δt)i≈ΔΔvm(bˉfm,bˉmm,δˉtm)i+∂Δvmi∂bfb^fm+∂Δvmi∂bωb^ωm+∂Δvmi∂δtδ^tmΔpm(bf,bω,,δt)i≈Δpm(bfm‾,bˉmm,δˉtm)i+∂Δpmm∂bfb^fm+∂Δpmi∂bωb^ωm+∂Δpmi∂δtδ^tm\begin{array}{l} \Delta \mathbf{R}_{m\left(\mathbf{b}_\omega, \delta_t\right)}^i \approx \Delta \mathbf{R}_{m\left(\bar{b}_\omega^m, \bar{\delta}_\delta^m\right)}^i \operatorname{Exp}\left(\frac{\partial \Delta \mathbf{R}_m^i}{\partial \mathbf{b}_\omega} \hat{\mathbf{b}}_\omega^m+\frac{\partial \Delta \mathbf{R}_m^i}{\partial \delta_t} \hat{\delta}_t^m\right). \\ \Delta \mathbf{v}_{m\left(\mathbf{b}_f, \mathbf{b}_\omega, \delta_t\right)}^i \approx \Delta \Delta \mathbf{v}_{m\left(\bar{b}_f^m, \bar{b}_m^m, \bar{\delta}_t^m\right)}^i+\frac{\partial \Delta \mathbf{v}_m^i}{\partial \mathbf{b}_f} \hat{\mathbf{b}}_f^m +\frac{\partial \Delta \mathbf{v}_m^i}{\partial \mathbf{b}_\omega} \hat{\mathbf{b}}_\omega^m+\frac{\partial \Delta \mathbf{v}_m^i}{\partial \delta_t} \hat{\delta}_t^m \\ \Delta \mathbf{p}_{m\left(\mathbf{b}_f, \mathbf{b}_{\omega,}, \delta_t\right)}^i \approx \Delta \mathbf{p}_{m\left(\overline{\mathbf{b}_f^m}, \bar{b}_m^m, \bar{\delta}_t^m\right)}^i+\frac{\partial \Delta \mathbf{p}_m^m}{\partial \mathbf{b}_f} \hat{\mathbf{b}}_f^m +\frac{\partial \Delta \mathbf{p}_m^i}{\partial \mathbf{b}_\omega} \hat{b}_\omega^m+\frac{\partial \Delta \mathbf{p}_m^i}{\partial \delta_t} \hat{\delta}_t^m \\ \end{array} ΔRm(bω,δt)iΔRm(bˉωm,δˉδm)iExp(bωΔRmib^ωm+δtΔRmiδ^tm).Δvm(bf,bω,δt)iΔΔvm(bˉfm,bˉmm,δˉtm)i+bfΔvmib^fm+bωΔvmib^ωm+δtΔvmiδ^tmΔpm(bf,bω,,δt)iΔpm(bfm,bˉmm,δˉtm)i+bfΔpmmb^fm+bωΔpmib^ωm+δtΔpmiδ^tm参考文献:3D Lidar-IMU Calibration based on Upsampled Preintegrated Measurements for Motion Distortion Correction
  2. 方法
    把输入建立为连续时间函数,从而可以在任意时间求导。
  3. 参考
    a. kalibr 系列
    论文:Continuous-Time Batch Estimation using Temporal Basis Functions
    论文:Unified Temporal and Spatial Calibration for Multi-Sensor Systems
    论文:Extending kalibr Calibrating the Extrinsics of Multiple IMUs and of Individual Axes
    代码:https://github.com/ethz-asl/kalibr
    b. 其他
    论文:Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation
    代码:https://github.com/APRIL-ZJU/lidar_IMU_calib

4.3 总结

  1. 时间差估计,在某些情况下不得已而为之,实际中应尽量创造条件实现硬同步;
  2. 不得不估计时,也应尽量在良好环境下估计。

相关文章:

多传感器融合定位十五-多传感器时空标定(综述)

多传感器融合定位十五-多传感器时空标定1. 多传感器标定简介1.1 标定内容及方法1.2 讲解思路2. 内参标定2.1 雷达内参标定2.2 IMU内参标定2.3 编码器内参标定2.4 相机内参标定3. 外参标定3.1 雷达和相机外参标定3.2 多雷达外参标定3.3 手眼标定3.4 融合中标定3.5 总结4. 时间标…...

开发微服务电商项目演示(三)

一,nginx动静分离第1步:通过SwitchHosts新增二级域名:images.zmall.com第2步:将本次项目的易买网所有静态资源js/css/images复制到nginx中的html目录下第3步:在nginx的核心配置文件nginx.conf中新增二级域名images.zma…...

C/C++排序算法(二) —— 选择排序和堆排序

文章目录前言1. 直接选择排序🍑 基本思想🍑 具体步骤🍑 具体步骤🍑 动图演示🍑 代码实现🍑 代码升级🍑 特性总结2. 堆排序🍑 向下调整算法🍑 任意树调整为堆的思想&#…...

爬虫笔记之——selenium安装与使用(1)

爬虫笔记之——selenium安装与使用(1)一、安装环境1、下载Chrome浏览器驱动(1)查看Chrome版本(2)下载相匹配的Chrome驱动程序地址:https://chromedriver.storage.googleapis.com/index.html2、学…...

STC15单片机软串口的使用

STC15软串口的使用📖在没有使用定时器资源的情况下,根据波特率位传输时间,利用STC-ISP工具自动计算出位延时函数。 ✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为:9600的串口数据传输: void BitTime(…...

Ansible的脚本------playbook剧本

一、剧本的前置知识点1、主机清单ansible默认的主机清单是/etc/ansible/hosts文件主机清单可以手动设置,也可以通过Dynamic Inventory动态生成一般主机名使用FQDNvi /etc/ansible/hosts [webserver] #使用方括号设置组名 www1.example.org #定…...

实验5-计算中值及分治技术

目录 1.寻找中位数(利用快速排序来寻找中位数) 2.分治方法求数组的和 3.合并排序...

dbeaver从excel导入数据笔记

场景 有excel的数据,需要做到数据库里。 方案一: 开发代码来实现。缺点是需要开发成本。 方案二: 数据库导入工具导入。不用开发,相对快速一些。 这里说下数据库工具导入。 操作过程 1、拿到excel数据文件,根据标题…...

PyTorch学习笔记:nn.MarginRankingLoss——排序损失

PyTorch学习笔记:nn.MarginRankingLoss——排序损失 torch.nn.MarginRankingLoss(margin0.0, size_averageNone, reduceNone, reductionmean)功能:创建一个排序损失函数,用于衡量输入x1x_1x1​与x2x_2x2​之间的排序损失(Ranking Loss)&…...

【JavaScript】34_Date对象 ,日期的格式化

8、Date Date 在JS中所有的和时间相关的数据都由Date对象来表示 对象的方法: getFullYear() 获取4位年份 getMonth() 返当前日期的月份(0-11) getDate() 返回当前是几日 getDay() 返回当前日期是周几(0-6) 0表示周日…...

计算机视觉 对比学习13篇经典论文、解读、代码

为了快速对 机器视觉中的对比学习有一个快速了解,或者后续复习,此处收录了 13篇经典论文、一些讲解地较好的博客和相应的Github代码,用不同颜色标记。 ​ 对比学习 13篇经典论文 论文代码和博客http://​www.webhub123.com/#/home/detail?p…...

MySQL 选择数据库

在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。 在 MySQL 中就有很多系统自带的数据库,那么在操作数据库之前就必须要确定是哪一个数据库。 在 MySQL 中,USE 语句用来完成一个数据库到…...

雅思经验(9)

写作:关于趋势的上升和下降在小作文中,真的是非常常见的,所以还是要积累一下。下面给出了很多词,但是在雅思写作中并不是词越丰富,分数就越高的。雅思写作强调的是准确性:在合适的地方用合适的词和句法。不…...

java面试题(二十)中间件redis

1.1 Redis可以用来做什么? 参考答案 Redis最常用来做缓存,是实现分布式缓存的首先中间件;Redis可以作为数据库,实现诸如点赞、关注、排行等对性能要求极高的互联网需求;Redis可以作为计算工具,能用很小的…...

JavaWEB必知必会-Servlet

目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…...

oralce查找返回不同的值,寻找不同的表(原创)

查找返回不同的值,寻找不同的表 select case a_id when 1 then (select b_id|| ||b_desc from b where b.b_ida.a_id) else (select e_id || ||e_desc from e where e.e_ida.a_id) end from a; 以上方法的缺陷是单表,判断。今天来了个挑战&#…...

Python-第四天 Python循环语句

Python-第四天 Python循环语句一、while循环1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例二、for循环1.for循环的基础语法1.1基础语法1.2 range语句2.for循环的嵌套应用三、循环中断 : break和continue1.continue2.break四、 综合案…...

spring中bean的生命周期(简单5步)

目录 一、概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二、例子讲解 一、概念 1.生命是bean的生命周期? 答:spring其实就是管理bean对象的工厂,它负责对象的创建&…...

10 个最难理解的 Python 概念

文章目录技术提升面向对象编程 (OOP)装饰器生成器多线程异常处理正则表达式异步/等待函数式编程元编程网络编程大家好,与其他编程语言相比,Python 是一门相对简单的编程语言,如果你想真正学透这门语言,其实可能并不容易。 今天我…...

【linux】线程概念

概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中&a…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...

Unity中的transform.up

2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

Python学习(8) ----- Python的类与对象

Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...