好消息!好消息! PX4-ECL 以python替代matlab

PX4-ECL或许是同类项目中最优秀的(或者之一吧),从事无人机滤波开发或者类似多传感器融合的开发者很多都读过这个项目的代码。github地址

但这个项目一直以来有个遗憾,卡尔曼滤波的矩阵求解部分是用matlab完成的,如下图。这么做有什么问题呢?

顺便说一下,之前要通过PX4-ECL\EKF\matlab\scripts\Inertial Nav EKF\GenerateNavFilterEquations.m 来建模和生成c++矩阵。

  1. matlab是收费的,闭源的,与px4的开源,显得有点儿格格不入
  2. 影响传播,这是所有matlab开源项目的共同弱点,分享出去,那么别人得有matlab,可是matlab是收费的,而且很贵
  3. matlab是MathWorks公司的产品,说不定哪天放弃了呢?
  4. 当然有个解决办法,用px4的代码,不改模型,或者手动推导,手动写代码(这也是可以的~)
    在这里插入图片描述
    可是,终于,matlab这11.9%的代码,可以变成0了。因为python来了,python是免费的,而且是开源的。不得不承认,现在几乎所有领域,python都可以替代matlab。当然,除了simulink的可视化建模,和一些toolbox。除了,这两个都可以替代,如果您发现,您的应用中,matlab不可以被python替换,那咱们可以聊聊~

怎么样?是不是跃跃欲试了?很可惜,直接运行python程序的话,可能会遇到以下错误。Sympy似乎不支持21的矩阵和一个标量生成一个31的矩阵,不过没关系,可以把标量换成1*1的矩阵就可以了。

Generating yaw estimator code ...
Traceback (most recent call last):File "main.py", line 629, in <module>generate_code()File "main.py", line 624, in generate_codeyaw_estimator()File "main.py", line 430, in yaw_estimatornewStateVector = Matrix([velNew,psiNew])File "E:\1-bin\anaconda\lib\site-packages\sympy\matrices\dense.py", line 420, in __new__return cls._new(*args, **kwargs)File "E:\1-bin\anaconda\lib\site-packages\sympy\matrices\dense.py", line 432, in _newrows, cols, flat_list = cls._handle_creation_inputs(*args, **kwargs)File "E:\1-bin\anaconda\lib\site-packages\sympy\matrices\matrices.py", line 2137, in _handle_creation_inputsflat_list.append(cls._sympify(in_mat[j][i]))
TypeError: 'Add' object is not subscriptable

修改代码为如下所示,

    # attitude update equation (修改的是这里)psiNew = Matrix([psi + daz])# velocity update equationsvelNew = Matrix([vn,ve]) + Tbn*Matrix([dvx,dvy])# Define the state vectorsstateVector = Matrix([vn,ve,psi])

再运行一下,我们发现程序运行成功,代码文件也生成了,

F:\1-own\ecl\ecl\PX4-ECL\EKF\python\ekf_derivation>py main.py
Starting code generation:
Creating symbolic variables ...
Defining state propagation ...
Computing state propagation jacobian ...
Computing covariance propagation ...
Simplifying covariance propagation ...
Writing covariance propagation to file ...
Generating heading observation code ...
Generating gps heading observation code ...
Generating mag observation code ...
Generating declination observation code ...
Generating airspeed observation code ...
Generating sideslip observation code ...
Generating optical flow observation code ...
Generating body frame velocity observation code ...
Generating body frame acceleration observation code ...
Generating yaw estimator code ...
Code generation finished!
2020/12/23 周三  21:12            43,186 3Dmag_fusion_generated_compare.cpp
2020/12/23 周三  21:35            15,257 3Dmag_generated.cpp
2020/12/23 周三  21:35            14,441 3Dmag_generated_alt.cpp
2020/12/23 周三  21:34             2,840 3Dmag_innov_var_generated.cpp
2020/12/23 周三  21:12            43,133 acc_bf_fusion_generated_compare.cpp
2020/12/23 周三  21:37            11,017 acc_bf_generated.cpp
2020/12/23 周三  21:37            11,001 acc_bf_generated_alt.cpp
2020/12/23 周三  21:12            25,708 beta_fusion_generated_compare.cpp
2020/12/23 周三  21:36             6,251 beta_generated.cpp
2020/12/23 周三  21:34            32,739 covariance_generated.cpp
2020/12/23 周三  21:12            92,970 covariance_generated_compare.cpp
2020/12/23 周三  21:12            29,263 flow_fusion_generated_compare.cpp
2020/12/23 周三  21:36            11,359 flow_generated.cpp
2020/12/23 周三  21:37            10,984 flow_generated_alt.cpp
2020/12/23 周三  21:12             7,997 gps_yaw_fusion_generated_compare.cpp
2020/12/23 周三  21:34             3,821 gps_yaw_generated.cpp
2020/12/23 周三  21:12             7,675 mag_decl_fusion_generated_compare.cpp
2020/12/23 周三  21:35             2,077 mag_decl_generated.cpp
2020/12/23 周三  21:12            11,120 tas_fusion_generated_compare.cpp
2020/12/23 周三  21:35             3,348 tas_generated.cpp
2020/12/23 周三  21:12               422 util.h
2020/12/23 周三  21:37            12,612 vel_bf_generated.cpp
2020/12/23 周三  21:37            13,346 vel_bf_generated_alt.cpp
2020/12/23 周三  21:37               742 yaw_estimator_covariance_prediction_generated.cpp
2020/12/23 周三  21:38             2,017 yaw_estimator_measurement_update_generated.cpp
2020/12/23 周三  21:12            11,173 yaw_fusion_generated_compare.cpp
2020/12/23 周三  21:34             3,972 yaw_generated.cpp


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部