GIF 2023-1-29 5-25-26.gif

上文中介绍了通过姿态角实现匿名上位机显示飞机状态的python程序的编写方法,本文将使用pyserial库使用python编程来仿真串口数据从而使匿名上位机飞行器姿态的动态变化。

参考文献:python下使用串口进行16进制命令和数据发送

#匿名上位机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()

发表评论