我们希望拨盘能在校准后去到理想的发弹位置,但所采用的增量式编码器电机每次上电时的位置会成为新的零点,所以我们会通过校准控制器将其转到机械限位处,这是一个确定的位置。但注意!机械限位并不是理想的发弹位置,我们测量理想发弹位置和机械限位的距离差,将之设为 offset。
这样在每次校准后,拨盘顶到机械限位,随后控制器将当前位置加上 offset 作为电机 0 点,此时的 0 点就是理想的发弹位置,弹链不会太紧也不会太松,可以避免双发等问题。
综上所述,调双发的重点是设置一个适合的拨盘的 offset
trigger_calibration_controller,听到校准声后关闭shooter_controller/controllers/shooter_controller/command
mode 值可设置为
wheel_speed 表示摩擦轮转速,一般设置为680plotjuggler 拉曲线。具体位置可参:/joint_states/trigger_joint/position/joint_states/trigger_joint/effortposition和effort分别代表拨盘电机角度和拨盘电机力矩。期望的效果是连续 50 发弹不出现双发或漏发
要调整的位置:
rm_description/urdf/<要调节的兵种>/shooter.transmission.urdf.xacro
下图所示的 offset
<transmission name="trans_trigger_joint">
<type>transmission_interface/SimpleTransmission</type>
<actuator name="trigger_joint_motor">
<mechanicalReduction>-27.5</mechanicalReduction>
</actuator>
<joint name="trigger_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<offset>0.355</offset>
</joint>
</transmission>
修改要后关闭所有控制器,重新进行一次准备部分的流程,再次进行打弹测试。所有涉及修改urdf的操作也是同理
一颗小弹丸送上去是 0.7 rad,这就是一个周期。所以offset的取值范围是 0~0.7之间
我们只需要每 0.1 rad尝试一次,确定大概的范围,再进一步微调百分位即可。
值得注意的是,双发(弹链太紧)和空发(弹链太松)是轮流发生的。这一发双发那么下一发大概率会空发,所以我们难以直接根据弹链松紧来设置offset,一般调整是先给大看看,效果变好了就继续给大,变差了就给小
我们重点关注position曲线。在正常发弹的情况下,子弹一颗颗射出,曲线呈下图所示的阶梯状

一旦发生堵弹,拨盘会后退一格再继续转,可以明显地在图中看出曲线变化。
如果拨盘一直堵弹(有子弹的情况下一直打不出来),请联系机械进行维修。