chrono Core - 驱动
2026/6/8 3:02:08 网站建设 项目流程

原文链接:https://api.projectchrono.org/motors.htm

目录

  1. 3D旋转驱动驱动
  2. 3D直线驱动驱动
  3. 3D传动链耦合驱动
  4. 一维1D轴系驱动
  5. 原生示例
  6. PyChrono实战代码
  7. 术语对照表

总述

驱动(Motor)用于约束两刚体/构件间相对运动,分为3D旋转驱动ChLinkMotorRotation、3D直线驱动ChLinkMotorLinear、一维轴系ChShaft驱动三大类,可驱动3D刚体ChBody或一维轴ChShaft

  • ChLinkMotorRotationChLinkMotorLinear均继承自ChLinkMate继承ChLinkMate全部特性:求解高效、无行程限位
  • 绝大多数驱动通过ChFunction时序函数(位置/速度/扭矩随时间变化)实现运动控制。

驱动分类总表

控制方式3D旋转驱动3D直线驱动1D一维轴驱动
强制位移/位置ChLinkMotorRotationAngleChLinkMotorLinearPositionChShaftsMotorPosition
强制速度ChLinkMotorRotationSpeedChLinkMotorLinearSpeedChShaftsMotorSpeed
施加载荷(扭矩/力)ChLinkMotorRotationTorqueChLinkMotorLinearForceChShaftsMotorLoad
对接1D传动系统ChLinkMotorRotationDrivelineChLinkMotorLinearDriveline-

1. 3D旋转驱动驱动

ChLinkMotorRotation基类派生,约束基准为驱动局部Z轴,角度单位:弧度rad,用于两空间刚体间旋转驱动(如回转伺服驱动)。

关键特性

  1. 支持多圈连续旋转,两种角度读取:
    • GetMotorAngle():无缠绕总转角(累计多圈)
    • GetMotorAngleWrapped():缠绕转角(-π~π单圈)
  2. 运动参数读取:转角GetMotorAngle()、角速度GetMotorAngleDt()、角加速度GetMotorAngleDt2()
  3. 默认内置回转副约束(绕Z轴转动,锁死X/Y平移、RX/RY旋转),可通过SetSpindleConstraint()修改约束类型:
    枚举参数约束说明
    FREE不对驱动轴线做任何约束,仅施加驱动
    REVOLUTE默认配置,全约束X/Y平移、RX/RY旋转,仅Z轴回转
    CYLINDRICAL约束X/Y平移、RX/RY旋转,Z轴可转+可沿Z滑移(圆柱副)
    OLDHAM仅约束RX/RY旋转,X/Y/Z全自由(十字滑块联轴器)

驱动通用创建四步流程

  1. 实例化对应驱动类;
  2. Initialize(刚体A,刚体B,驱动局部坐标系ChFramed)绑定两构件;
  3. 将驱动加入仿真系统sys.Add(驱动)
  4. 绑定ChFunction时序函数(位置/速度/扭矩曲线)。

2. 3D直线驱动驱动

ChLinkMotorLinear基类派生,驱动方向固定为驱动局部Z轴,实现两构件沿Z轴直线位移驱动(直线推杆、电动缸)。

关键特性

  1. 位移参数读取:行程GetMotorPos()、速度GetMotorPosDt()、加速度GetMotorPosDt2()
  2. 默认内置移动副约束,锁死X/Y平移、RX/RY/RZ旋转,仅Z轴可控位移;通过SetGuideConstraint()修改约束:
    枚举参数约束说明
    FREE无导向约束,仅施加轴向驱动力
    PRISMATIC默认,全约束除Z向平移外所有自由度(标准移动副)
    SPHERICAL约束X/Y平移,三轴旋转全部自由(球铰+单轴驱动)

3. 3D传动链耦合驱动(Driveline)

ChLinkMotorRotationDriveline(旋转)/ChLinkMotorLinearDriveline(直线):3D刚体运动 ↔ 一维ChShaft轴系双向力能耦合

  • 一维轴(变速箱、飞轮、齿轮组)的运动直接带动3D构件;同时3D负载反作用力/力矩反向反馈至一维轴;
  • 区别于普通ChFunction驱动驱动:普通驱动由时序信号强制运动,Driveline驱动遵循功率守恒、动力学双向耦合
  • ⚠️ 注意:一维轴ChShaft务必设置合理转动惯量,小惯量+高速易引发求解震荡、仿真发散。

4. 一维1D轴系驱动

ChShaftsMotor系列,仅作用在两个一维轴ChShaft之间,用于传动系统(变速箱、发动机、齿轮传动)动力学建模,控制逻辑同3D驱动:位置/转速/扭矩三类驱动。

5. Python代码示例

importpychronoaschronoimportpychrono.irrlichtasirr#1. 创建仿真系统sys=chrono.ChSystemNSC()sys.SetGravitationalAcceleration(chrono.ChVector3d(0,-9.81,0))#2. 创建地面+曲柄rod=chrono.ChBodyEasyCylinder(chrono.ChAxis_Y,0.2,2,2500,True,True)rod.GetVisualShape(0).SetColor(chrono.ChColor(0.2,0.2,0.8))rod.SetFixed(True)rod.SetPos(chrono.ChVector3d(0,1,0))sys.Add(rod)crank=chrono.ChBodyEasyBox(1.5,0.4,0.4,7800,True,True)crank.SetPos(chrono.ChVector3d(0,2+0.2,0))#曲柄位置比杆长多0.2crank.GetVisualShape(0).SetColor(chrono.ChColor(0.8,0.2,0.2))sys.Add(crank)#3. 创建恒转速旋转电机rot_motor=chrono.ChLinkMotorRotationSpeed()#初始化:曲柄、大地,铰接点(0,2,0) ,旋转轴为X轴rot_motor.Initialize(crank,rod,chrono.ChFramed(chrono.ChVector3d(0,2,0),chrono.QuatFromAngleX(chrono.CH_PI_2)))#设置恒定角速度:2π rad/s(每秒一圈)func_speed=chrono.ChFunctionConst(2*chrono.CH_PI)rot_motor.SetSpeedFunction(func_speed)sys.Add(rot_motor)#4. 可视化app=irr.ChVisualSystemIrrlicht()app.SetWindowSize(1024,768)app.SetWindowTitle('Motor')app.Initialize()app.AddSkyBox()app.AddCamera(chrono.ChVector3d(6,4,-8))app.AddTypicalLights()app.AttachSystem(sys)app.BindAll()#仿真循环whileapp.Run():app.BeginScene()app.Render()app.EndScene()sys.DoStepDynamics(0.01)

6. 其他示例

6.1 示例1:正弦位移直线驱动(往复滑块)

importpychronoaschronoimportpychrono.irrlichtasirrimportnumpyasnp sys=chrono.ChSystemNSC()sys.SetGravitationalAcceleration(chrono.ChVector3d(0,-9.81,0))material=chrono.ChContactMaterialNSC()pos=chrono.ChVector3d(0,0,2)# 固定基座guide=chrono.ChBodyEasyBox(4,0.3,0.6,1000,True,True,material)guide.SetPos(pos)guide.SetFixed(True)guide.GetVisualShape(0).SetTexture(chrono.GetChronoDataFile("textures/blue.png"))sys.Add(guide)slider=chrono.ChBodyEasyBox(0.4,0.2,0.5,1000,True,True,material)slider.SetPos(pos+chrono.ChVector3d(0,0.3,0))slider.GetVisualShape(0).SetColor(chrono.ChColor(0.6,0.6,0.0))sys.Add(slider)motor6=chrono.ChLinkMotorLinearPosition()# Connect the guide and the slider and add the motor to the sys:motor6.Initialize(slider,# body A (slave)guide,# body B (master)chrono.ChFramed(pos,chrono.Q_ROTATE_Z_TO_X))# motor frame, in abs. coordssys.Add(motor6)motor6setpoint=chrono.ChFunctionSine(1,2,0.0,0.0)# Let the motor use this motion function:motor6.SetMotionFunction(motor6setpoint)#vis=chrono.irrlicht.ChVisualSystemIrrlicht()vis.AttachSystem(sys)vis.SetWindowSize(1024,768)vis.SetWindowTitle('Motors demo')vis.Initialize()vis.AddLogo(chrono.GetChronoDataFile('logo_chrono_alpha.png'))vis.AddSkyBox()vis.AddCamera(chrono.ChVector3d(1,3,-7))vis.AddTypicalLights()vis.AddLightWithShadow(chrono.ChVector3d(20.0,35.0,-25.0),chrono.ChVector3d(0,0,0),55,20,55,35,512)whilevis.Run():vis.BeginScene()vis.Render()vis.EndScene()sys.DoStepDynamics(5e-3)

6.2 示例2:

importpychronoaschronoimportpychrono.irrlichtasirr#1. 创建仿真系统sys=chrono.ChSystemNSC()sys.SetGravitationalAcceleration(chrono.ChVector3d(0,-9.81,0))#2. 创建圆柱体 - 地面 和 圆柱体 - 旋转ground=chrono.ChBodyEasyCylinder(chrono.ChAxis_X,0.3,3,2500,True,True)ground.SetFixed(True)ground.SetPos(chrono.ChVector3d(0,0,0))ground.GetVisualShape(0).SetTexture(chrono.GetChronoDataFile("textures/blue.png"))sys.Add(ground)crank=chrono.ChBodyEasyCylinder(chrono.ChAxis_X,0.3,2,2500,True,True)crank.SetPos(chrono.ChVector3d(0,0.6,0))crank.GetVisualShape(0).SetColor(chrono.ChColor(0.6,0.6,0.0))crank.SetFixed(False)sys.Add(crank)#3. 创建恒转速旋转驱动rot_motor=chrono.ChLinkMotorRotationSpeed()#初始化: 圆柱体 - 旋转、圆柱体 - 地面,铰接点(0,0,0),旋转轴(0,0,0)rot_motor.Initialize(crank,ground,chrono.ChFramed(chrono.ChVector3d(0,0,0),chrono.Q_ROTATE_Z_TO_X))#设置恒定角速度:2π rad/s(每秒一圈)func_speed=chrono.ChFunctionConst(2*chrono.CH_PI)rot_motor.SetSpeedFunction(func_speed)sys.Add(rot_motor)#4. 可视化app=irr.ChVisualSystemIrrlicht()app.AddSkyBox()app.SetWindowSize(1024,768)app.Initialize()app.AddCamera(chrono.ChVector3d(6,4,-8))app.AddTypicalLights()app.AttachSystem(sys)#仿真循环whileapp.Run():app.BeginScene()app.Render()app.EndScene()sys.DoStepDynamics(0.01)

7. 术语对照表

英文中文释义
ChLinkMotorRotation3D旋转驱动驱动基类
ChLinkMotorLinear3D直线驱动驱动基类
Driveline Motor传动链耦合驱动(3D↔1D轴双向耦合)
ChShaft一维动力学轴(传动系统)
ChFunction时序函数(位置/速度/扭矩随时间变化)
SpindleConstraint旋转驱动导向约束类型
GuideConstraint直线驱动导向约束类型
Wrapped Angle单圈限幅转角
Unwrapped Angle累计无缠绕总转角

拓展补充

  • ChFunction常用子类:
    • ChFunctionConst:常数(恒速/恒力/恒扭矩)
    • ChFunctionSine:正弦周期运动(往复、摆动)
    • ChFunctionRamp:斜坡线性变化(匀加速)
    • ChFunctionRecorder:自定义离散时序曲线(实测数据导入)

需要我补充Driveline轴系耦合驱动+一维齿轮传动的PyChrono示例吗?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询