推进器电机模型文件的内容只有一个:推进器推力与PWM波的映射关系。当我们推算得到某时刻该推进器需要提供的推力时,我们需要根据映射关系计算出出对应的PWM波下发给下层以实现控制。不同类型的推进器推力与PWM波的映射关系是不同的,这个有的产品可能会给出,没有的话可能需要自行测定。 在demo中,模型文件的路径为cabin_controllers/cfg/thruster_force_vs_pwm.yaml。该文件反映的是bluerovotics的T200推进器推力与PWM波的映射关系。因为俄亥俄州大学水下机器人队伍的项目使用的也是这款推进器,故我直接使用了他们的参数。在此,我对文件参数做简要解析。 对于T200推进器的电机,其输入的pwm波的区间应为[1100,1900]。当然为了保护电机,后续在程序中不会设置这么大的区间,这点可以根据实际需求设置。当输入的PWM波为1500时,电机不转动;当输入的PWM波大于于1500时,电机正转;当输入的PWM波小于1500时,电机反转。 我们还需要注意推进器的桨叶。正桨(cw)和反桨(ccw)在电机转动时提供的推力方向是相反的。文件中TYPE0代表ccw,TYPE1代表cw。 一般来说推进器推力与PWM波的映射关系可以认为是线性关系,即y=a*x+b。x为推力(N),y为对应pwm波(常数),a为斜率(N^-1),b为常数。 根据推力的情况,映射关系分为三个区段,分别为Deadband,Startup以及Primary。区段通过文件中MIN_THRUST以及STARTUP_THRUST划分。 以下均以TYPE0参数为例。POS表示电机正转,NEG表示电机反转。 1、Deadband区段 当 |推力| < MIN_THRUST时,对应的PWM波均为NEUTRAL_PWM(pwm_controller.cpp中设定)。 demo中,当推力的区间为(-0.2N,0.2N)时,对应的PWM波为1500,推进器不转动,一定程度上改善了噪声的干扰。 2、Startup区段 当MIN_THRUST<= |推力| <=STARTUP_THRUST时,对应的PWM波为:SU_xxx_THRUST.SLOPE * 推力 + SU_xxx_THRUST.YINT。 demo中,当推力的区间为[0.2N,1.5N]时,电机正转,对应的PWM波为:22.5*推力+1523。 当推力区间为[-1.5N,-0.2N]时,电机反转,对应的PWM波为:28.6*推力+1480。 此阶段电机快速启动。 3、Primary区段 当 |推力| > STARTUP_THRUST时,对应的PWM波为:xxx_THRUST.SLOPE*推力+xxx_THRUST.YINT。 demo中,当推力区间为(1.5N,+00)时,电机正转,对应的PWM波为:6.66*推力+1552。 当推力区间为(-00,-1.5N时),电机反转,对应的PWM波为:8.54*推力+1444 。 此阶段电机平稳转动。当然PWM波的值不能超过电机安全的区间,这是后续程序中需要注意的。 我们也可以根据实际情况调整MIN_THRUST和STARTUP_THRUST提高性能 草图如下:
机械模型文件使得我们能自由设计配置水下平台各模块,如传感器、推进器等,电机模型文件使得我们能实现电机的自由选型。如此,我们在结构设计获得极大自由度的同时,软件架构也能通过仅修改文件参数非常方便的配合平台的改动。 机械模型文件与电机模型文件对后续框架里基础运动模块的理解还是比较关键的,所以再对模块进行进一步解析时,介绍了这两个文件的结构内容。