hello
I have the rasberry pi 3 and a navio+.
i would like to know if there is some code that get pisition of pitch, roll and yaw for python
thanks a lot for your help
hello
I have the rasberry pi 3 and a navio+.
i would like to know if there is some code that get pisition of pitch, roll and yaw for python
thanks a lot for your help
Look at mavlink to get messages
thanks for responding
we are dont using mavlink.
we are programming in python the raspberry pi 3 and also have a navio plus, but the library AHRS is in the C++ and we are needing this library in python but we have dont can find.
we also find the command import subprocess but with this method the code in c++ only run just once.
i would know if there is some method of program run together and that the code en c++ sends data to code in python
thanks for your attention
Hey Cristian, I also had the same problem of finding an AHRS code in python so I put one together based on this journal paper:
âGain-Scheduled Complementary Filter Design for a MEMS Based Attitude and Heading Reference Systemâ
The python code is on my github here:
To use it, you will have to use the MPU IMU code from EMLID. The basic flow is:
The one caveat for this AHRS code is that it can not handle angles past 90degs in roll or pitch. Since it does not use quaternions, the code breaks down past 90degs, however, there is a reset function that can be called in the event that you do to get the filter back on track. I havenât had any problems with this since I donât do any inverted flight with my aircraft. Hope this helps!
Lars
thanks for your response!!!
dude, i did your code,but i am new programing in python and i called the code Complementary_Filter2 from the same folder that principal code.
from Complementary_Filter2 import comp_filt
posicion = comp_filt()
posicion.init()
after this i initialized the imu with the codes of emlied, this part is excellent and i havenât any problem with it.
later
while 1:
m9a, m9g, m9m = imu.getMotion9()
salida=posicion.attitude3(float(m9a[0]),float(m9a[1]),float(m9a[2]),float(m9g[0]),float(m9g[1]),float(m9g[2]),float(m9m[0]),float(m9m[1]),float(m9m[2]))
pitch=salida.pitch_d
print(pitch)
this is an approximate code
the proble is the follow
Connection established: True
Traceback (most recent call last):
File âprincipal.pyâ, line 251, in
pitch=salida.pitch_d
AttributeError: âNoneTypeâ object has no attribute âpitch_dâ
do you know? that i am doing wrong
thanks
hello Lars
i was doing tests and your code worked but i see the data and the data not change, it always has the same data
i would like know. what are there than change and your code ?
thanks for yout help!!
You should use ROS on the RPI, and just subscribe to the IMU messages from your Python script.
Besides having to deal with gimbal lock, writing your own filter (!) wonât match what the aircraft is actually using for control or benefit from calibrations applied.
Cristian, the only difference that Iâm seeing between my code and yours is that instead of
salida = posicion.attitude3(âŚ)
pitch=salida.pitch_d
I have
posicion.attitude3(âŚ)
pitch=posicion.pitch_d
Give that a try. Also one other thing to note, if you want the yaw angle to be correct you will have to do a magnetometer calibration. The hard iron offsets go into the initialization.
Srim, I know I could use ROS or ArduPilot to achieve these things but I enjoy writing my own code (and filters) and learn a lot more by doing so then using âcannedâ code. Iâm assuming when you say that it wonât match what the aircraft is doing this assumes that it is being used with ArduPilot. I donât use Ardupilot, instead I use a custom autopilot I wrote for flight dynamics analysis so the complimentary filter works quiet well.