【Python】使用 OpenGL 绘制茶壶

最终呈现效果

茶壶旋转

目标

使用一个三维动态动画来表现倾角传感器的角度变化。

方法

倾角传感器可以获取三个方向的角度信息:方位角、俯仰角和航向角。首先获取倾角传感器得到的角度信息,然后动态绘制茶壶来表现角度信息。

技术

Python
相关包:
serial(串口读取)
OpenGL(用来绘制三维图形)

旋转原理

在OpenGL三维空间中,飞机可以绕x、y或z轴旋转。倾角传感器可以方位角、俯仰角和横滚角信息。方位角对应绕y轴旋转,俯仰角对应绕z轴旋转,横滚角对应绕x轴旋转。
方位角获取范围:0°~+180°, 0°~-180°
俯仰角获取范围:0°~+90°, 0°~-90°
横滚角获取范围:0°~+180°, 0°~-180°
在Python代码里,绕某个轴旋转可表示为:

glRotatef(ang_fw, 0, 1, 0) # 绕y轴旋转
glRotatef(ang_fy, 0, 0, 1) # 绕z轴旋转
glRotatef(ang_hg, 1, 0, 0) # 绕x轴旋转

旋转角度为正数时,表示绕逆时针旋转。例:绕y轴旋转30°,表示飞机绕着y轴逆时针旋转30°。

在这里插入图片描述
在这里插入图片描述

异常数据处理

接收到的倾角传感器数据可能有异常,异常数据就不能要,需要丢弃。

# 记录上一次获取的值
            if first_flag:
                last_fw = ang_fw
                last_fy = ang_fy
                last_hg = ang_hg

                first_flag = False

            # 后面获取的值和上一次的值进行比较
            error = 3
            if abs(last_fw - ang_fw) > error or abs(last_fy - ang_fy) > error or abs(last_hg - ang_hg) > error:

                error_times += 1
                #print('第%d次异常数据:%.2f %.2f %.2f' % (error_times, ang_fw, ang_fy, ang_hg))

                # 连续三次和last变量比较,如果都不符合要求,说明之前的last变量初值是错误数据
                if error_times >= 3:
                    last_fw = ang_fw
                    last_fy = ang_fy
                    last_hg = ang_hg
                    error_times = 0
                else:
                    ang_fw = last_fw
                    ang_fy = last_fy
                    ang_hg = last_hg
            else:
                last_fw = ang_fw
                last_fy = ang_fy
                last_hg = ang_hg

                error_times = 0

源代码

# sudo apt-get install python3-opengl
# pip3 install pyserial   

# -*- coding: utf-8 -*-
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

import time, random

import serial

# ser = serial.Serial( '/dev/ttyUSB0', 9600, timeout=0 )
ser = serial.Serial("COM3"
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值