Hi there, is it possible to program fixed rotations using pymavlink? For example, I would like the sub to do a 360 rotation to the right, returning to its original heading, and then stop. I have tried polling the heading data, however, it does not poll fast enough and often overshoots where it was supposed to stop. Is there a better approach to this?
Can you share your code ?
If the ROV is overshooting while using pymavlink, make sure that your yaw PID is tuned.
Take a look in the
Sure, here is some of the code we were using.
This was the main method called to perform the rotations. This code was sloppy as it was a test.
if getHeading(connection) is not None:
startHeading = getHeading(connection)
counter = 0
while(counter < 2): #rotateLeft_Mob(connection) if getHeading(connection) > startHeading - 5 and getHeading(connection) < startHeading - 1: counter += 1
This code was meant to make the robot perform 2 360s with some degree of error, as we could not find a surefire way to do a perfect 360.
These are the methods mentioned in the above piece of code:
This method rotated the robot to the left.
msg = connection.recv_match(blocking=True)
msgTypes = set()
if msg.get_type() == ‘AHRS2’:
yaw = msg.to_dict()[‘yaw’]
yawDegrees = round(yaw * 360 / (2 * 3.14), 1)
return("%f" % (yawDegrees))
This method pulled the “yaw” value using pymavlink.
Do you have any ideas on how to better implement this? This was an admittedly messy implementation that worked with a large degree of error only some of the time.