news 2026/10/21 13:32:10

MATLAB实现一级倒立摆直线稳定性控制:从建模到LQR仿真

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MATLAB实现一级倒立摆直线稳定性控制:从建模到LQR仿真

做控制的人,十有八九都绕不过倒立摆这道坎。我第一次在MATLAB里把一级倒立摆“立住”的时候,说实话比当年第一次让板子上的LED闪起来还兴奋——LED闪了就是闪了,但倒立摆是天生不稳定的对象,你必须在每个控制周期里跟它较劲,稍微慢半拍它就倒给你看。

“基于MATLAB的一级倒立摆直线运动稳定性控制仿真”说白了就是这么一件事:一辆小车在直线轨道上运动,车上面铰接一根摆杆,你给它一个初始倾角,然后通过控制小车左右加速,把摆杆稳稳扶正。这个项目听起来像教科书上的经典实验,但它背后牵扯的东西一点不少:系统建模、线性化、状态空间方程、LQR最优控制、非线性仿真验证、参数整定……每一个环节都能单独拎出来写一篇长文。

这篇文章适合谁看?控制方向的学生、准备做毕业设计的本科生、刚接触现代控制理论的工程师,以及任何想搞清楚“LQR到底怎么用”的人。我会从数学推导开始,一路讲到MATLAB代码和Simulink模型,最后把我踩过的坑、调参的经验全部摊开讲,照着做你也能复现整套仿真。

1. 项目整体设计与思路拆解

1.1 为什么非要是“一级倒立摆”

倒立摆在控制领域的位置,相当于“hello world”在编程界的地位,但它远比hello world有价值。一级倒立摆是典型的欠驱动系统——你要控制小车的位置和摆杆的角度,但手上只有一个控制量:小车的驱动力。摆杆本身没有驱动,你只能通过加速小车,用惯性力“间接”把摆杆扶正。

这个特性让它成为绝佳的控制算法试验场。现实生活里大量系统都是欠驱动的:火箭起飞时的姿态控制、两轮自平衡车、双足机器人的步态控制、以及抓取机械臂在运动中的振动抑制。倒立摆的数学模型与研究方法是它们共同的基础。

更吸引人的是,倒立摆是个“简单但不好搞”的系统。说简单,因为它只有两个自由度,方程写出来不复杂;说不好搞,因为它在平衡点附近是处处不稳定的——你手一松,摆杆马上倒下,而且倒下的速度比你反应快得多。这个“简单+不稳定”的组合,让它可以用来分析几乎所有线性控制方法的能力边界。

1.2 控制方案选型:为什么先走LQR

设计倒立摆控制器,可选的路子很多:经典PID、根轨迹法、极点配置、LQR最优控制、模糊控制、滑模控制、自适应控制……但在仿真阶段,我强烈建议先用LQR(Linear Quadratic Regulator,线性二次型调节器)。

原因是LQR有三大优势,恰好对应倒立摆仿真的三个痛点:

第一,它天然支持多变量控制。倒立摆有四个状态(小车位移、小车速度、摆杆角度、摆杆角速度),PID虽然也能调,但一个PID回路管不了四个状态,实际做的时候要额外加虚拟反馈或者串级结构,麻烦。LQR可以直接处理多输入多输出状态空间方程,一次设计出完整的反馈增益矩阵。

第二,它自带“性能调优旋钮”。LQR的权重矩阵Q和R可以直观地表达你的控制目标:你想让角度收敛快就加大角度权重,你想让小车位移别跑太远就加大位移权重,你想让控制力别太大就加大R。这种“按需加权”的设计方式非常符合工程直觉。

第三,它和状态空间模型是无缝对接的。前面你花力气推导系统的状态方程,下一步用MATLAB的lqr函数一行命令就能算出反馈增益,整个链路特别顺畅。

作为一个基准控制器,LQR做出来的结果非常干净,后续不管你要加非线性补偿、鲁棒控制还是扰动观测器,都可以在LQR基础的框架上叠加对比,逻辑非常清晰。

1.3 完整仿真链路:从物理模型到结果曲线

整个项目我按四步走,这个顺序也是我认为做所有控制仿真都应该遵循的顺序:

  • 建模:用拉格朗日方程推导系统的运动方程,再在平衡点附近做小角度线性化,得到标准的状态空间表达式。
  • 控制器设计:选择合适的性能指标,用LQR解出反馈增益矩阵K。
  • 仿真验证:先用线性模型快速验证控制效果,再切换成非线性动力学模型做“压力测试”,看控制器在模型误差下还稳不稳。
  • 结果分析:观察小车位移、摆杆角度、控制力的响应曲线,确认收敛速度、超调量、稳态精度是否满足设计指标。

这个流程最巧妙的地方在于“一鱼两吃”:线性模型用来快速调参,非线性模型用来验证鲁棒性。很多新手一开始直接拿线性模型调完觉得万事大吉,结果换成非线性模型就发散,就是因为缺少了第三步的交叉验证。

2. 数学模型建立与参数解析

2.1 从拉格朗日方程开始推导

建模这件事,从牛顿力学硬推也行,但我推荐用拉格朗日方程,因为它对约束多、自由度多的系统更友好,推导过程不容易出错,出错也更容易检查。

先定义系统参数:小车质量M,摆杆质量m,摆杆质心到转轴的距离l(注意不是摆杆全长,是质心距离),重力加速度g,小车位移x,摆杆相对竖直方向的偏角θ,作用在小车上的水平驱动力F。

系统的动能包含两部分。小车动能是:

T车 = 0.5 M ẋ²

摆杆质心的速度要小心算。摆杆质心的位置是(x + l sinθ, l cosθ),对时间求导得到速度分量,合成后摆杆动能是:

T摆 = 0.5 m (ẋ² + 2l ẋ θ̇ cosθ + l² θ̇²)

系统的势能来自摆杆质心高度变化:

V = m g l cosθ

拉格朗日量L = T - V,代入欧拉-拉格朗日方程,分别对x和θ求偏导,得到两个耦合方程:

(M+m) ẍ + m l θ̈ cosθ - m l θ̇² sinθ = F

m l ẍ cosθ + m l² θ̈ + m g l sinθ = 0

看到没有,这两个方程一个描述小车运动,一个描述摆杆摆动,但它们互相耦合——小车加速会影响摆杆,摆杆摆动也会影响小车。这就是倒立摆复杂性的数学根源。

到这里模型是完整的非线性模型,没做任何近似。后面所有线性控制方法都要在这个基础上做简化。

2.2 小角度线性化与状态空间化

控制器设计需要线性模型,所以在平衡点(θ=0)附近做小角度近似。标准做法是取:

sinθ ≈ θ, cosθ ≈ 1, θ̇² ≈ 0

代入上面的耦合方程,得到线性化模型:

(M+m) ẍ + m l θ̈ = F

m l ẍ + m l² θ̈ + m g l θ = 0

从这两个方程中解出ẍ和θ̈。先把第二个方程除以ml,得到ẍ = -l θ̈ - g θ,代到第一个方程里,化简后得到:

ẍ = (m g / M) θ + (1 / M) F

θ̈ = -((M+m) g / (M l)) θ - (1 / (M l)) F

你看,线性化之后,小车的加速度只跟角度和控制力有关,摆杆的角加速度也只跟角度和控制力有关,完全去掉了速度耦合项,这就是线性模型的简洁之处。

现在定义状态向量x = [x, ẋ, θ, θ̇]ᵀ,控制输入u = F,就可以写成标准状态空间形式:

ẋ = A x + B u

其中:

A = [0 1 0 0 ] [0 0 (m g / M) 0 ] [0 0 0 1 ] [0 0 -((M+m) g)/(M l) 0 ] B = [0; 1/M; 0; -1/(M l)]

把A、B矩阵拿出来,你的“建模”任务就完成了。后面所有线性控制方法,不管是LQR还是极点配置,都是围绕这套矩阵展开的。

2.3 参数取值与物理意义

仿真参数我建议从一个真实实验平台的量级出发,别拍脑袋乱填,不然后面调控制器的时候你会被不合理的物理参数坑惨。

我用的参数如下,你可以按自己的需求调整:

参数数值单位说明
M1.0kg小车质量,包含电机转子折算质量
m0.1kg摆杆质量
l0.5m摆杆质心到转轴距离
g9.8m/s²重力加速度

这几组参数隐含了系统的两个重要特征值。把数值代入A矩阵,用MATLAB算一下eig(A),你会发现系统矩阵有两个极点落在右半平面——正实部极点对应的就是那个“不扶就倒”的不稳定模态。这个检查很值得做,它验证了模型的正确性:一个稳定的物理对象不可能在右半平面有极点,倒立摆必须有,这才是正确的模型。

2.4 建模环节的几个坑

建模这块看起来推导简单,但我见过太多人在这一步翻车,说几个高发问题:

第一个坑是把l当成摆杆全长而不是质心距离。如果摆杆是均匀杆,质心在杆的中间,l应该是摆杆长度的一半。用错这个参数,系统的固有频率会直接偏掉,控制器设计出来以后跟实际对象对不上。

第二个坑是线性化时把θ̇²丢掉的时机。很多教材在列方程时就先近似再推导,结果初学者搞不清楚哪些项是被“近似”删除的。我的建议是先用完整的非线性方程推导,最后一步再做线性化,这样你能看清楚每一个被省略的项,也知道它们在什么情况下不能省略——比如摆杆高速摆动的时候,θ̇²项的影响是没法忽略的。

第三个坑是搞错状态向量的排列顺序。后面写代码、写Simulink模型、算反馈增益K的时候,所有矩阵的顺序必须完全一致。我习惯用[x, ẋ, θ, θ̇],你选了就要从头到尾贯彻,中途换顺序会混乱到怀疑人生。

3. 控制器设计与MATLAB仿真实现

3.1 LQR权重矩阵的调节思路

LQR的核心是最小化一个二次型性能指标:

J = ∫(xᵀQx + uᵀRu) dt

这个指标的经济学含义很直白:Q里每一项代表状态偏离零点的“罚款”,R代表控制能量的“罚款”。你希望系统状态远离原点时付出代价,用控制力努力拉回来也要付出代价,两者叠加,找最优折中。

Q是4×4的对角阵,对应四个状态的权重:

  • Q(1,1):小车位移权重。越大,小车越不愿意远离原点,但代价是初始阶段加速度更猛。
  • Q(2,2):小车速度权重。影响阻尼感,越大越能抑制高速运动。
  • Q(3,3):摆杆角度权重。这是最核心的权重,因为保持摆杆竖直是第一目标,一般设置得比位移权重大一个数量级。
  • Q(4,4):摆杆角速度权重。影响角度的超调量,越大越“拽着”角速度。

R是控制力的权重。R越小,系统允许用越大的力去扶正摆杆,响应快但控制力的峰值高;R越大,控制越保守,响应慢但更省力。

我常用的初值是Q = diag([100, 10, 1000, 100]),R = 1。这个组合的含义是:角度误差的优先级是位移误差的10倍,而控制力本身没有过强的约束。基于这个权重,用MATLAB一行命令就能算出K:

K = lqr(A, B, Q, R)

打印出来的K大概是这样一组数:位移增益量级在几百,速度增益在几十,角度增益在几千,角速度增益在几百。角度增益明显大于位移增益,这就是“优先扶正、其次归位”的控制策略。

3.2 完整MATLAB脚本:从参数到仿真曲线

我直接把能跑的完整脚本贴在这里,并逐段解释。这段代码包含两个部分:主脚本用ode45对非线性模型做仿真,验证LQR控制器在真实模型上的表现。为什么要用非线性模型?因为线性控制器是在小角度假设下设计的,但仿真里初始角度可能到10度甚至更大,非线性模型才是对它真正的考验。

主脚本:

% ===== 系统参数 ===== M = 1.0; % 小车质量 kg m = 0.1; % 摆杆质量 kg l = 0.5; % 摆杆质心到转轴距离 m g = 9.8; % 重力加速度 m/s^2 % ===== 线性化状态空间模型 ===== A = [0 1 0 0; 0 0 (m*g/M) 0; 0 0 0 1; 0 0 -((M+m)*g)/(M*l) 0]; B = [0; 1/M; 0; -1/(M*l)]; C = eye(4); D = zeros(4,1); % ===== LQR 控制器设计 ===== Q = diag([100, 10, 1000, 100]); R = 1.0; K = lqr(A, B, Q, R); % 显示反馈增益 disp('LQR Feedback Gain K:'); disp(K); % 检查闭环极点 eig_closed = eig(A - B*K); disp('Closed-loop poles:'); disp(eig_closed); % ===== 非线性仿真 ===== x0 = [0; 0; 0.1; 0]; % 初始状态:角度 0.1 rad ≈ 5.7° tSpan = [0 5]; [t, x] = ode45(@(t, x) nonlinearCartPole(t, x, M, m, l, g, K), tSpan, x0); % ===== 计算控制力 ===== u_hist = zeros(length(t), 1); for k = 1:length(t) u_hist(k) = -K * x(k,:)'; end % ===== 绘图 ===== figure; subplot(3,1,1); plot(t, x(:,1), 'LineWidth', 1.5); ylabel('位移 x (m)'); title('LQR控制一级倒立摆——非线性模型仿真'); grid on; subplot(3,1,2); plot(t, x(:,3) * 180/pi, 'LineWidth', 1.5); ylabel('摆杆角度 θ (°)'); grid on; subplot(3,1,3); plot(t, u_hist, 'LineWidth', 1.5); ylabel('控制力 F (N)'); xlabel('时间 (s)'); grid on;

对应的非线性模型函数:

function dx = nonlinearCartPole(~, x, M, m, l, g, K) % 状态向量: x = [x_pos, x_vel, theta, theta_vel] x_pos = x(1); x_vel = x(2); theta = x(3); theta_vel = x(4); % LQR 控制律: u = -K * x u = -K * x; % 非线性动力学方程,来自拉格朗日推导 % 质量矩阵与右侧力向量 M_mat = [M + m, m*l*cos(theta); m*l*cos(theta), m*l^2]; rhs = [u + m*l * theta_vel^2 * sin(theta); -m*g*l * sin(theta)]; % 解加速度 acc = M_mat \ rhs; x_ddot = acc(1); theta_ddot = acc(2); dx = [x_vel; x_ddot; theta_vel; theta_ddot]; end

这里我用了完全非线性的拉格朗日方程来判断LQR控制器的效果。如果你把初值设成0.1弧度(约5.7度),控制器应该能在大约2秒内把摆杆拉回竖直并稳定。这个“线性控制器+非线性仿真验证”的思路,一定要养成习惯。

3.3 Simulink模型搭建要点

有些人喜欢用Simulink做仿真,因为可以搭出更直观的信号流。搭建方式有三种,复杂度递增:

最简单的是用State-Space块。在Simulink库中找到State-Space模块,把A、B、C、D矩阵填进去,输入接一个Mux算出来的反馈信号u = -K*x,输出直接用Mux拆出四个状态。整个过程五分钟搞定,适合快速验证。

但我个人更推荐用积分器模块手搭,因为你能完全掌控信号走向,后面加非线性项也方便。搭法如下:

  • 放两个Integrator模块串联,第一个输出小车速度ẋ,第二个输出小车位移x。
  • 再放两个Integrator模块串联,第一个输出角速度θ̇,第二个输出摆杆角度θ。
  • 在积分器输入端,用Gain模块和Sum模块搭出线性化方程: ẍ = (m g / M) θ + F / M θ̈ = -((M+m) g / (M l)) θ - F / (M l)
  • 反馈信号F用Gain模块乘以-K,输入来自四个状态信号。
  • 把四个状态信号用Mux汇总,乘上-K矩阵,得到F。

用Integrator搭的好处是,你可以在θ的位置加一个饱和模块模拟机械限位,或者加一个传感器噪声模块,逐步把仿真做“脏”,越来越接近真实系统。

一个重要的Simulink注意点:如果你在搭反馈回路的时候发现仿真报“代数环”警告,通常是因为某个模块的输出直接参与了同一时刻的输入计算。解决办法是在反馈路径上加一个Memory模块或者Transport Delay,把信号延迟一个步长,破坏代数环。这在LQR控制里不太常见,但如果你加了非线性观测器或者补偿器,大概率会碰到。

3.4 仿真结果怎么读

仿真跑完之后,不要只盯着“有没有稳住”看,要学会从三条曲线上读信息:

位移曲线:观察小车是不是最终回到了原点附近。LQR的期望是渐近稳定到原点,所以稳态位移应该趋向0。如果稳态位移不为0,检查是不是有常值扰动没被抑制——线性LQR对恒定扰动是有稳态误差的,要加积分项或者扰动观测器才能解决。

摆杆角度曲线:关注两个指标——峰值偏差和收敛时间。峰值偏差是初始角度之外的最大偏离角,它反映了控制器的“拽回力度”;收敛时间是你定义的在多少误差范围内算“稳住”,我一般取角度在±0.5度以内持续不超出。好的LQR设计角度响应没有振荡,几乎是一路单调收敛。

控制力曲线:这是很多人忽略的。观察控制力的峰值是不是超过了物理系统的承受范围。如果你的电机只能输出20N,结果仿真里控制力峰值到了50N,那仿真再好看也没用,真实系统一上电就饱和。

我仿真跑下来的典型结果是:初始角度5.7度,位移最大跑到0.15米左右,摆杆角度约1.5秒内收敛到0.5度以内,控制力峰值大约15N,车辆最终回到原点。这个结果符合预期,说明权重设置合理。

4. 常见问题与排查技巧实录

4.1 仿真一跑就散:第一反应查这几项

倒立摆仿真发散,是我被问得最多的问题。别慌,按优先级排查:

第一查初始角度。线性控制器设计基于小角度假设,你初始化给了0.5弧度(接近30度),非线性模型必然发散,因为线性化模型在30度的时候早就不准了。解决办法:把初始角度控制在0.15弧度以内,验证线性控制的适用边界。

第二查Q和R的比例。如果你发现角度收敛很快、位移跑飞了,那是Q(1,1)太小;如果控制力剧烈振荡,那是R太小,增益过大导致反馈太“猛”。这种情况第一眼看控制力曲线,满幅振荡就是增益过大。

第三查计算步长。如果你用Simulink默认的可变步长,遇到stiff系统可能会不收敛。尝试把求解器换成ode45或者设置最大步长为0.01秒。很多时候不是控制器的问题,是数值积分的问题。

第四查符号。LQR反馈是u = -Kx,很多人习惯在模型里直接写u = Kx,符号错了整个闭环就是正反馈,摆得比没有控制器还快。这个错误低级但极其常见,我用加粗提醒:反馈符号错了,系统只会更快发散。

4.2 调参经验:Q和R的几条实用法则

调LQR权重,不要一次全改。我用一套“分层调参法”:

先固定R = 1不动,Q矩阵从对角单位阵开始(Q = eye(4)),看仿真结果找感觉。然后一层层调整:先单独增大Q(3,3)直到角度收敛速度满足要求,再增大Q(1,1)抑制位移跑远,最后微调Q(2,2)和Q(4,4)处理超调和阻尼。

举个例子,如果角度收敛慢,把Q(3,3)从1000提到2000,角度响应明显变快,但控制力峰值也会上升。如果位移回不到原点附近,把Q(1,1)从100提到500,位移峰值会减小,但小车初始加速度更猛。这个过程有点像调音响的均衡器——你先找到影响最大的那个旋钮,再微调其他频段。

再有,如果你发现LQR设计的响应“太软”,有个技巧是把闭环极点往左半平面推移。LQR的性能由Q和R决定,但等价地可以通过预设闭环极点来反向构造Q矩阵。不过这对初学者不友好,我建议还是老老实实调Q和R,直观得多。

4.3 从仿真到实物的差距提醒

如果有机会把这套仿真移植到真实实验平台上,至少有三个差距你得提前有心理准备:

第一,线性模型忽略了摩擦。仿真里小车轨道没有摩擦力,真实导轨有黏性摩擦和静摩擦。摩擦会让小车难以启动,也会造成低速时的小幅力振荡。解决思路是在控制律中加入摩擦补偿项。

第二,执行器有饱和。真实电机输出力不是无界的,仿真里控制力峰值15N可能没问题,但换成实际电机可能到了10N就饱和了。执行器饱和是一种强非线性,会导致“积分饱和”甚至周期振荡。在仿真里加一个饱和模块,提前看看系统在出力受限时的表现。

第三,传感器噪声和采样周期。真实编码器有量化分辨率和噪声,控制器的采样周期也不是仿真里的连续时间。把这些因素逐步加入仿真模型,让仿真尽量“脏”起来,是缩短仿真与实物差距最有效的办法。

5. 后续能玩的方向

5.1 控制算法的进阶

LQR做完了,下一步可以尝试给系统加扰动观测器,或者改用模型预测控制。我特别推荐加积分型LQR——在原有状态向量里加入误差积分状态,形成新的增广系统,再用LQR设计。这样能消除恒定扰动下的稳态误差,控制效果比纯LQR上升一个档次。

滑模控制也是不错的选择,它对参数摄动和外部扰动有很强的鲁棒性。倒立摆的模型不确定性主要来自摩擦和摆杆质心偏移,滑模控制可以直接“忽略”这些不确定性。代价是控制量会出现高频抖振,你在仿真里能直观地看到振铃现象。

5.2 控制对象的进阶

一级直线倒立摆的“毕业设计”是二级倒立摆。二级摆的方程复杂程度翻倍,状态向量变成6维,控制难度骤然增加,LQR要想把两个摆杆都立起来,权重调整的挑战完全不同。这可以让你真正理解什么是高维欠驱动系统。

如果不想升级对象也可以,把直线导轨改成旋转底座就是旋转倒立摆。旋转倒立摆的运动方程更复杂,因为底座旋转会产生径向加速度,线性化模型的结构都不一样。

5.3 平台扩展:从MATLAB仿真走向半实物

仿真做熟之后,可以关注实时仿真工具,把MATLAB里写的控制器部署到真实控制器硬件上。现在很多实验平台支持硬件在环测试,可以在PC上跑被控对象模型,控制器跑在实物处理器上,中间通过IO板卡连接。这个过程能体验到代码生成、时序约束、实时调试这些仿真根本不涉及的工程细节。

说句实在话,从“仿真里立住”到“实物上立住”,中间的距离比从零写代码到仿真通过还要长。但正是这段距离,才是控制工程师真正的价值所在。

最后分享一个我自己的习惯:所有仿真项目,第一版跑通之后我都会返工一次,把模型里的参数全部改成命名常量,把注释写到“三个月后拿出来依然能看懂”的程度,把仿真结果导出并和设计指标对照归档。这些看起来不酷的整理工作,在毕业设计和工程项目里,反而能帮你省下最多的时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 13:31:10

AI技术融入英语学习:四条主线与实操流程详解

1. AI技术切入英语学习的四条主线如果你和我一样,学了十来年英语,最后还是卡在“开不了口、写不顺手、背了就忘”这三座大山上,那这两年AI技术的爆发,确实值得重新审视一下。AI技术在英语学习中的应用,最核心的变化不是…

作者头像 李华
网站建设 2026/10/21 13:31:08

自定义类型转换机制深度解析:隐式与显式转换的工程实践

有这么一类功能需求,几乎所有写业务代码的人都遇到过:你从第三方接口拿回一个字符串,想把它当业务编码用;你在数据库里存了一个数字,希望查出来直接变成枚举;你定义了金额、百分比、坐标这类“值对象”&…

作者头像 李华
网站建设 2026/10/21 13:30:06

memU Bot上手实操:长期记忆对话式助手的信息管理应用

最近问我 memU Bot 的人突然多了起来,身边好几个做内容、做运营的朋友都在打听它到底怎么用。说实话,这个工具的名字听起来有点“极客”,但它解决的问题非常接地气:你每天在聊天工具里零散丢出去的信息、临时记下的想法、做了一半…

作者头像 李华
网站建设 2026/10/21 13:29:53

ROS 2机器人建图导航落地:SLAM Toolbox地图工程全解析

1. 整体设计与技术选型1.1 项目定位:先搞清楚 lingbot-map 到底要解决什么问题lingbot-map 这个名字拆开来很简单:lingbot 是一台基于 ROS 2 的差速轮式机器人(实验平台代号),map 就是这个机器人平台的地图模块。说白了…

作者头像 李华
网站建设 2026/10/21 13:29:29

从零搭建React轻量级组件库:技术选型、架构设计与踩坑实录

说起来很巧,我最近刚在内部技术分享上聊过这个代号为“Rea”的项目。有人可能觉得“Rea”听起来像某个框架的缩写,或者是某种新语言的代号,实际上它是我从零搭建的一个基于 React 的轻量级组件库项目。为什么起这个名字?纯粹是因为…

作者头像 李华
网站建设 2026/10/21 13:28:50

服务机器人室内导航:轻量地图模块lingbot-map设计实践

1. 项目从哪里来:为什么需要 lingbot-map先交代一下背景。我去年在做一个面向商场场景的服务机器人项目,核心功能之一就是帮顾客找路:电梯在哪、洗手间怎么走、某家店铺在哪层。当时我们内部管这个机器人叫 lingbot,而 lingbot-ma…

作者头像 李华