载具物理
全库目录221
本文目录19
车轮转得很快,车却没有向前走,可能是轮胎已经耗尽附着,也可能是车轮根本没有载荷。直接给车体设置速度看不到这两者的差别。载具物理先确定轮地几何,再把悬挂载荷交给轮胎,轮胎力同时改变车体运动和轮速;下一步用更新后的状态重新计算滑移。
下面沿四轮车的这条闭环展开。长度使用米、质量使用千克、时间使用秒,角度使用弧度。车体是一个刚体,每个车轮另存自转角速度;接触查询、传动、悬挂、轮胎与刚体积分通过明确的状态连接。参数表和参考计算给出一套可复算配置,轮胎曲线和传动结构也可在保持接口的前提下替换。
接触几何与悬挂
查询长度与轮心
每轮保存车体局部悬挂锚点、向下单位轴d、轮胎半径r、静止长度l₀和最小/最大长度lMin、lMax。车体变换把锚点A与d送到世界空间。沿d射线取得地面点P=A+sd和朝向车轮的单位法线n,s为查询距离。车体自身和轮形状从查询过滤中排除。
车轮沿悬挂轴的轮心为C=A+ld。先用半径r的球形包络近似轮胎查询,与局部地面平面相切时满足dot(n,C-P)=r。令a=-dot(n,d)>0,代入得到:
Q是球形包络的接触点。实际圆轮还带单位自转轴u;当轮轴有外倾、dot(n,u)非零时,圆轮沿地面法线的支撑半径为rEff=r*sqrt(1-dot(n,u)^2),于是lRaw=s-rEff/a,接触点改为Q=C-r*normalize(n-dot(n,u)*u)。无外倾时两种几何一致,外倾时球形包络会把轮心抬得更高。球形查询用于快速近似,圆轮或轮形扫掠用于保持实际轮形,后续用各自的Q与滚动力臂继续计算。
平地a=1时球形包络有l=s-r;坡面上直接减r会把轮心放错。例子取s=0.8、r=0.24、a=0.8,得到l=0.5米。查询使用射线近似局部平面,轮胎面对小台阶可能漏掉侧面;需要体积覆盖时改用轮形状扫掠,仍把接触平面送入后续步骤。
没有命中或lRaw大于lMax时,轮胎离地,载荷和轮胎力置零。a小于0.2时,命中接近悬挂轴平行的表面,本例把它交给车体碰撞处理,避免除法放大误差。其余位置取l=max(lMin,lRaw)。压缩超过lMin时,附加止挡弹簧处理超程;车体碰撞负责底盘与墙面等硬接触,两者的形状过滤需要避免重复产生轮地支撑。
压缩速度与法向载荷
压缩量取x=max(0,l₀-l)。先暂时固定本步悬挂长度l,计算该轮心位置由车体运动产生的速度vC0=vBody+omegaBody×(C-centerOfMass);其中旋转项包含锚点与悬挂轴方向随车体的转动,尚未包括长度变化产生的ldot*d。减去地面在Q处的速度后,沿n的分量记为vₙ。对本步固定法线与轮形的接触约束求导,有vₙ+ldot*dot(n,d)=0,故压缩速度xdot=-ldot=-vₙ/a。车体下落时压缩增加,阻尼向上;车体离开地面时阻尼降低支撑。车体旋转引起的速度也计入轮心位置速度,不能只使用车体质心速度。
圆轮外倾变化还会改变rEff:令h=dot(n,u),则rEffDot=-r*h*hDot/sqrt(1-h*h),hDot=dot(nDot,u)+dot(n,uDot)。完整约束给出xdot=(rEffDot-dot(nDot,C-Q)-vₙ)/a;球形包络有rEffDot=0,固定地面平面还有nDot=0,才回到上式。因为vₙ减去的是地面在Q处速度,法线变化项也使用C-Q;若改用P处地面速度才写C-P,二者不能混用。nDot来自移动地面角速度或连续接触平面的变化,uDot来自车体与转向运动。跨台阶或换接触面时导数不连续,本步重新初始化压缩历史并限制冲击,不能把不连续法线差直接当稳定阻尼速度。
本例的悬挂力沿向上轴−d作用,大小为:
k单位为牛顿/米,c为牛顿·秒/米。最后一项是明确的止挡刚度选择。Fz是悬挂力在地面法线上的投影,用作轮胎附着预算;将Fs原值直接作为Fz,会在悬挂轴倾斜时高估可用摩擦。
平地s=0.8、r=0.3、l₀=0.6,压缩量为0.1米。k=20000、c=2000、vₙ=−0.2时,压缩速度为0.2米/秒,Fs与Fz均为2400牛顿。坡面例子取前述l=0.5、c=0,Fs为2000牛顿,Fz为1600牛顿。把这个Fz传给轮胎,坡面几何才真正影响牵引。
平地、竖直悬挂且静止阻尼为零时,四轮静态配置先检查总支撑与车重平衡,再按前后轴到质心的力矩平衡分配静载。例如轴距L、质心距后轴b时,前轴载荷为Mgb/L,后轴为Mg−前轴;左右对称时各分一半。各轮静态压缩取其载荷除以k。加速和转向中的载荷变化由轮上支撑力的力矩与车体俯仰、侧倾共同产生,不能始终把Mg/4固定传入轮胎。
接触速度与轮胎力
轮胎坐标
先把转向与外倾后的真实轮轴u变到世界空间。资产将轴正向定义为使u×n与车轮前向一致,纵向取normalize(u×n);若导入时翻转u,同时翻转轮速与驱动扭矩的符号,不能只翻t而保持其余符号不变。横向取b=n×t。当轮轴接近地面法线,叉乘趋零,当前轮形不能定义稳定滚动方向,本步拒绝这份轮胎接触。接触横轴b与真实自转轴u在外倾时并不相同,后面的轮自转角动量使用u。
接触点相对轮心的向量为rContact=Q-C,有效滚动力臂为rho=-dot(cross(u,rContact),t)。无外倾且正向约定一致时rho=r;实际圆轮按上述Q得到rho=r,球形包络在外倾时得到rho=r*sqrt(1-dot(n,u)^2)。滑移中的胎面速度使用rhoω,纵向力的反作用扭矩使用rhoFx。这样接触几何变化不会只影响轮心,却遗漏转动与力矩的对应变化。以下无外倾数例有rho=r。
车体在Q处的速度为vBody+omegaBody×(Q-centerOfMass)。减去地面接触点速度,再投影到t和b得到vx、vy。此处的杠杆是向量,和轮胎标量半径r分别保存。移动平台若只减质心平移,平台旋转会被错误地算成轮胎侧滑。
这里采用将轮胎切向力传给车体的集总模型:滑移使用车体在Q处的速度,悬挂长度变化只用于法向阻尼。完整轮心速度还含ldot*d;当悬挂轴在接触切平面上有分量时,这一项会改变实际胎面切向速度。若需要快速压缩、外倾变化的精确轮胎运动,改用vC0+ldot*d+omegaFrame×(Q-C)减去地面速度求vx、vy,其中omegaFrame包含车体转动与转向、不含独立自转;自转仍由rho*omega加入滑移。此时轮心平移质量、悬挂关节和车体之间也要共同求解,不能只换速度公式而继续把无质量轮的全部力直接施给车体。下文的集总四轮模型保持前一种速度与受力约定,误差主要出现在悬挂轴显著倾斜且快速伸缩时。
原始力与联合附着
本例固定速度下限vMin=1米/秒,定义:
rho取正;正轮速使胎面向后推地面,正κ给车体正纵向力;正vy对应的横向力取负。原始力采用可直接求值的刚度模型:FxRaw=Cκ*κ、FyRaw=−Cα*α,Cκ单位为牛顿,Cα为牛顿/弧度。参考配置两者均为10000。它们决定未饱和区域的响应,附着由后面的限幅决定。
先算原始力长度D,再令scale=min(1,mu*Fz/D);D为零时scale取1。两分量共同乘scale。μ为无单位摩擦系数,Fz为零就得到零接触力。例如vx=5、rω=6,κ=0.2;vy取5*tan(0.1)时α=0.1。原始力为(2000,−1000)牛顿,μFz=2000时得到约(1788.85,−894.43)。两个分量各自夹到2000会留下超出预算的合力。
轮胎的峰值和峰后行为可用标定曲线替换刚度段。一种常见参数形式为D*sin(C*atan(B*s-E*(B*s-atan(B*s)))),s分别采用纵向滑移或侧偏角,横向按本页方向取反。D设定力尺度,B、C、E控制斜率和形状;参数须配合载荷、路面与联合滑移标定。单独两条曲线仍要进入共同附着约束,才能解释同时制动和转向时可用力的变化。
力回到世界空间为Fx*t+Fy*b。悬挂力、纵横向力各自保留数值,调试时显示它们的箭头,可以区分“没有轮载”“曲线响应过弱”和“已经附着饱和”。
传动、转向与轮速
发动机到车轮
直接驱动车辆把控制输入转换成每轮驱动扭矩即可。发动机传动还需要一份独立转速ωe和惯量Ie。一个明确的离合器模型令平均驱动轮速度为ωw、带正负号的总传动比为g,滑差为ωe-g*ωw,离合器扭矩取clamp(Kc*滑差,−Tcap,Tcap)。节气门uThrottle在[0,1]内,本例取Te=uThrottle*Tmax*max(0,1-(omegaE/omegaRed)^2),Tmax为最大扭矩、omegaRed为正的转速上限;这条明确曲线可由实车标定表替换。发动机更新为ωe+=dt*(Te-Tclutch-drag*ωe)/Ie。
开放差速器将输出扭矩g*Tclutch平均分给同轴两轮;效率损耗可在输出端以明确系数计入。平均扭矩不要求两轮同速,离地轮仍会加速,不能将其轮速冻结后再送回离合器。限滑差速器则在两轮之间加入抵抗速度差的耦合扭矩,例如Tlock=clamp(Kdiff*(ωleft-ωright),−TdiffMax,TdiffMax),左侧减Tlock、右侧加Tlock,二者相加仍等于轴输入扭矩。换挡时更新g并按离合器开合控制扭矩,避免瞬间把发动机转速强设成轮速倍数。
制动与反作用
本步必须用已经过摩擦预算的Fx更新车轮;若用未限幅原始力,车体和车轮会收到不一致的反作用。先计算无制动预测:
制动扭矩大小Tb非负,本例采用omegaNext=sign(omegaStar)*max(0,abs(omegaStar)-dt*Tb/Iw)。制动方向由预测速度决定,跨零时恰好停住。ω=1、Iw=1、dt=0.1、Tb=20时返回零;倒转−1也停在零。静止时若驱动扭矩30大于制动20,更新结果为正1,制动不会凭空把车轮锁死。
实际制动扭矩由预测与结果的差反算,达到零速时可能小于Tb。这个实际值进入车体的反作用账本,不能始终给车体满额制动反扭矩。轮胎离地时Fx=0,驱动与制动仍更新轮速;重新落地时,这份轮速进入下一次滑移计算。
转向几何
设轴距L、轮距W、后轴中点转弯半径R,内外轮角为atan(L/(R-W/2))和atan(L/(R+W/2))。L=2.5、W=1.6、R=5米时,约为30.8度和23.3度。使用半径绝对值R>W/2,左右转弯交换内外轮并统一角度符号;R达到W/2会使内轮角趋近90度,控制输入按最大允许轮角反解最小R,拒绝越界半径。直行半径趋无穷时两角趋零。各轮的角度先改变真实轮轴u与前向f,再重建接触面滚动方向t,而不是只旋转渲染轮子。
纯滚动几何没有包含高速轮胎侧偏。控制层可以按速度限制最大转角,并限制每秒转角变化;这些规则改变转向输入,轮胎仍使用更新后的真实方向与滑移。额外下压力和漂移辅助作为独立外力进入刚体账本,便于核对它们是否超出了轮胎附着提供的效果。
每步积分与低速保持
力与角动量汇总
一次子步先冻结车体姿态、速度和控制输入,再查询全部车轮;按接触、悬挂、传动、轮胎、轮速的顺序计算。每轮输出世界力、作用点、轮速变化与轮自转角动量变化。车体合力加上重力与其他外力,线速度用vNext=v+dt*F/M更新,位置用新速度推进。
角运动还需保持总角动量账本一致。接触力产生(Q-centerOfMass)×F,轮自转角动量为Hw=Iw*omega*u。发动机另有He=Ie*omegaE*uEngine,uEngine是转子世界轴。车体所得力矩扣除(ΣΔHw+ΔHe)/dt;轮轴随转向、车体旋转改变方向时,ΔHw包含方向变化,发动机轴随车体旋转的变化也进入ΔHe。离合器、差速器和制动是车辆内部扭矩,只在车体与转子之间转移角动量,不另加为外力矩。若把完整接触力矩全给车体,又单独增加车轮角动量,二者之和会超过外力矩。具体世界惯性、陀螺项和姿态积分见 刚体物理求解,接入时将车轮账本一并送入,而不是分别调用两个互不知情的积分器。
参考的单轮水平数例取s=0.8、r=0.3、l₀=0.6、k=20000,悬挂垂直且压缩速度为零,得到Fz=2000。vx=5、ω=20、μ=1、Cκ=10000时Fx=2000。Iw=1、dt=0.01、无驱动制动,轮速由20降到14;质量1000的车体纵向速度增加0.02。下一步必须以14重新计算滑移,不能继续使用本步的Fx。
驻车与时间步
速度下限防止滑移分母趋零,却不会自动提供静摩擦。驻车需要接触约束:先由重力和其他外力预测自由速度,再在接触点求使切向速度归零的冲量。沿一个切向单位轴t,锁轮后的有效逆质量为K=1/M+(rQ×t)·I⁻¹(rQ×t),所需冲量为−vFree/K;rQ是接触点相对质心的位置。横纵冲量共享半径mu*Fz*dt的摩擦圆。
锁轮要求步末omegaNext=0,因此纵向冲量jx与制动力矩满足TbrakeActual=Tdrive+Iw*omega/dt-rho*jx/dt及abs(TbrakeActual)<=Tb;等价区间为((Tdrive-Tb)*dt+Iw*omega)/rho <= jx <= ((Tdrive+Tb)*dt+Iw*omega)/rho。已经静止且无驱动时才简化成abs(jx)<=Tb*dt/rho。进入驻车阈值允许很小的非零轮速,其停止角动量不能省略。先单独检查制动区间:在忽略车体旋转的平地检验里,没有其他切向负载、所需jx为零,Tdrive=30、Tb=20的区间却不含零,制动不能单独抵住这份驱动,本步切回动态轮速与轮胎力计算。有坡面或其他切向负载时,比较实际所需jx是否落在区间,而不是只比较两个扭矩大小。
仍以忽略车体旋转的单轮区间检验为例,omega=0.2弧度/秒、rho=0.3米,胎面速度0.06米/秒已经低于进入阈值;但Iw=1、dt=0.1、Tb=1、无驱动时,允许jx区间是[1/3,1]牛顿·秒,不含使静止车体保持静止所需的jx=0。只用关于零的对称预算会错误宣布锁住,本例回到动态分支后轮速仍为0.1弧度/秒。
成功锁轮时ΔHw=−Iw*omega*u同样进入前述车体角动量账本,不凭空消失。尝试锁轮的候选状态先把这份已知的停轮角冲量按相反号加入车体角速度预测,再求接触点的vFree和所需冲量;否则制动虽停住轮子,传给车体的反作用却未参与驻车求解。只有摩擦与制动条件同时成立才提交该候选,失败则丢弃候选,从本步冻结状态重新走动态轮胎路径。已加入候选的停轮反作用在汇总时只登记一次。
多轮约束与统一提交
一个轮子的冲量会改变车体平移和旋转,因此其他轮子刚刚算出的接触速度也会变化。四轮分别求一次所需冲量再相加,会把同一份自由速度反复消除。我们把所有候选锁轮放进同一份车体预测状态,并为每轮保存二维累计冲量j_i=(jx,jy)。
先冻结姿态和接触几何,令e_i0=t_i、e_i1=b_i、r_i=Q_i-centerOfMass。锁轮候选的停轮角动量已加入自由预测速度。第j轮沿轴β施加单位冲量后,第i轮沿轴α的速度变化为:
这里的I是本步世界空间车体惯性,候选轮自转已由锁定条件单独结算。把所有接触的自由切向速度组成向量c,最终速度就是c+Kj。K的对角二维块给单轮响应,非对角块给轮间耦合。若地面也是参与求解的动态刚体,它的反向冲量响应同样累加到K,并从同一冻结状态更新;运动学平台则只提供已知表面速度。
每轮可行集合为D_i={j: jx²+jy²<=B_i², L_i<=jx<=U_i},其中B_i=mu_i*Fz_i*dt,L、U取前述制动区间。先把区间与[−B,B]相交,空集说明该轮不能锁定。非空时,求使0.5*jᵀKj+cᵀj最小的累计冲量。这是固定接触与固定载荷下的凸问题;最小值仍有非零切向速度,意味着预算不足,不能把“优化收敛”解释成静止成立。
一种容易复算的实现采用全局投影梯度。取Lipschitz=max_i sum_j abs(K_ij)>0,步长eta=1/Lipschitz,每轮先由同一份旧j计算z_i=j_i-eta*(c+Kj)_i,再投影到D_i。这里投影的是累计值,最终施加增量jNew-jOld;把每次增量单独限制到B,会让多轮迭代累计超过摩擦预算。同步更新所有轮以后再算下一轮迭代,避免一部分轮使用新值、一部分使用旧值却仍声称是这套算法。
圆盘与纵向区间的欧氏投影也可直接实现。若z在交集中就保留;否则列出z到圆盘的径向投影,并仅在投影横坐标落入区间时接收。再分别令x等于裁剪后的L、U,计算y=clamp(z.y,−sqrt(B²−x²),sqrt(B²−x²))。在这些有效候选里选择距离z最近者。区间退化、B为零时仍按同一规则处理。连续先夹x再缩放圆盘会再次改变x,可能把结果推回制动区间之外。
例如两轮在本例方向上没有旋转杠杆,车体质量100千克、自由速度0.01米/秒,所需总冲量为−1牛顿·秒。每轮预算1时,对称解为−0.5、−0.5;逐轮从原自由速度各求−1会过度制动。若两轮预算各0.2,最小化只能得到−0.2、−0.2,剩余速度0.006米/秒。它满足冲量预算,却不满足驻车的速度条件,必须进入滑动分支。
候选失败与动态回退
进入候选的条件为abs(vx),abs(vy),abs(rho*omega)均低于0.1米/秒且有制动请求;已锁定接触超过0.2米/秒时退出,形成迟滞。初始候选集合确定后,从冻结状态重建自由速度:加入重力、悬挂、发动机账本和所有非候选轮的动态轮胎冲量,再加入候选轮的停轮反作用。候选轮不同时施加滑移力。
迭代结束后分别检查约束可行性、投影残差以及所有候选轮的最终切向速度。示例采用冲量残差小于1e-6 N·s、切向速度小于1e-4 m/s,数值尺度变化时成比例设置。某轮预算无交集或残余速度过大,就从锁轮集合删除该轮;丢弃本次全部候选冲量、车体速度和停轮反作用,从冻结状态重新计算。被删除的轮使用动态轮胎及制动公式,其最终自转变化进入新的角动量预测,然后重求剩余锁轮。这样第二轮失败不会留下它此前对第一轮施加的旋转影响。
单步候选只删除、不重新加入,四轮最多删除四次。若达到迭代上限仍不收敛,整组回到动态分支,并用更短子步重算;不能把最后一次迭代当作锁定成功。最终只有一份车体线速度、角速度和全部轮速一同提交,随后才推进姿态。冻结状态只读,各候选分支只写临时状态,因此重算不会重复消耗发动机扭矩或重复增加停轮反作用。
这个流程也解释了混合接触:一轮在冰面滑动时,它的动态冲量先进入预测,干燥路面的其他轮再试图抵消由此产生的速度;它们能否保持静止取决于最终共同状态,而不是各轮单独的标记。下一子步重新查询载荷、滑移和候选集合,允许路面及速度变化重新建立静摩擦。
子步与接触更新
显式轮速更新在小Iw、高刚度时容易振荡。用一个固定模拟步拆成多个子步,每子步重新计算滑移、力与轮速,比较2、4、8子步下的速度和总冲量。若细分结果仍明显变化,就继续调整积分与参数,不能只对最终速度作平滑掩盖不稳定。射线缓存能减少查询成本,但大幅车体移动或地面变化后必须更新接触;过期平面会把轮载施加到已经离开的地面。
实现与验证
轮步参考实现直接连接查询距离、悬挂载荷、刚度轮胎、联合限幅、制动和纵向速度增量,使用Python标准库。参数与上述数例一致;三维查询、传动状态和刚体积分按正文接口与对应主归属接入。
python 知识库/examples/mechanism_chain/vehicle/test_reference.py2026-10-23,本机执行8项行为检查,覆盖外倾圆轮与球形包络的不同支撑半径/滚动力臂、平地/坡面几何到载荷、离地、纵横向原始力、制动跨零、驻车小非零轮速的制动区间和单轮完整数例。发动机与多轮求解用上述扭矩和冲量账本手工核对;参考检查不代表实际车辆驾驶、碰撞或性能结果。
引擎接入时保存每轮s、a、l、Fs、Fz、vx、vy、κ、α、原始/限幅力、驱动/制动扭矩与新轮速。先做静态支撑,再做悬挂落地、单轮离地、直线驱动、制动转向与坡面驻车,每个场景核对整条账本。目标引擎驾驶和性能尚未执行,这一证据状态与正文计算链分别记录。
相关主题
参考资料
- PhysX 5.4.1:Vehicles,Mechanical Model与Component Sequences:查询、悬挂、轮胎和刚体按数据依赖推进;2026-10-23核读。本文数值配置与线性轮胎公式独立定义。
- PhysX 5.4.2:PxVehicleSuspensionForce:世界空间力、力矩与沿接触平面法线的轮载投影;2026-10-23核读。