# 150 auv 软件结构


# 150 auv 适配接口

## 发布变量

根据pNodeReporter模块订阅的变量，需要发布的变量如下

NAV_X: The ownship vehicle position on the x axis of local coordinates.
NAV_Y: The ownship vehicle position on the y axis of local coordinates.
NAV_LAT: The ownship vehicle position on the y axis of global coordinates.
NAV_LONG: The ownship vehicle position on the x axis of global coordinates.
NAV_HEADING: The ownship vehicle heading in degrees.
NAV_YAW: The ownship vehicle yaw in radians.
NAV_SPEED: The ownship vehicle speed in meters per second.
NAV_DEPTH: The ownship vehicle depth in meters.


# 时序控制

采样时间、指令发送和指令计算是三个独立的线程进行的，需要对时序进行控制，理论上的时序应该是：

采样->指令计算->指令发送

采样频率为5Hz，即为200ms，指令计算在200ms内，指令计算完成后再发送指令，整个过程在200ms内完成

方案1：使用时间戳进行同步：

    m_listen_time < m_calc_time < m_send_time

    使用这种方式程序灵活性较高，交互程序和控制程序可以写成两个独立的程序，但是时序控制更加复杂，由于通信延迟会造成一部分实时性的性能损失

方案2：在采样时间循环内进行：在模块采样时进行计算，程序灵活性降低，需要在交互程序中同时包含到控制程序，但是实时性会较好

使用方案2可以考虑使用simulink进行代码生成和集成，将整个控制也集成到里面

# 惯导精度问题

目前惯导设备经纬度的精度为1e-4，大概为11米所有的精度，精度比较低，或许可以使用航位推算结合无迹卡尔曼滤波弥补并提高这个精度
