We are trying to implement PID position controller for stabilizing Asctec Hummingbird at one desired position (\goal). We use asctec_driver (ROS package) for communicating with Hummingbird at LL chip, sending control command Roll Pitch Yaw Thrust. The communication is conducted by Zigbee. We only set sending control signals to Hummingbird (one way) at 100 Hz (by editing launch file).
The Hummingbird is tracked by Optitrack Motion Capture System. We use tf ROS to estimate the error between Hummingbird frame and goal frame. PID controllers will take those errors (x,y,z) to produce the control signals. These control signals are multiplied with scale value in order to convert to Roll, Pitch, Thrust commands in order to send to Hummingbird. Yaw control is kept as 0 all the time. We have tried to tuning these PID controllers. Now, the best result is that Hummingbird still oscillates about on drift point respect to the goal, error is about +- 0.2m.
Does anyone has idea to improve better? Or May something wrong with the system setup. Thanks
From my little experience in control theory I suppose this comes from the dead time in your setup. There is quite some time between acquiring the position via OptiTrack until the data goes over your computer to the XBee and then over the air to the UAV.
Another option might simply be an incorrectly tuned PID (e.g. I value too high).