上文中介绍了通过姿态角实现匿名上位机显示飞机状态的python程序的编写方法,本文将使用pyserial库使用python编程来仿真串口数据从而使匿名上位机飞行器姿态的动态变化。
#匿名上位机V7串口控制实验
#输入ROL、PIT、YAW(姿态角,依次为横滚、俯仰、航向,精确到 0.01)
#串口发送数据帧至匿名上位机V7
#作者:玩机器人的赵老师
import serial
import time
#自定义函数——姿态角设定
def rpy_set(ROL_value,PIT_value,YAW_value):
# if (ROL_value < 0): # input时负值要取反加一
# ROL_value = (~(-ROL_value) & 0xFF) + 1
# if (PIT_value < 0): # input时负值要取反加一
# PIT_value = (~(-PIT_value) & 0xFF) + 1
# if (YAW_value < 0): # input时负值要取反加一
# YAW_value = (~(-YAW_value) & 0xFF) + 1
ROL_H = (ROL_value >> 8) & 0xFF #获取高八位
ROL_L = ROL_value & 0xFF #获取低八位
PIT_H = (PIT_value >> 8) & 0xFF
PIT_L = PIT_value & 0xFF
YAW_H = (YAW_value >> 8) & 0xFF
YAW_L = YAW_value & 0xFF
rpy_data=[0xAA, 0xFF, 0x03, 0x07,ROL_L,ROL_H,PIT_L,PIT_H,YAW_L,YAW_H,0x00]
SC = 0 #和校验
AC = 0 #附加校验
for i in rpy_data:
SC += i
AC +=SC
rpy_data.append(SC & 0xFF)
rpy_data.append(AC & 0xFF)
ser.write(rpy_data)#输出功率设定值
time.sleep(0.02)
ser = serial.Serial("com2", 115200) # 选择串口,并设置波特率
if ser.is_open:
print("port open success")
else:
print("port open failed")
def main():
ROL = 0
PIT = 0
YAW = 0
while True:
# ROL = int(float(input("请输入横滚姿态角:\n"))*100)
# PIT = int(float(input("请输入俯仰姿态角:\n"))*100)
# YAW = int(float(input("请输入航向姿态角:\n"))*100)
if ROL<18000:
ROL +=100
else :
ROL=-18000
if PIT<18000:
PIT +=100
else :
PIT=-18000
if YAW<18000:
YAW +=100
else :
YAW=-18000
rpy_set(ROL,PIT,YAW)
if __name__=='__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()