|
@@ -4,6 +4,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -11,48 +15,51 @@
|
|
|
import serial
|
|
|
|
|
|
|
|
|
-ACCData=[0.0]*8
|
|
|
-GYROData=[0.0]*8
|
|
|
-AngleData=[0.0]*8
|
|
|
-FrameState = 0
|
|
|
-Bytenum = 0
|
|
|
-CheckSum = 0
|
|
|
+ACCData = [0.0]*8
|
|
|
+GYROData = [0.0]*8
|
|
|
+AngleData = [0.0]*8
|
|
|
|
|
|
-a = [0.0]*3
|
|
|
-w = [0.0]*3
|
|
|
-Angle = [0.0]*3
|
|
|
+FrameState = 0
|
|
|
+Bytenum = 0
|
|
|
+CheckSum = 0
|
|
|
+
|
|
|
+acc_data = [0.0]*3
|
|
|
+angular_data = [0.0]*3
|
|
|
+rpy_data = [0.0]*3
|
|
|
|
|
|
|
|
|
serial_port="/dev/ttyAMA0"
|
|
|
|
|
|
|
|
|
-def DueData(inputdata):
|
|
|
- global FrameState
|
|
|
+
|
|
|
+def DueData(inputdata):
|
|
|
+
|
|
|
+ global FrameState
|
|
|
global Bytenum
|
|
|
global CheckSum
|
|
|
- global a
|
|
|
- global w
|
|
|
- global Angle
|
|
|
+ global acc_data
|
|
|
+ global angular_data
|
|
|
+ global rpy_data
|
|
|
|
|
|
for data in inputdata:
|
|
|
- if FrameState==0:
|
|
|
- if data==0x55 and Bytenum==0:
|
|
|
- CheckSum=data
|
|
|
- Bytenum=1
|
|
|
+ if FrameState == 0:
|
|
|
+ if data == 0x55 and Bytenum == 0:
|
|
|
+ CheckSum = data
|
|
|
+ Bytenum = 1
|
|
|
continue
|
|
|
- elif data==0x51 and Bytenum==1:
|
|
|
- CheckSum+=data
|
|
|
- FrameState=1
|
|
|
- Bytenum=2
|
|
|
- elif data==0x52 and Bytenum==1:
|
|
|
- CheckSum+=data
|
|
|
- FrameState=2
|
|
|
- Bytenum=2
|
|
|
+ elif data == 0x51 and Bytenum == 1:
|
|
|
+ CheckSum += data
|
|
|
+ FrameState = 1
|
|
|
+ Bytenum = 2
|
|
|
+ elif data == 0x52 and Bytenum == 1:
|
|
|
+ CheckSum += data
|
|
|
+ FrameState = 2
|
|
|
+ Bytenum = 2
|
|
|
elif data==0x53 and Bytenum==1:
|
|
|
CheckSum+=data
|
|
|
FrameState=3
|
|
|
Bytenum=2
|
|
|
- elif FrameState==1:
|
|
|
+ elif FrameState == 1:
|
|
|
if Bytenum<10:
|
|
|
ACCData[Bytenum-2]=data
|
|
|
CheckSum+=data
|
|
@@ -61,9 +68,9 @@ def DueData(inputdata): #对数据进行划分,各自读到对应的数组里
|
|
|
if data == (CheckSum&0xff):
|
|
|
a = get_acc(ACCData)
|
|
|
print("Acc:", a)
|
|
|
- CheckSum=0
|
|
|
- Bytenum=0
|
|
|
- FrameState=0
|
|
|
+ CheckSum = 0
|
|
|
+ Bytenum = 0
|
|
|
+ FrameState = 0
|
|
|
elif FrameState==2:
|
|
|
if Bytenum<10:
|
|
|
GYROData[Bytenum-2]=data
|
|
@@ -166,9 +173,11 @@ def get_angle(datahex):
|
|
|
|
|
|
|
|
|
if __name__=='__main__':
|
|
|
- ser = serial.Serial(serial_port, 57600, timeout=0.5)
|
|
|
- print(ser.is_open)
|
|
|
+
|
|
|
+ mySerial = serial.Serial(serial_port, 57600, timeout=0.5)
|
|
|
+ print("Now IMU module is working...")
|
|
|
|
|
|
- while(1):
|
|
|
- datahex = ser.read(33)
|
|
|
+ while True:
|
|
|
+
|
|
|
+ datahex = mySerial.read(44)
|
|
|
DueData(datahex)
|