【问题标题】:Exact Return Values of "Attitude" and "Velocity" In Dronekit APIDronekit API 中“态度”和“速度”的准确返回值
【发布时间】:2016-06-23 13:04:27
【问题描述】:

我已经彻底阅读了 Dronekit-Python API 参考,在继续我的硕士工程项目之前,我需要更多信息。我正在使用 Raspberry-Pi 2B 作为 Pixhawk 飞行控制器的配套计算机,以获取有关特定时间实例的直升机的某些信息。我需要有关 Dronekit-Python API 中某些调用的返回结构和返回值的更多信息。

首先,我只能使用欧拉角,如果“classdronekit.Attitude”不返回欧拉角,我想知道以欧拉角获得直升机当前姿态的最简单方法是什么(按 Pixhawk 飞行控制器的 Yaw-Pitch-Roll 顺序)。

其次,我想知道速度矢量在哪个轴/参考系中返回。它是相对于直升机的固定体轴还是相对于 North-East-Down 坐标系中的某个起始位置。我还想知道速度矢量是如何获得的,是仅基于 GPS 和压力传感器测量,还是融合了包括 IMU 在内的所有车载传感器。这将极大地影响 Velocity 矢量的准确性,这将在我的 UKF 中包含很多不确定性。

【问题讨论】:

    标签: dronekit-python


    【解决方案1】:

    态度以弧度返回。在这里,我将向您展示我用来将弧度转换为度数的代码。只需将转换常数更改为弧度到欧拉转换即可。

    假设您在车辆类中。

    # Attitude attribute listener. 
    # This will call attitude_callback every time the attitude changes
    self.add_attribute_listener('attitude', self.attitude_callback)
    
    def attitude_callback(self, *args):
        attitude = args[2]
        if attitude is not None:
            # degrees = radians * 180 / pi
            # CHANGE TO CONVERT FROM RADIANS TO EULER HERE 
            const = 180 / pi
            pitch = attitude.pitch * const
            yaw = attitude.yaw * const
            roll = attitude.roll * const
            self.horizon = (int(pitch), int(roll), int(yaw))
    

    Velocity 为您提供 [velocity_x, velocity_y, velocity_z]。

    • velocity_x, # NED 帧中的 X 速度,单位为 m/s
    • velocity_y, # NED 帧中的 Y 速度,单位为 m/s
    • velocity_z, # NED 帧中的 Z 速度,单位为 m/s

    要了解它的工作原理,您首先需要了解 NED 框架的工作原理。 看看 send_ned_velocity() 在:

    http://python.dronekit.io/examples/guided-set-speed-yaw-demo.html#example-guided-mode-send-global-velocity

    【讨论】: