loadrt mux2 count=4 ... # note packet error mux must be after hardware read but before motion addf hm2_[HOSTMOT2](BOARD).0.read servo-thread addf mux2.0 servo-thread addf mux2.1 servo-thread addf mux2.2 servo-thread addf mux2.3 servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread addf pid.0.do-pid-calcs servo-thread addf pid.1.do-pid-calcs servo-thread addf pid.2.do-pid-calcs servo-thread addf pid.3.do-pid-calcs servo-thread addf hm2_[HOSTMOT2](BOARD).0.write servo-thread ... # switch from feedback position to commanded position to motion and pid on packet error: net perror hm2_[HOSTMOT2](BOARD).0.packet-error => mux2.0.sel mux2.1.sel mux2.2.sel mux2.3.sel ... # position command and feedback (joint 0) (master) Notice the motions and PID feedback come from mux # and both get commanded position rather the (bogus) feedback position if there is a packet error net emcmot.00.pos-cmd joint.0.motor-pos-cmd => pid.0.command mux2.0.in1 net emcmot.00.vel-cmd joint.0.vel-cmd => pid.0.command-deriv net fb0 mux2.0.in0 <= hm2_[HOSTMOT2](BOARD).0.stepgen.00.position-fb net motor.00.pos-fb <= mux2.0.out joint.0.motor-pos-fb pid.0.feedback net motor.00.command pid.0.output hm2_[HOSTMOT2](BOARD).0.stepgen.00.velocity-cmd setp pid.0.error-previous-target true