longer95479@home:~$

Drone Vibration


四旋翼无人机的飞行控制的反馈主要来自于 IMU,也就是加速度计和角速度计,其中角速度测量值对震动不敏感,而加速度测量值对震动十分敏感,若减震不佳,如机架有其他部件未上紧,或是桨叶严重受损,都会对带来高频的振动噪声,对飞行控制还有里程计的估计有“毁灭性的污染”。此时使用数字滤波,只会带来很大的相位延迟,仍然会导致控制的不稳定。因此只有从源头上解决震动,辅以软件数字滤波,才能得到较好的控制效果。

引用自 px4 的教程: A few of simple steps that may reduce vibrations are:

  • Make sure everything is firmly attached on the vehicle (landing gear, GPS mast, etc.).
  • Use balanced propellers.
  • Make sure to use high-quality components for the propellers, motors, ESC and airframe. Each of these components can make a big difference.
  • Use a vibration-isolation method to mount the autopilot. Many flight controllers come with mounting foam that you can use for this purpose, while others have inbuilt vibration-isolation mechanisms.
  • As a last measure, adjust the software filters. It is better to reduce the source of vibrations, rather than filtering them out in software.

振动影响因素实验

为了验证不同因素对加速度计测量值震动,进行了一下几个实验:

第一个实验为震动最小的配置,作为一个参考基准,震动最小的原因是其桨叶全新,同时上部未安装相机、NX机载电脑等额外的负载,因此振动的来源最少。第二至四个实验,随着改进措施的实施,震动逐渐减小,结果如下:

实验编号 1 2 3 4 5
振动幅值[m s^-2] 0.75 15.0 3.0 2.75 2.5

结论为桨叶弯折会带来巨大的振动,负载晃动会带来一定的振动,桨叶轻微磨损则问题不大。

具体实验配置和测试结果如下:

  1. 08 号:桨叶全新 + 无任何额外负载 orin08_noload

  2. 01 号:桨叶磨损弯折 + 负载松动 orin01_bladebroken_loadloose

  3. 01 号:桨叶换新 + 负载松动 orin01_newblade_loadloose

  4. 01 号:桨叶换新 + 上紧用于固定 RS 相机的 3D 打印件 orin01_newblade_tightRS

  5. 01 号:桨叶换新 + 上紧rs相机打印件 + 垫nx板打印件中间 orin01_newblade_tightRS_padNX

油门估计反馈量的选择

下图是滑窗100 + 延迟补偿,imu原始数据 和 imu_propagate 的速度微分后 都有相同的高频噪声,差了个9.8的直流分量,都不适合用于油门估计。

odom的速度微分后,得到加速度,频率较低,但没有高频噪声。 alt text

归根结底,如果没有解决振动问题,并没有合适的加速度反馈量来源,因此首要的目的还是利用上文的结论对 imu 进行减震。

数字一阶低通滤波

在完成减震后,可进一步使用软件滤波,进一步提高加速度计测量值的质量,同时不带来太多的相位延迟。

一阶低通滤波,给定截止频率 $f_c$,采样频率 $f_s$,可计算权重: \(b = 2 \pi \frac{f_c}{f_s}\)

\[a = \frac{b}{1 + b}\] \[y[n] = a * x[n] + (1-a) * y[n-1]\]

如果选择 a = 0.5 进行滤波,效果如下:

实验类型 无滤波 有滤波(a = 0.5)
振动幅值 [m s^-2] 2.5 2.0

无滤波: nolpf

有滤波: 1st_lpf

参考

航模基础知识——–螺旋桨的静平衡

Vibration Isolation - px4



[Paper Reading] TextSLAM: Visual SLAM With Semantic Planar Text Features


TPAMI

  • 提供了室内和室外数据集,室内的真值由动捕提供,室外的真值由sfm提供(COLMAP)

几何信息

平面的参数化

如何表示 Text Patch 呢,换言之如何参数化呢?

  • 类似光线投射,平面表示为 $\theta$,归一化平面上的点如果在平面上,使用$\rho = \theta ^T \tilde{m}$ 求得该点的深度,从而获得该点的 3D 坐标

这个 $\theta$ 如何求得呢?考虑空间上的平面方程,使用某一帧相机的相机坐标系: \(n_1 x + n_2 y + n_3 z + d = 0\)

表达得更紧凑一些,即

\[n^Tp + d = 0\]

A straightforward parameterization of a text plane could be directly using the four parameters (n1,n2,n3,d) of the plane equation. However, this is an over-parameterization that leads to rank deficiency in the nonlinear least-squares optimization. We hence adopt a compact parameterization that contains only three parameters.

也就是说,平面只有三自由度(因为沿着平面沿着自身移动,以及绕着垂直于自身的向量旋转,得到的还是自身),而使用平面方程来表征的话需要四个参数,这样会在非线性优化阶段带来不满秩的问题,从而导致优化的不稳定。

那么该如何减少到三个参数来表示呢?其实很简单,整个方程乘上一个系数仍然成立,那么我们直接令方程最后的常数项为 1,这样就可以用三个参数来表示平面了

\[\frac{n^T}{d} p + 1 = 0\]

除了优化计算上的好处,这种表示有什么几何上的用处呢?结合视觉的场景,我们可以利用这种表示,来获取相机归一化平面上的任意一个点,向外射出,与该平面的交点的深度:

\[\rho = \frac{1}{z}, \tilde{m} = [u,v,1] = \rho p\] \[\frac{n^T}{d}\frac{\tilde{m}}{\rho} + 1 = 0\] \[\rho = - \frac{n^T}{d} \tilde{m} = \theta^T \tilde{m}\]

如果我们通过平面检测算法,得到至少三个属于平面的点的相机归一化平面坐标及其深度,我们就可以求出平面的参数 $\theta$:

\[\begin{bmatrix} \tilde{m}_1^T \\ \vdots \\ \tilde{m}_n^T \end{bmatrix} \theta = \begin{bmatrix} \rho_1^T \\ \vdots \\ \rho_n^T \end{bmatrix}\]

构建观测模型

如何构建观测模型呢?

首先我们要明确构建观测模型的目的,为的是利用观测模型,输入状态变量,输出得到预测值,之后与实际的观测值进行对比,如果完全一致,则表明状态的估计完全正确,如果不一致,则需要调整状态的估计值,尽可能地让预测值和观测值一致。

因此第一步,考虑我们关心的状态有哪些,测量值有哪些?第二步,怎么把状态和测量值关联起来。第三步,怎么对比预测值和观测值,即挑选一个合适的度量。

从直观的角度思考,有两个机位,前方有一个平面块,显然重投影的表达式和 两个机位的位姿平面的位姿 有关,即

\[m' = h(m, T_h, T_t, \theta)\]

$m$ 是平面上的点在第一帧图像上(host image plane)的投影(归一化坐标),$m’$ 是平面上的点在第二帧图像上(target image plane)的投影,$T_h$ 和 $T_s$ 分别是第一帧和第二帧相机位姿。

推导的思路如下:

  • 第一帧图像中检测到了平面上的一个点,归一化坐标为 $m$, 齐次坐标为 $\tilde{m}$
  • 计算该点在第一帧机位下的 3D 坐标:$p = \tilde{m} / \rho = \tilde{m} / (\theta^T \tilde{m})$
  • 把该点的 3D 坐标转换到第二帧机位下 $p’ = Rp + t$
  • 此时第二帧图像里的该点的齐次坐标 $m’$ 正比于 $\rho’$,即 $m’ \sim R\rho p + t \rho = R\tilde{m} + t \theta^T \tilde{m} $
  • $m’ \sim (R + \theta^T t) \tilde{m} = H\tilde{m} $

使用文本块的观测值(第二帧的图像)和预测值之间的所有像素光度误差平方和作为损失函数。

We take each text regionas a single patch and align it to other frames directly by minimizing the difference between them instead of detecting the word once again.

\[\]

语义信息

场景文本的语义具有场景不变性,对场景的理解和数据关联十分有利。

语义信息由两部分组成,文本字符串 和 可信损失。可信损失就是个度量,越低表示质量越好,越可信。可信损失又由两部分组成,语义部分和几何部分。

语义部分直接由文本提取器给出的置信度直接得到。

几何部分则考虑什么样的情况最有利于观测平面块上的文本?面朝平面块,且距离文本块不要太远,算是合适的视角,此时观测到的文本也更可信。



ssh a nx orin and make its docker pull work


问题场景:使用个人PC通过 ssh 连接到 orin nx,但由于网络问题,orin的 docker pull 命令无法正常使用。而个人pc已开启代理,端口为127.0.0.1:8889(具体地址端口可在 v2ray 的首选项里查看)。

解决思路则是将 ssh 的 orin 的本地端口8889 关联到个人pc的 127.0.0.1:8889 上,之后在docker的代理配置文件里配置代理地址端口为 127.0.0.1:8889。

使用 ssh -R 将你的本地代理端口转发到远程主机,使远程主机上的端口与本地代理关联

ssh -R 8889:127.0.0.1:8889 orin01@10.10.10.11

要在远程终端使用代理,则执行如下命令

export http_proxy="127.0.0.1:8889"
export https_proxy="127.0.0.1:8889"
export ftp_proxy="127.0.0.1:8889"
export ALL_PROXY="socks5://127.0.0.1:1089"

创建文件夹 /etc/systemd/system/docker.service.d/

创建文件 /etc/systemd/system/docker.service.d/http-proxy.conf,填写以下内容

[Service]
Environment="HTTP_PROXY=127.0.0.1:8889"

创建文件 /etc/systemd/system/docker.service.d/https-proxy.conf,填写以下内容

[Service]
Environment="HTTPS_PROXY=127.0.0.1:8889"

注意事项:

Please check the dockerservice configuration /etc/systemd/system/docker.service.d/http-proxy.conf, if the configuration file is like this,

Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"

Please remove the https:// and http://

stackoverflow - docker: Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: EOF

docker 设置代理,以及国内加速镜像设置



Total views. cowboys. Hits