I am trying to control a Parrot ANAFI using a simple control algorithm. The goal is for the ANAFI to
1. Start a stream
2. Take off
3. Pan the gimbal downward
4. Identify an ArUco marker via image OpenCV library
5. Align itself to that marker using commands like PCMD() or moveBy()
6. Land
Each of these steps works until PCMD() or moveBy() is called. I know this is because these are blocking functions and so they interrupt the threads’ abilities to update global variables even if they are locked. Once the motion commands are called, the variables stop being updated and cannot be again. Below is the link to the repo containing the current iteration for the file. The file being used is a heavily edited version of the streaming example on the Olympe github. If anyone has advice, I would be greatly appreciative! The idea I had was more of a procedural while loop that employs a P-controller but it seems that will not work with the blocking commands I am using.
Sorry for the delay. You can simply remove the .wait() of the self.drone(move.extended_move_by(…)) function. You can check the result of the moveby() with the expectation object returned by self.drone(move.extended_move_by(…)).
Thank you for your recommendation! I have tried that in the past and the position and orientation of the drone does not change. The .wait() is required for creating any changes in the drone’s state. Do you know why this could be?