I'm working on an application that rotates a cylindrical mass in a manner to compensate for roll in a boat. The roll of the boat is rather slow so I was thinking it might be possibly to simply use a PID loop to control the angular position of the mass with a load encoder and feed roll data from a sensor to it as a set point or trajectory.

I was also thinking maybe it would be better to use a cascade control scheme with the angular control using a position sensor/encoder for angle control and then an outer loop around the roll sensor. My thinking is that this would more accurately track the roll.

Maybe feedforward is also a solution, but again, with roll not "in the loop" I'm thinking it won't be as accurate. What its the thought process to determine an optimal control scheme? What would you recommend?


  • 2
    $\begingroup$ Not enough info on design requirements. But generally speaking, if your actuator can command elevation angle relative to ship's deck, and if the actuator has flat response in the band you care about, and it can accelerate much faster than the ship's roll can accelerate, and if you can sense the ship's roll with negligible delay, then it's a simple tracking problem, which should be solvable with PI (or slight variations of it if boosting actuator bandwidth) or PID. Cascaded would be useful if you have to also correct for actuator's dynamics. $\endgroup$
    – Pete W
    Commented Jan 25, 2022 at 21:58
  • $\begingroup$ About which axis is the cylindrical mass rotated ? How is this axis oriented in relation to 1) boat, 2) cylindrical mass ? $\endgroup$
    – AJN
    Commented Jan 26, 2022 at 5:03
  • $\begingroup$ The mass rotates axially on the same axis as the boat which is the boat's long axis. It rolls to counter the boat's roll so that the top of the mass is always up/level. I'm confused on if the sensor used in a cascade controller's outer loop can be be sensing a variable it can't control. I can sense the tilt of the boat and use that to inform the mass' angular position, but I can't control the boat's tilt. On the other hand, the outer loop's sensor is just informing the inner loop's set point.. so that seems ok. $\endgroup$
    – DD5000
    Commented Jan 27, 2022 at 0:39
  • $\begingroup$ @DD5000 Using the boat roll sensor as set point for the mass sounds reasonable. You may have to filter it to a known bandwidth before feeding the control loop. The set point, generally speaking, should not change with a bandwidth higher than the control loop bandwidth. I don't think that you need two loops; just one loop to control the cylinder angle with set point coming from the boat sensor. $\endgroup$
    – AJN
    Commented Jan 29, 2022 at 13:44


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.