北云组合导航设备X1使用排坑

文章讲述了在使用北云X1组合导航设备时遇到的参数设置和欧拉角解析问题。经过排查,确定正确的旋转顺序为ZXY,但需注意角度转换,特别是Yaw可能需要减去90度。最终,通过坐标系转换从NED到ENU,解决了点云拼接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

北云组合导航设备X1使用排坑

带着问题,去寻找答案,以及在过程中解决意想不到的问题。


一. 问题

  1. 使用北云组合导航设备,如何进行各类参数设置?以及需要设置哪些参数?
  2. 拿到X1设备提供的InsPVA原始数据,如何对三个欧拉角进行解析,旋转顺序是怎样的?

二. 北云组合导航设备bynav X1使用问题

参考
1. 官方视频教程
2. 产品用户手册下载

这里新手主要结合这两个资料进行相关设置,关于串口的相关指令,在产品手册中写的比较详细。主要注意关于天线杆臂值旋转参数RBV设置byoffset软件使用等。


三. 北云X1 原始欧拉角信息,如何正确转换为相对于ENU(东北天)坐标系的旋转数据

参考
北云官方提供的三个角度说明

原本只是一个普普通通欧拉角旋转问题,只需要提供对应顺序和角度值即可,但是事情的排查过程经历了一波三折,排查问题的过程分成了以下三个阶段:


1. 供应商提供信息,欧拉角正确旋转顺序

按照ZXY旋转顺序,对应Yaw、Pitch、Roll; Z是左手法则正方向,其他是右手法则正方向
但是我们测试过程中,发现按照此方式进行位姿+点云数据无法拼接成一张点云图(除去位姿误差影响)。

## python
from scipy.spatial.transform import Rotation as R
angle = [-yaw, pitch, roll]   # 角度
q = R.from_euler('ZXY', angle, degrees=True)  # 注意:大写ZXY代表内旋,xyz代表外旋

供应商并未提供详细代码,根据供应商提供顺序进行解析;请假其他认识的人,说yaw可能存在加减90度的问题,因为apollo工程gnss驱动 novatel数据解析有提到关于角度需要-90,再解析的情况,尝试无果。
在这里插入图片描述
在这里插入图片描述

constexpr double DEG_TO_RAD = M_PI / 180.0;
constexpr double azimuth_deg_to_yaw_rad(double azimuth) {
  return (90.0 - azimuth) * DEG_TO_RAD;
}

2. 其他同事根据各种图像、点云、场地等信息推理导航参考系并非ENU,而是NED

思路:
1)原始位姿数据解析,按照ZYX顺序,Yaw、Pitch、Roll,认为此得到的位姿是相对于NED参考系;
2)将位姿数据转换到ENU坐标系下。

NED2ENU = np.array([[0,1,0],[1,0,0],[0,0,-1]])

3)激光外参采用的是sensor相对于INS坐标系(NED坐标系)。
至此,得到的激光拼接的点云地图结果是完整的,但细想有许多地方与供应商提供的信息和现场实际信息都有矛盾,比如现场INS载体坐标系是严格右前上的,又或者供应商所说INS的导航参考系就是ENU,不支持NED的设置。


3. 根据第二步推断的正确结果,做反向推导,求出正确的欧拉角解析方法

根据原理,R_NED2ENU * R_ZYX * R_lidar2NED = R_ZXY * R_lidar2ENU, 反向求出R_ZXY。
eg.
例如R_ZYX取值[200,10,20](yaw,pitch,roll), 则 R_ZXY [-20,-10,-20], 刚好满足[180°-yaw, -pitch,-roll]的角度计算,点云地图验证后也是拼接正常, 并非完全是供应商提供的 RZ(-yaw)*RX(pitch)*RY(roll)。(不排除设备设置的某些不注意的参数导致,供应商远程设置的,自己并未参与,只是告诉我们都是默认参数)

def test():
    angle = [200, 10, 20]
    true_q  = R.from_euler('ZYX', angle, degrees=True) # shaowei
    q = true_q.as_quat()
    print("true qx qy qz qw: ", q[0],q[1],q[2],q[3])
    
    NED2ENU = np.array([[0,1,0],[1,0,0],[0,0,-1]])
    frontlidar2NEDins = np.array([[1,0,0],[0,-1,0],[0,0,-1]])
    frontlidar2ENUins = np.array([[0,1,0],[-1,0,0],[0,0,1]])
    part0 = np.linalg.inv(frontlidar2ENUins)
    part1 = np.dot(NED2ENU, true_q.as_matrix())
    part2 = np.dot(part1, frontlidar2NEDins)
    part3 = np.dot(part2, part0)
    print(part3)
    m = np.matrix(part3)
    ret = R.from_matrix(m)
    euler = ret.as_euler('ZXY', degrees=True)
    print(euler) # -20 -10 -20

总结

在使用北云组合导航设备bynav X1时,首先务必遵照手册进行相关参数的正确设置,其次注意角度解析时,按照ZXY旋转顺序,对应Yaw、Pitch、Roll;Z是左手法则正方向,XY是右手法则正方向,即解析方式如下:

angle = [180 - yaw, -pitch, -roll]
q = R.from_euler('ZXY', angle, degrees=True)
### 关于板卡维修的信息 对于板卡的维修及相关故障查方法,虽然未有具体文档提及详细的维修教程或方法[^1],但从行业通用实践以及硬件设备维护的角度出发,可以总结一些可能适用的方法。 #### 1. **常见故障分析** 通常情况下,板卡类产品的故障主要分为以下几个方面: - **电源问题**:供电不足或者电压不稳定可能导致板卡无法正常工作。 - **接口连接异常**:数据传输中断可能是由于接口松动或接触不良引起。 - **元器件损坏**:某些关键芯片或电容的老化、烧毁也可能引发功能性失效。 #### 2. **初步检测手段** 为了有效定位问题所在,建议采取如下措施进行初步诊断: - 使用万用表测量输入输出端口的电压值是否处于规定范围内; - 借助示波器观察信号波形是否有畸变现象发生; #### 3. **深入检修流程** 如果简单的外部检查未能解决问题,则需进一步拆解并仔细查看内部结构: - 对照电路图逐一检验各个元件的工作状态; - 利用专业的测试仪器如ICT在线测试仪进行全面扫描以发现潜在缺陷位置。 #### 示例代码片段 - 自定义健康监测脚本 下面提供一段Python伪代码用于模拟定期监控硬件运行状况的功能实现思路: ```python import time def check_hardware_status(): while True: temperature = get_temperature() # 获取当前温度读数函数 voltage_level = read_voltage() # 读取实时电压水平 if not (TEMP_MIN <= temperature <= TEMP_MAX): log_error("Temperature out of range!") elif voltage_level < VOLTAGE_THRESHOLD: alert_user("Low Voltage Detected") time.sleep(CHECK_INTERVAL) if __name__ == "__main__": try: check_hardware_status() except Exception as e: handle_exception(e) ``` 此脚本仅为概念展示用途,在实际应用环境中还需考虑更多细节因素调整优化逻辑设计。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Darchan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值