日志记录+工程经验

文章索引:

1.开发中遇到的bug记录、bug分析

px4开发bug记录_r135792uuuu的博客-CSDN博客

2.基础知识,学习笔记记录

https://blog.csdn.net/weixin_45754151/article/details/128241956?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128241956%22%2C%22source%22%3A%22weixin_45754151%22%7D

F330启动(视觉VINS)经验:

按顺序搞

1.端口先开权限 sudo chmod 777 /dev/ttyACM0

2.开地面站,把消息的mavlink速率改了

这两个消息要开高一点,不然没法启动,而且不满足香农定理
mavlink -d /dev/ttyACM0 -s ATTITUDE_QUATERNION -r 200

mavlink -d /dev/ttyACM0 -s HIGHRES_IMU -r 200

开电调回传
mavlink -d /dev/ttyACM0 -s ATTITUDE_QUATERNION -r 70
mavlink -d /dev/ttyACM0 -s ATTITUDE_QUATERNION -r 70

3.遥控器解锁,等电机转完,567通道打到对应的位置PX4——指令——桨叶正常,然后油门杆推到中间

4.ego的指令看说明,如果只悬停就开启:

T1:source!!一定要source不然就没有什么msg
sh shfiles/rspx4.sh

T2:校准vins,我一般是没有校准的
rostopic echo vins的imu,看看飘的大不大

T3:source
roslaunch px4ctrl run.launch(啥名字不记得了,Tab补全)

T4:source
sh takeoff.sh

这个时候,如果想让飞机悬停,就把6通道打到上面“悬停”的地方
那么此时降落就只能这样:
油门遥感向下打一点,别打完了,慢慢降落到地上,关闭T1和T2,然后油门杆打到0

如果没有切入悬停状态,那就
T5:sh land.sh

F330ros控制节点:悬停部分右边的是集群的节点,我用不上。

mocap动捕的使用说明:(12.5日补充)

发现f330的起飞必须依赖于vins,才能做视觉融合,才能正常起飞。要是设置注释掉起飞节点文件里面的vins的部分就无法正常起飞。(因为后面想用mocap的数据填充到/mavros/vision_pose/pose里面去,而vins占据了这个话题,所以先把它禁掉。后来发现其实不用,见12月5日的日志原因)

vins启动(视觉启动)参数设置:

px4+vins+ego单机鲁棒飞行二(外部位姿估计篇)_Nankel Li的博客-CSDN博客_ekf估计风速

330镇楼:

12.1

一上午——下午三点:

1.开始想要进一步缩小偏差,所以整个rviz看看力的偏差到底在哪里。

终端打印没什么太大的偏差,当前是悬停时候的误差,还是比较小的:

完成了在rviz中显示wrench和force的marker。是整体的marker。

红色的是wrench,绿色的是marker。测试了几组,比较准确,发现终端打印的force有偏差,原来是我力的方向没有平衡。本来设计水平力,结果歪了,难怪有偏差

红色的是rviz自带的wrench显示,有点难看,但是比较简单,发布一下wrench要求的那个话题即可。(但是当时发布了没有即时显示出来,好像刷了很久之后才能看到)

绿色的marker比较自由,可以根据自己的设置修改显示。但是有点费事,写法看代码复用。

2.下午四点-晚上:

matlab进一步分析数据,滤波。整理了一些关于滤波,数据处理的文档。

数据处理和滤波理论,部分的代码复用

12.2

9.00-10.30:

修改了一下昨天的遗留bug,增加了关于单独显示三轴force的marker,更加精确的看到力的变化。

 10.50-11.10

检查了一下代码,简单优化了,该用引用的用引用,重构结构。

写日志。

下午2.00-4.10

原来的代码估计的force都不对了,很离谱,一直在debug找是哪的问题。结果发现,换了电池,重启之后又对了??很离谱,所以尽量满电再上。

估计是因为用的330的VINS来起飞的,起飞和悬停的油门取决于电池电压,电池电压不够了,默认的0.35的悬停油门不够,可能会升至0.4几才能起来,但是飞得也没有原来那么高度,估计的力偏小。

4.30-5.10

重新在n10上测了y轴2N和z轴-3N的力。y轴验证可以,但是z轴的力估计,数值上是对的,有静差。有一个0.5N的力,向下加3N后变成了-2.5N。

晚上-8点开组会之前:开mocap捕获mocap下的话题飞行测试。用的是超导写好的节点。测了两组bag,结果没有成功传到U盘上...明天来重新弄。看看记载电脑上有没有,名字是"SHUOMING1""SHUOMING2"

动捕mocap(NOKOV)经验:

关于Mocap和VIO的学习记录看另外的博客。这个下面有一点问题, different params leads to different method

说明书里面的一些细节看说明书,只记录动捕和ROS的启动、开启校准的方法

1.mocap软件windows启动:

1.1 先开mocap数据采集的软件,(形影那个),导入标定文件,按下方第一个按钮把摄像头打开。

        输入文件的名称后按enter,然后在界面上方“增加/删除模型”选择之前标定好的rigid的mav格式的文件,用n10的rigid叫“n10”。注意:如果rigid模型导入之后界面上没有出现这样的效果:

        那就说明飞机上放的反光点匹配不了你之前的模型。

使用vrpn_client_ros 获取动捕数据,例如

        roslaunch vrpn_client_ros sample.launch server:=10.1.1.198

        要不就重新建立一个新的rigid;要不就检查一下是不是飞机上哪有东西给他阻碍识别了(我中途因为飞机拿下去反光点掉了,重新安装了一个位置变了识别不出来,所以只能重新建立新的n10的rigid)

        弄完之后开下方中间的那个黑色的钮。然后开始摄像(红色的那个按钮。这一步好像只会用在在windows里面分析,位置在桌面左上角第一个里面。导出看说明书。ros下分析不需要录制,但还是录上以后用)

        打开桌面上的client,输入第五个地址:10.1.1.198,不要输入5,不要输入中括号!

2远程连接到机载电脑

连接到记载电脑后,cd到mocap文件夹下,运行(用的是超导写好的节点,一键连接,一键发布坐标转换后的数据很不错。不同的飞机只需要改变launch文件里一个参数)

先开
./preinitMocap.sh
再打开
./initMocap.sh

如果不用一键启动节点就只能这样,经常出问题:

使用vrpn_client_ros 获取动捕数据,例如

        roslaunch vrpn_client_ros sample.launch server:=10.1.1.198

然后查看一下发布的话题:

这个是超导修改之后的,以飞机自身所处的位置为0起点的position
rostopic echo /rigidBodyInWorld

这个是vrpn默认发的,姿态和上面一样,位置以mocap的世界坐标系为起点
rostopic echo /vrpn_client_node/n10/pose

QGC监听14557串口(虽然我也不知道有什么用),每次开QGC都connect一下

  ApplicationSettings -> 通讯连接 -> 添加新的连接

补充:在14557开放第二个MAVLink接口,将MAVROS连接到这个14557端口将会接收到实际飞行中发出的所有数据

3 用mocap补偿飞控

按照下面的步骤,设置一下QGC,然后打开运行启动脚本(脚本里面自带mavros)即可。必须要使用mavros来回传数据给PX4校准。

但是要注意当前飞机设定的姿态估计融合的算法是哪个:LPE、EKF2、Quat。不一样的。
我目前尝试过EKF2和LPE(LPE是LPE+Quat的方法,所以理论上来讲单Quat应该是一样的),因为F330使用单Quat校准起飞,EKF2无法解锁,所以我成功使用的是LPE来校准。

详细分析看12.5的Mocap使用经验。

3.1 EKF2融合

AID:勾选vision position fusion和vision yaw fusion。默认是GPS。

HGT:勾选VISION,默认是气压计

话题转发(假定待传输刚体名称为Tracker0),转发到mavros里面去

因为EKF2没有用到/mavros/mocap/pose这个话题,vision和mocap都是使用的同一个话题:mavros/vision_pose/pose,所以只能发这个

rosrun topic_tools relay /vrpn_client_node/Tracker0/pose /mavros/vision_pose/pose

启动MavRos

下面的地址要注意是不是自己的地址:        
roslaunch mavros px4.launch gcs_url:="udp://@127.0.0.1:14557"

f330里面,启动脚本里面自带了启动的mavros节点,看看地址是什么

查看动捕数据(QGC和mavros冲突,看不到,只能在终端rostopic看)

        AnalyzeTools -> MAVLINK Inspector -> VISION_POSITION_ESTIMATE

        可以观察到刚体的位移以及旋转信息,xyz roll pitch yaw

3.1 LPE融合(LPE+Quat):必须使用attitude_quaternion启动时

修改滤波融合的参数:SYS_MC_EST_GROUP F330上修改为第一个:loacal position estimation

后面的参数设置看12.5号的日志。

话题转发。因为LPE融合算法各自用各自的。vision用vision_pose  mocap用mocap,而ekf两个混到vision_pose一起用。

LPE需要发到/mavros/mocap/pose这个话题

rosrun topic_tools relay /vrpn_client_node/Tracker0/pose /mavros/mocap/pose

然后查看一下:

rostopic echo /mavros/imu/data
是否稳定,稳定就说明对了

TODO12.2 疑问:

我们知道vins的姿态和位置的数据,是以启动vins的节点开始计算的。也就是什么时候启动vins,vins就会把当前的姿态作为启动的初始状态(摄像头的第一帧)。

但mocap的姿态和位置如何确定?

12.4解决: 实验发现,mocap的姿态取决于摄像头拍摄到的在mocap世界坐标系下的姿态。

12.3

10.00 - 11.10

记录昨晚的内容和写日志。

常用指令列表和命令:

常用指令列表和命令

13.00 -14.50

写作业,水下机器人的综述。

15.00-16.00  分析

        1.先是运行了几遍之前在n10上录好的rosbag,x轴的数据比较好,y轴也还行,就是z轴的数据数值上对的上,但是数据有偏差。(我在飞机上放了一块300g砝码,向下有个3N的力,z轴什么都不放估计的外力的offset的是+0.5大概,放上去之后变成了-2.5N)

        猜想:z轴offset的来源可以有很多,但是综合考虑过x和y轴的估计情况的,没有太大的偏差x和y轴的偏差基本震荡区间【-0.1,+0.1】,y轴会稍微大一点,因为在静止地面上的时候,用QGC去看IMU的数据,y轴上始终有个0.2-0.3的y轴的加速度分量

又是因为我算世界加速度是通过IMU数学模型解算的世界加速度,所以可能是这里导致的原因。

IMU的数学模型

        问题:

        1.加速度计这个确实没法解决,但是我又要得到世界坐标系下的飞机加速度,GPS没法用,mocap的加速度也是通过位置微分来的也不太准确(看下图,微分出来都好大百的都有)。这个只能保存到excel里面在windows分析。

而且mocap发送到ros的消息也没有加速度的值,所以加速度这个东西没法直接获取准确的数值。

话题名字:n15的有两个:

/rigidbodyInWorld   这个是超导修改之后的,绑定在world系,以自己的坐标为position的起点

/vrpn_client_ros/mav/pose  这个是vrpn标准的名字,需要rostopic list查看一下

        2. 姿态的问题。姿态现在可用的有三种,IMU的姿态;mocap的姿态,vins_fusion的姿态。代码里的姿态目前用的是vins的姿态。因为mocap当时没有开,IMU的姿态没有做AHRS校正,它的yaw(w和z)是一直在稳定飘移,所以没法用。

左边是imu(未校正),右边是vins的。而且并不一样

        解决办法:所以考虑就是就用mocap来补偿IMU。看看能不能得到补偿过后的IMU的数据,比如在代码中进行融合互补得到的加速度,角速度,姿态等信息。

        要不就用校正之后的IMU数据,要不就不管它的校正,直接拿到mocap的姿态数据来用就行。

16.00-17.10 & 18.20 -  20.00

状态估计算法选择参数

开mocap 之后发现一个非常离谱的问题。

QGC里面没有对应的参数?很迷,一直在找是哪的问题。按照上面的动捕经验那一个参数设置qgc,没有找到ekf2 mask和ekf2 hid那两个参数。一直以为是哪的问题,最后发现是姿态估计融合滤波参数的选择,直接导致了没有这两个参数。如下图。

如果选择F330使用的融合方式:

 是没有那么多EKF的参数的,只有零星几个。

但是F330在启动的时候必须要订阅这个/mavros/imu/data这个话题,而这个话题看mavros的源码可以发现是必须要来自于这个mavlink才行:

而这个mavlink话题的发布又涉及到了px4飞控中状态估计的选择,也就是如下图:

切换状态估计器 | PX4 自动驾驶用户指南

  • EKF2 姿态、位置和风的状态估计器 - EKF2 是一个扩展卡尔曼过滤器,用于估计姿态、3D 位置/速度和风状态。
  • LPE 位置估计器 - LPE 位置估计器是 3D 位置和速度状态的扩展卡尔曼滤波器。
  • Q 姿态估计器 - 姿态Q估计器是一个非常简单、基于四元数的互补滤波器。

所以说必须启动LPE才能保证F330能起飞。目前只在LPE上能满足mocap补偿的方法并且在两台机子上都成功。 单四元数估计没法融合。

SYS_MC_EST_GROUP,该参数可以指定飞控状态估计的算法,有单四元数互补滤波,四元数互补滤波加LPE,EKF2,默认采用EKF2

使用ekf2所需的最低传感器配置为加速度计、陀螺仪、磁力计、气压计。如果缺少任意一个,则EKF2无法运行,如果缺少磁力计和气压计(也就是说只有IMU 6050这种垃圾IMU),可以使用单四元数互补滤波进行姿态解算,如果有位置传感器(如GPS),可以采用四元数互补滤波加LPE进行位姿估计。

12.5

所有的尝试只是局限在F330上,可能和固件编译的版本有关,有的网上的方法不行

9.30 - 11.20

看了一些资料和经验,确认是状态估计的方式选择不对。所以QGC中没有出现对应的参数选择。

有三种状态估计(滤波)方式:经过尝试,能在F330上成功用mocap校正的只有第一个:local position estimator(LPE)

在QGC中修改几个参数:

        0.before  modify the params, first to save the default params and params after modified.

save button in GUI front-up corner TOOLs .

        1.修改滤波融合的参数:SYS_MC_EST_GROUP F330上修改为第一个:loacal position estimation 才行   位置估计器

att_ext_hdg_m → motion capture   使用动补观测

att_w_ext_hdg → 1   完全相信外部姿态

屏蔽gps,方便使用动捕

在usb连接时,允许飞行,此设置是为了安装机载电脑。因为记载电脑要控制飞控是通过USB线连接的

14.00 - 17.20

终于调试好了QGC 的参数

参数参照:QGC的参数对照表和解释:

参数参照表 | PX4 自动驾驶用户指南

PX4从放弃到精通(十八):参数_超维空间科技的博客-CSDN博客_px4参数

然后通过话题转发完成mocap校准飞控:

        发现只需要转发一个topic进去就行,就是/mavros/mocap/pose,发给vision的话会和vins冲突导致无法起飞。而且F330(或者说我的参数LPE的选择导致了)只需要/mavros/mocap/pose就能完成对IMU的校正,不需要/mavros/vision_pose/pose这个参数

    只用这一个即可    
    rosrun topic_tools relay /rigidBodyInWorld /mavros/mocap/pose


    我还发了这个
    rosrun topic_tools relay /vrpn_client_node/mav/pose /mavros/vision_pose/pose
    也没问题,但是起飞的时候,这个东西就会占用vins fusion的话题导致无法起飞,所以我没开

     /rigidBodyInWorld和/vrpn_client_node/mav/pose  基本一样,有一个坐标转换,我一直用的是/rigidBodyInWorld

可以看到本来是一直飘逸的mavros的imu姿态,终于稳定了:

运行之后节点图:

 total

一整个晚上:

研究超导的n15怎么起飞。超导的n15起飞有问题,炸了五次机,而且好像每次降落之后,油门打倒最低下了,关闭330的控制程序会突然起飞冲天...所以现在我n10的机子上,都是降落停稳之后先打急停,再关控制节点。(我估计是n15的vins没有搞好,很飘)

换成了我的n10,然后把n15上面的mocap启动节点cv过来修改了一下,然后正常运行了。

测试了z轴上放-3N的力的bag。

mocap校正的经验:关于一开始F330经验的问题解析

按照网上和官网的一部分教程,说需要使用EKF2滤波的方式,把mocap的参数传入到这个ros话题的/mavros/vision_pose/pose里面,再通过这个ros话题反传递会px4的mavlink,然后传递给飞控的uorb进行校准。

所以拿到数据的第一件事就是给他变成EKF2

然后按照12.2号的动捕经验修改那几个ekf的参数

然后转发:

rosrun topic_tools relay /rigidBodyInWorld /mavros/vision_pose/pose

然后我在开启f330的启动节点之后,发现这个东西和vins的这个话题冲突了,应该是vins解算的姿态也发布到这个里面来了(但不知道为什么,vins的pose并没有对IMU的姿态起到校准的作用?),所以冲突了,就没管他。

然后看官网说到了用LPE参数的设置

利用视觉或运动捕捉系统进行位置估计 | PX4 自动驾驶用户指南

突然反应过来:我这个是LPE融合,和EKF2不一样。

看这个参数使用对照:

LPE是都在用,而且各用各的,互不影响。所以我转发的vrpn的消息再LPE下只能取/mavros/mocap/pose里面,发到vision_pose里面是只对vision起作用(而我的参数又选择了att_ext_hdg_m → motion capture,所以在这套参数下根本没用vision这个玩意)

EKF2是只用到了vehicel_visual_odometry这个,对应上面的mavros是/mavros/vision/pose,所以之前发送过去的才会没有作用。

12.6

上午:

来了就开始录制新的bag,录制l在xyz三轴分别施加不同的力的bag,然后回来写日志。

2.00 - 17.10

完善代码,把mocap,imu校正之后的数据给放进来处理计算力。

还是那个问题:一直存在偏置。xyz三轴的偏置大概是:啥也没干时(-0.23,-0.55,0.67)-施加力之后悬停时(-0.3,-0.6,1.0)。

然后通过这些方法都没用:1.控制器消除静差——没有控制量,于是作废   2.修改重力加速度为深圳市的g-9.79——改完发现估计的力变小力  3.试错法——太慢了而且没有发现问题在哪。

估计是桨叶水平的问题导致悬停时候飞机倾斜;也可能飞机在悬停的时候控制器不稳定的;或者地面校准的时候地是歪的;

简单推导了一下数学关系(目前缺乏严格的数学关系)

晚上计划测试一组数据:1.飞机ground的时候;2.飞机stop悬停的时候;3.弹簧称末端连接皮筋,防止它的力跳变,然后再测一组xyz分别施加力的bag

18.10-19.30

完善日志,把之前细节的地方一个一个补上,简单整理了一下mocap的使用经验,过几天写个文档。

19.40- 21.40 计划测试

飞机应该是电池装的有点歪,飞起来直接朝右边冲过去。

飞机失控,震荡的原因:

1.vins飘了,定位失败,因为mocap会对vins造成影响,所以vins失误概率变大;

2.螺旋桨的问题,因为n10用很久了,炸过很多次,可能是导致了螺旋桨受损,升力不平衡;

3.单纯电池装歪了,一边伸出去比较多,重心不稳。

然后拆螺旋桨,重新换了一个,然后助教准备实验,没场地,就测试了1和2先回来分析。

工程经验

1.装配和拆卸:

螺旋桨太死了,最后采用力矩法(六角螺丝刀的把手上面有孔,找了个小改刀,穿进去六角螺丝刀的孔,然后旋转那个小改刀),能够提供一个很大的力矩,才能把那个螺丝拆下来。

2.弹簧称拉力不稳:

弹簧秤末端的挂钩连接一个橡皮筋,用橡皮筋再绑在要拉的物体上,这样会比较稳定。因为橡皮筋有韧度可以对抗形变,所以连接上再去拉橡皮筋不会有太大的变化。

12.7周三

上午:处理事情

14.00-17.20

一直在尝试解决force三轴的偏置问题。如果直接摆烂的话可以直接在结果处暴力加上偏置的值,但是为了考虑以后飞机的通用性,所以要想办法在不同的飞机上消除偏置的方法。考虑加上正态分布的影响。

各数据分析见word

加速度数据。静止在地面上时算出来的世界加速度的值的偏差。理论来讲应该是0 0 0

hover时估计的外力的数据

 

 然后查看force,accel等数据的正态分布参数,均值和方差。看笔记的word里记录。

目前思路有以下四个:

  1. 直接对force加偏置和正态分布,其实之前试过了也行,可能就是不太具有通用性
  2. 对解算出来的accel_world世界加速度值做加偏置(是否需要滤波后再加偏置)
  3. 对IMU原始数据accel滤波之后加偏置(同样)
  4. 找到水平面之间的数学关系,然后校准纠正姿态
  5. 重新非常平稳的测试,可能测试时受力不是严格的沿着轴向,而是存在一定倾斜角度

18.40-8.30

飞机下午拿下去上课了,所以下午没有测试。于是晚上重新测试了新的rosbag数据。(昨天更换了桨之后z轴好像发生了变化,所以重新测试一下偏置的情况)

1.在x轴负半轴加2N的拉力,基本比较稳定在2N附近;2.在y轴负半轴加2N的拉力,这个情况下弹簧秤显示只有1.5N左右的力,飞机被我拉飞走了,应该是某个时候力气太大破坏平衡了;3.同理,但这次没有被拉走,但没有到2N,大概只有1.7N-2.0N的样子(我也记不清了);4.z轴放一个3N的砝码,比较稳定,可以拿来测试偏置的情况

第一个思路:

根据hover的force,matlab尝试了几组参数,前后的变化幅度基本都不大:

        // offset if force
        Eigen::Vector3d force_mean(-0.0976, -0.4005, 1.0474);
        Eigen::Vector3d force_covariance(0.0859, 0.0947, 0.2483); //scale the variance

直接加上去之后,z轴的数据比较稳定:

 y轴数据再-2N左右:

x轴:多了整整1N的力出来,而且我设置的x偏置很小不到0.1

 可能这个方法有点问题。还是换一条路吧。

 12.8

9.20-9.34

简单整理了一下最近的网络资料,弄了一点。

9.40-11.15

一直在用matlab分析数据,数据的正态分布,写到word里面,和老师讨论偏差一直存在的原因。

11.5-12.40

一直在排队,审核电瓶车,还排到一半不排了。太慢了,一个小时就处理了个位数。

14.20-15.20

把mocap的使用经验重新整理了更详细的版本,内容在上面。

15.30-16.20

还是去把电瓶车车牌审核什么的给办了。

16.20-17.10

对于偏置一直存在的情况,尝试用第四种解决思路,但是经过修改之后没有那么复杂:

原来的思路是:飞行在天上q_W_real一个姿态 ;静止在地上q_W_stable一个姿态。严格意义上来讲q_W_stable应该是0 0 0 1,但是因为摆放的误差,所以实际是类似:0.001 -0.032 0.012 0.9997

所以要给他补偿到0001。

q_{real}^{stable}=q_{real}^{W}*q_{stable}^{W}.inverse()

也就是说看看效果:直接在姿态左乘一个矩阵,让结果能够等于0 0 0 1.所以逆矩阵就是所求。

 不校准R之前:

force的偏置:x小于-0.1,y从-0.02—-0.5,z从0.6-1.0

世界加速度的偏置:x大震荡,-0.0几—0.5,y从0.0几——-0.5,z正负0.4

 R校准:

 只能说略有改善...还是存在一个稳定的偏差。
我怀疑是加速度计的问题,因为加速度计它就不是我理论上的0 0 g

静止在地面上时,xy误差可以接收,但是y轴的还是很大。

 

 hover时它的值是:

这充分说明一点,IMU拿的源是数据在PX4里面就没有做好去噪和补偿,可能是QGC参数没搞好:HIGHRES_IMU.hpp

这里bias我觉得不太对

并且hover时IMU不稳且偏差大,我严重怀疑是振动的问题,要不就减震,要不就直接补偿offset

18.15-19.00

写日志,整理一下新的内容“PX4飞控内容”和其他的内容更新。

19.00-21.30

进入到Moblie SDK的开发,在windows上装了Java,Andorid 开发器,装了一晚上,跑通了第一个hello world。

有个bug,不知道是不是华为的原因。进入开发者模式后,我点击允许USB调试,但是android开发界面找不到华为手机。一直在解决这个问题。

不知道点了哪里,在手机上再次点击允许USB调试后出现了一个提示框里面是一串密码,之后就可以了。

12.9

9.20-10.00

完善了一下日志,换了几种补偿的方式,发现还是不行,有空再试其他的。

10.00-11.10

昨天晚上只跑了Hello World的Android的第一个案例。但是今天想要把大疆的moblie的SDK跑通,各种环境和版本的什么grabal包不匹配问题。又因为看不懂,debug都没发de。

14.00-16.00

终于还是debug出来了,我都不知道各种改才改出来,很迷,有空再看什么问题。

16.00-20.00

周报+出去聚餐

20.00-21.40

研究下java的Android的开发了,正好还有聪哥之前写的APP,研究一下结构和写法语句。

打算转Android的虚拟机环境,我的手机内存不够了,一直失败不知道为什么。

12.10

上午+中午:

一直在装Android虚拟机环境,主要的参考:官网甚至没有csdn靠谱

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed._wendy_ya的博客-CSDN博客_android emulator hypervisor driver for amd process

为 Android 模拟器配置硬件加速  |  Android 开发者  |  Android Developers

Android里面的SDK一直无法安装,最后总算成功了。我觉得应该是我文件夹名字的问题

 之前不知道为什么后面有个-2,去掉之后就正常了。

 什么重启,关闭虚拟化,重命名之后,才出现STATE 4才算正常

 因为不安装Android 虚拟环境,无法在虚拟手机上下载程序,会一直报错。

14.20-15.20

研究代码结构,和我要实现的功能要怎么搞。

我的需求是:Onboard SDK需要拿到数据,用Moblie SDK发送到遥控器(Android系统)上。

 15.30-16.00

帮助共轴开mocap,调试飞机。

16.10

TODO 数据的计算和流向

但问题就是,中间的计算过程我是在Onboard中(用ROS)拿数据又实现计算,传送结果到Moblie中就行。还是Onboard中只拿数据,数据发送到Moblie中计算,然后显示?

 先学学看怎么简单可靠怎么来。

12.12 周一

一直在看b站学AS开发Android 同时看DJI的开发文档。

.2自学Android开发笔记和DJI moblie SDK1

12.13 周二

一直在看b站学AS开发Android 同时看DJI的开发文档。

同样见上面那个文档。

初步的研究了一下DJI的msdk的内容。

12.14

有两个版本的SDK,一个是V5也有sample code,一个是sample code。研究sampe code的结构,太复杂了,也没有很深入的java经验,看了一天整理了两张a4纸,太慢了。照这个进度明年都分析不完。(主要是教程的版本太落后了,不想看,但是后来没办法,还是只能看,一边修改)

官网上的教程就是nt,很多地方又不详细,还有版本更新之后错误的地方,一直在修。

比如官网给出的案例:build  gradle中的dependencies

 单纯这么写一是版本更新之后,这两个用法舍弃 ,编译会报错(网上说不会 也是nt)

最后发现直接改成他sample code里面的就行。

dependencies {

    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    //noinspection GradleCompatible
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    // 高版本AS已更换关键字compile为implementation,privided关键字也已经过时了,不进行替换编译时会发出警告,会影响程序使用
    //compileOnly ('com.dji:dji-sdk:4.12')
    //implementation('com.dji:dji-sdk-provided:4.12')
    // 官方的sample用到这个
    implementation 'androidx.multidex:multidex:2.0.0'
    implementation 'com.squareup:otto:1.3.8'
    implementation('com.dji:dji-sdk:4.16.4', {
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        exclude module: 'library-anti-distortion'
        //exclude module: 'fly-safe-database'
    })
    implementation 'com.google.android.material:material:1.4.0'
    compileOnly 'com.dji:dji-sdk-provided:4.16.4'

    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.core:core:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-rc01'
    implementation 'androidx.annotation:annotation:1.0.0'
    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
    implementation "androidx.core:core-ktx:1.6.0"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0-rc01"
    //implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9"
    implementation 'com.google.android.gms:play-services:11.8.0'

    implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-process:2.3.1'
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"

    implementation 'com.google.guava:guava:29.0-android'
    implementation 'org.apache.commons:commons-math3:3.6.1'

    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
}

最后成功导入dji的SDK,没成功之前一直都是红色的

12.15

从上午到下午三点,跟着dji官方的老版本的demo进行,最后发现无法编译通过??但是代码中全都没有红色的报错,编译就这样:

第一个问题:发现他的gradle properties不对,有个报错,所以我直接把sample code里面的gradle properties  cv过来

android.useAndroidX=true
android.enableJetifier=true
android.injected.testOnly=false
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true

然后会有新的问题,错猜想可能是版本的问题。官方教程很老了,没有更新过,所以版本以及不行了。而我用的是新版本的,他就出现了版本问题,报错:

 发现问题然后尝试修改:那个版本改成21(后来改成了23还是闪退)

其他地方因为版本发生变化,库也发生了变化,所以那你报错修改哪里就行:

 闪退,安装一般就闪退无法打开。然后看了下sample code的,这里似乎有一个FFmpeg 防止版本高的闪退,加上去:

 加上之后还是不对。

还在sample code中cv了很多东西过来,一直debug。

16.20 终于好了

去github上下载了dji编好的版本,本来想直接用这个的,但是回去发现了自己的问题在哪。运行成功。(虚拟机还是不行,手机上可以)

注释留下来,到时候总结。

在activity main.xml里面  修改 把xml文件的头改成这个类型

需要使用这个layout才行
</androidx.constraintlayout.widget.ConstraintLayout>

它默认的那个什么东西有问题
换成这个才可以

16.30-17.10

 看了下一个文档,这个文档只管大概介绍下怎么使用,不管接下来的。下一个文档直接上sample code的解释。

我在12.26的日志里记录了直接下载dji官方写好的importsdk,可以看看,但是还是有问题。

晚上:

拿dji的mavic3  御3搞了一下,不知道为什么,一晚上都没连上手机的sapmle code。麻了,看看教程吧。

12.16

下午三点才开搞:上午团建去了

发现昨天辛苦写的笔记没保存...我裂开了,写入好多,一下回到解放前。心态有点炸,只能重新写了。

12.17

继续学习,分析djiV4版本的msdk的源代码。一边学一边看。

下午周报,晚上玩。

12.19

上午:整理笔记

下午-15。50

尝试分析报错在哪:

界面是这样的:我按Register APP for LDM是左边的;按蓝牙是中间,按Register APP是右边的

蓝牙和其他两个还不在一起。应该是哟独立的页面

  按照代码的指示,第一个LDM那个,代码是

 那串字符串就是:

后面的getDescription用log看:

第三个是:

蓝牙是:

解决:12.26

大意了,原来是key不对...12.26去dji开发者看到了这个app的key才发现,我那个package name写错了,改正之后,注册成功。Bluetooth也打开正确。但是LDM依旧注册失败。

12.20

不管了直接进入到V5的移植。V5和V4完全不兼容,而且V5还需要uxsdk,麻了。

直到下午16.40才解决的问题:我直接打开samplecodeV5的工程文件会一直找不到路径,每个地方全部报错。一直在解决没用。直到看到这个

 大疆SDK-初识MSDK V5_merryV的博客-CSDN博客_大疆sdk

然后我发现原来需要打开下面的子文件作为导入,要打开蓝色背景条的那个子文件

然后就没有问题了。太坑了。

12.23&12.4

梳理V5的结构

ProcessOn思维导图、流程图-思维导图模板_思维导图软件免费下载_在线作图协作工具

以及开始研究uxsdk。因为我发现module common中没有测试工具左边的显示栏的布局文件,所以我猜想多半是在uxsdk中。

并且我发现:拥有这种从uxsdk导入的插件的头,全都没法加载:(虚拟摇杆的界面)

经验:AS无法显示布局界面预览图

碰到一个问题(其实一直都有):用as打开项目后,无法看到有一些xml的布局,和所有ux SDK的布局都无法看到:

但是有的能看到:

找了一圈说是style.xml的问题,去看uxsdk的xml,有两个小报错

debug网上的方法都没用。

方法1:改成这样(在styles.xml的229行),改下APPTheme的parent看看。还是没用

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

方法二:看到报错描述

Resource named '`AppTheme`' does not start with the 
project's resource prefix '`uxsdk_`'; rename to '`UxsdkAppTheme`' ?

看到build.gradle里面

 加上看看效果

没用。

是不是因为界面太复杂了,所以显示不出来?每次就是短暂的出现一下就消失,我怀疑是哪的问题。就default_layout那个打不开,其他的小组件到时可以看到。那不管这个问题了。重点研究为什么msdk中两个灰色没法点的为什么。

我发现不管是uxsdk里面还是common或者aircraft里面,只有是布局文件带了从ux里面导入的布局的全都无法打开:如下图。

 所以我猜测,可能是因为没有成功导入uxsdk的包。检查一下:

版本问题:更新一下版本不知道好不好。还是没用

依赖导入:

 这个只是引入uxsdk

 common没有导入

 uxsdk也没有,不知道是不是不需要还是什么

 加上之后,还是没用。算了不管了,但是他能短暂的出现一下:

补充:dji android sdk开发(uxSDK开发文档)

uxsdk教程

大疆文档(1)-介绍-概念_世外大帝的博客-CSDN博客_大疆 extendeddata 属性

研究一下为什么这两个键没法点开。 我的遥控器打开没有任何的toast弹窗,默认演示页面和控件列表也是灰色的没法点亮。

官网的长这样:

我的遥控器打开没有任何的toast弹窗,默认演示页面和控件列表也是灰色的没法点亮。

代码中,应该是这个地方没有成功执行回调函数(因为我开遥控器,发现遥控器里面没有出现任何的消息提示)

12.26 周一

有点混乱了,打算重新整理一下目前的任务。弄一上午都是感觉无用功

msdk开发任务梳理:

需求目标:

1 用msdkV5版本在M300RTK(不支持V4)的遥控器上进行开发。官网教程写的和答辩一样

2 V5版本涉及到一些全新的东西:java+kotlin;单元模块化;ux sdk的使用。都得学

3 最后代码呈现出的效果应该是在这里吗?所以我需要搞明白这个东西到底是个怎么写出来的界面代码,然后把我的代码逻辑执行到里面去。加一个我的“风速估计栏”,然后点进去之后的界面点一个按钮直接可以弹出三轴的风速。

4 因为又是横屏,所以单纯的线性布局我感觉会乱(调试好了其实也不会),要不就约束布局画页面,要不就线性布局调整参数适应横屏。

问题:

1.目前没有开飞机,只启动了遥控器,显示这样 :

没办法打开默认演示(也就是ux sdk的页面)和控件列表;以及显示未注册(我已经登录dji的账号了的)

猜想:可能是没有连接飞机的原因,开启飞机连接上遥控器再试一试

2. 风速估计的执行:线程?

因为无法显示uxsdk的页面,我也不知道页面应该怎么写,逻辑应该怎么搭建。完不成需求3。所以要是能行,我需要在需求3里面的页面,加入一个我的风速估计栏。然后点进去这个栏后,大概是个这样的。

我是不是需要把这个程序按照dji  msdk开发的逻辑,加入到它的线程中,然后什么调配。还是根本就不管,直接点个按钮就开始计算?

3. 代码中需要使用到一些飞控底层的量:

需要问dji的工程师,imu拿到的数据是不是校正之后的,还是校正之前,需要注意。

可不可以通过解算的方式,把imu变成世界系下的加速度?准不准确?

4. 代码结构混乱

官网写的太垃圾了。目前大的版本有的是:V4( DJI Mobile SDK V4)和V5(Mobile SDK V5

小的分开的东西有:官网给的V5的初始入门教程(com.android.application);uxsdk的演示demo(大疆UX SDK);应用程序激活和飞机绑定(大疆msdk应用程序激活和飞机绑定);V4的入门教程演示代码

最终的目的还是需要在V5上的那个程序中实现的。一个个实现看一下。

ux sdk的demo:什么都没用,并且没法点击

sdk导入(见12.15的日志,就是这个,我没有注册它的dji的key所以这里报错)

 应用程序激活和飞机绑定:

开始直接问我要了结果权限,然后就这样:和上面的那个不一样。

5. uxsdk的界面无法显示

但是他能快速的闪动一下,然后又黑掉。

我猜测应该不是uxsdk的问题。因为我在V4里面,也是同样的,就像这个:

猜测:造成这个的原因应该是布局文件xml中的头:不是常规的什么线性,约束。而是采用了java逻辑的方式,不是oncreate而是什么extends 布局,类似父布局,子布局什么的。

java:

12.27

上午:

修改估计代码的页面布局,改成约束的以适应横屏

 任务:按照dji msdk开发笔记程序梳理的第二个,我直接把这个页面加载在这个里面去。放入到

AircraftFragmentPageInfoFactory().createPageInfo()这个里面,然后被加载。

也就是说:

任务目标拆分:

1. 首先加在这个里面需要有个fragment类型的页面,把我的约束布局的逻辑改成fragment?还是fragment拥有自己的属性,他的实现还是约束布局,但是封装成一个fragment?TODO

 2. 按照这个添加string  page那堆属性

3. 按照nav页面的fragment,我需要添加name一个实现逻辑;layout一个页面布局;

4.然后考虑适配的问题,起码先保证能运行起来,后面再考虑会不会崩,是否需要加入线程考虑并发问题。

12.28

上午:

循环执行任务,涉及到线程handler

几个网站参考

 下午:完善代码 仿照其他几个fragment和什么VM文件实现主要逻辑

就完成了变量名的替代,还没有实现业务(估计)的逻辑

晚上:

太坑爹了,文件我加上去之后一直显示找不到,一直debug。直到八点,我重启了一下编辑器,然后就显示找的到了。浪费居多时间。我还以为是程序的问题,结果是玄学的编辑器。

20.15-晚上

弄好了框架,接下来就是风速估计的逻辑实现。目前会闪退,然后回到主界面activity上。应该是逻辑没有修复好,只要是能够正常的展示出来我的那个界面就算。

明天的任务:

成功debug修复好逻辑,打开风速估计能够不闪退。(参考其他的实现)

等dji工程师回复:精修逻辑的实现,从API拿到数据什么的

12.29

上午:

dji工程师没有回复,按照昨天回复我的,目前只有融合了xyz三轴的速度和欧拉角,没有我想要的数据。

中午回复了:

按照她说的看一下:

可以的2000多行

这是开放的API文档,是经过测试的,key里面有,文档里面没有的那就是未经测试的。

和老师商量了下,把中短期任务改一下:

中短期任务:

方案一:osdk全部计算完,把结果发给msdk,遥控器只显示结果

方案二:osdk处拿数据,在msdk计算并显示,等msdk可以直接拿到数据,直接去掉osdk的电脑,就是我们原来套路的形态

原则是能拿就拿,把接口预留出来,我想想把方案一和方案二能不能处理到一起,可以切换数据来源。如果处理不了我就整两个页面,需要哪个再更新就行

数据更新频率可以指定:msdk从服务器拉取数据有200多kb,然后向服务器发送不到10kb每秒。

看看有没有API可以指定通信速率的。因为要比较快的速度。

按照官网的数据通信带宽 传输速度:

补充:通道带宽 传输速率

  • 可靠传输
    • MSDK 上行(向服务器端发送数据)为3KB/S;下行(从服务器端接收数据)为250KB/S
    • OSDK 与PSDK 间的数据传输速率为500KB/S
    • 开发者可以通过SDK获得丰富的传感器数据。GPS位置,指南针,气压计,飞行速度和海拔高度都是通过Mobile SDK获取的一些传感器数据,频率最高可达10 Hz。

本文所指

  • 客户端:根据指定的通道ID,发起通道连接的一端,如基于MSDK 开发的移动端APP。
  • 服务器端:根据用户的实际需求,创建通道并指定通道类型和通道ID 的一端,如基于OSDK 开发的应用程序。

下午:

改进逻辑 测试页面布局效果:不断修改:

 按停止获取按钮

 调试的逻辑+界面大概设计好:

 (应该学学单元测试的,不然每次修改个逻辑就得全部重新编译下载,怪麻烦的)

 到晚上十点:分析key,manager等的用法。很迷惑,需要研究一下,这个类的定义在哪,为什么一个空的定义莫名其妙就能返回一个值。肯定是在哪重写了。

V5的API接口说明文档:

DJI Mobile SDK Documentation

12.30

处理私事 一上午

中午:搜寻co_j文件里面的2000多行的key,看哪个能用:

没有找到加速度的信息,但是可以间接的得到数据:V5的API中可以拿到的

DJI Mobile SDK Documentation

姿态可以拿到;通过位置和速度是不是可以卡尔曼滤波或者建模的方式拿到加速度。但是电机转速没有找到,只有控制电机启动锁住,ESC滴滴叫的功能。

 所以要拿到motor转速的东西,还是需要osdk才行。

源文件中:涉及到motor的在API文档中没有写出来,应该是还没有测试,那就只有我来测试,看看能不能拿到对应数据。类似这样 keymotorescmstate这种key。

1.1-1.4

开题

1.5

14.00-

研究co_j文件下面的那些key。

如何使用key以及在哪使用

写笔记:mavros转换框图、mavros转换流程图、坐标变换公式

mavros转换框图、mavros转换流程图、坐标变换公式

飞控底层原理分析(北航+PX4 旋翼模型)飞控模型 飞控数学建模 数学模型:看这个

飞控底层原理分析(北航+PX4 旋翼模型):飞控模型:

2.4

找回年前的任务进度,回顾之前的任务。

终于高明白了MSDK V5开发上的一些问题,整理了2个A4纸的内容,搞清楚了MSDK中DJIKey,DJIManager和DJIValue那些东西的关系和用法。

但是windows电脑寄回去修了,等修好之后寄过来再开始直接写MOP的内容。

TODO:MOP互联互通内容写法

MOP部分的内容还需要进一步研究。因为DJI 的官方文档也没有把V5的MOP做好,写的非常细碎,所以还需要自己研究V5如何互联互通。

2.6 周一

上午:完善V5的风俗估计代码,写了一部分。中午11点反应过来还没有把电脑寄出,寄电脑去了。

下午:换了三个NUC,一个NUC装中文输入法装出错了,开机就死机,太迷了。

一个是只有windows系统。

第三台就是这台”NUC11 NUC#4“。

开始安装dji osdk的东西:(安装osdk)(onboard sdk)(dji osdk官网)

DJI Developer

晚上的进度:

按照官网的说明,这几步做完

 这没有问题

 

目前:

但是有问题的是:

 dmesg那里我没有找到任何acm的东西;ffmpeg安装显示如下:

我源码下载了ffmpeg,还没有进行下一步的安装。

opencv是4版本的不是3.x,不知道能不能行:

 然后就是准备运行demo:

创建运行程序没有问题:

然后

但是我的版本是4.0,一川的版本是4.1。

TODO:明天来checkout一下,或者重新下载4.1版本的。

暂时先这样,明天在来抄川老师的设置,按照他的来

 下面这一步估计是要连接线,连接飞机,所以我没有稿这一步骤 TODO

 就做到了这里,而且随着明天切换osdk版本为4.1,这个build需要重新整一下

2.7

上午:发现剩下的那台电脑全是bug,巨多问题,所以还是把n10老伙计拿过来用了。安装输入法以及一些需要的依赖,各种问题,一直到下午五点才搞好。

安装opencv 3.4.5 这个版本比较稳定:这个博主的靠谱

Ubuntu安装OpenCV3.4.5(两种方法&&图文详解)_ubuntu 安装opencv_振华OPPO的博客-CSDN博客

Ubuntu安装中文输入法:

网上的教程全是错的,没有一个成功的。最终成功的方法:

1. 更换我的下载源:

Linux更新源 source.list 自定义第三方源_r135792uuuu的博客-CSDN博客

换成之后update和upgrade一下,upgrade没成功也无所谓,有一个成功就行。

2. 下载搜狗官方的才行,ibus系列的输入法我每一个成功

搜狗输入法linux-首页

Ubuntu的下载包是x86_64的,下载之后按照官方教程进行安装(果然还是官方管用,注意看指导的Ubuntu系统版本,我的是20.04从一半的位置开始的)

搜狗输入法linux-安装指导

3.最后这一步,官方也没有做好,需要把搜狗移动到最前面:不然没有效果

 五点:继续安装dji osdk。按照官方的环境配置(大疆dji官方 osdk环境配置)

DJI Developer

吃饭前安装完。

晚上:

运行官方案例1和2。都需要连接飞机(再小一点是飞控)才能正常运行,不然就是只能make编译

1是linux代码,直接在linux里面直接运行bin文件:linux代码再Onboard-SDK文件里面

./djiosdk-flightcontrol-sample UserConfig.txt UserConfig.txt

2是ros代码,运行ros。ROS代码在Onboard-SDK-ROS文件里面。 这个vehicle node是4.0以上的,另外那个sdk node是3.9.

M300只适用4.1版本。

roslaunch dji_osdk_ros dji_vehicle_node.launch

DJI OSDK结构和命令:

 dji onboard sdk:

编译:cd 到build文件夹里面camke ..然后make

运行:收到

dji onboard SDK ros:

编译:回到dji_osdk_ws工作文件夹下catkin_make(osdk编译命令 编译指令)

运行:

晚上:为了后续要是更换电脑太麻烦了,直接写了一个一键完成安装的脚本。

# DJI initialize settings
sudo usermod -a -G dialout $USER;
sudo echo "SUBSYSTEM=="usb", ATTRS{idVendor}=="2ca3", MODE="0666"" > /etc/udev/rules.d/DJIDevice.rules;
# need to restart make it avaliable

# install dependencies
sudo apt install libsdl2-dev;
sudo apt install ros-noetic-nmea-comms
sudo apt-get install libavcodec-dev libswresample-dev
sudo apt install ros-melodic-nmea-comms
sudo apt install libavcodec-dev libswresample-dev
sudo apt install ffmpeg
sudo apt install libusb-1.0-0-dev
sudo apt install libusb-dev
sudo apt install libsdl2-dev
sudo apt-get install unzip
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev  libtiff5-dev libopenexr-dev libtbb-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libgtk-3-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev pkg-config


# install opencv 
mkdir /home/$USER/opencv;
cd /home/$USER/opencv;
wget -d https://github.com/opencv/opencv/archive/3.4.5.zip
unzip 3.4.5.zip
cd /home/$USER/opencv/opencv-3.4.5;
mkdir build
cd /home/$USER/opencv/opencv-3.4.5/build;
cmake ..
sudo make -j4
sudo make install
# opencv enviroment settings
sudo echo "include /usr/local/lib" >> /etc/ld.so.conf
sudo ldconfig
# !!! you need to delete the space between "$" and "PKG_CONFIG_PATH", save it then moves on!!!
sudo echo "PKG_CONFIG_PATH=$ PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" >> /etc/bash.bashrc
sudo echo "export PKG_CONFIG_PATH" >> /etc/bash.bashrc
source /etc/bash.bashrc
pkg-config opencv --modversion


# download dji OSDK from github
cd /home/$USER;
mkdir -p dji_osdk_ws/src;
catkin_init_workspace;
cd /home/$USER/dji_osdk_ws/src;
git clone -b 4.1.0 https://github.com/dji-sdk/Onboard-SDK.git;
sleep 10;
cd /home/$USER/dji_osdk_ws/src/Onboard-SDK
mkdir build
cd /home/$USER/dji_osdk_ws/src/Onboard-SDK/build
cmake .. -DADVANCED_SENSING=ON
sudo make -j7 install
sleep 10;
cp /home/$USER/dji_osdk_ws/src/Onboard-SDK/sample/platform/linux/common/UserConfig.txt /home/$USER/dji_osdk_ws/src/build/bin
# run the command to check out the program insallition:
#cd /home/$USER/dji_osdk_ws/src/build/bin
#./djiosdk-flightcontrol-sample UserConfig.txt UserConfig.txt

# download dji OSDK ROS from github
cd /home/$USER/dji_osdk_ws/src;
git clone -b 4.1.0 https://github.com/dji-sdk/Onboard-SDK-ROS.git;
sleep 10;
cd /home/$USER/dji_osdk_ws
catkin_make
source devel/setup.bash

2.8

上午:看到一个新的配置osdk的博客, 实际检验之后是错的,还是跟着官方来。

下午:开始写msdk的代码。经过了msdk流程的复盘,终于知道它在干嘛了。所以趁着手感写一下。笔记后面整理再发。

在这里报错了,明天问一问群里的人看看是不是这个用法。

2.9

没有问人,花了一天时间自己终于搞懂这些咋用。有bug再问。

把笔记整理一下发上来。主要是getValue和listen的用法。

2.10

上午:把笔记整理成电子版的发上来

DJI MSDK V5 开发流程,指南(Kotlin)、关键函数、类的写法流程、msdk教程

https://blog.csdn.net/weixin_45754151/article/details/128982765?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128982765%22%2C%22source%22%3A%22weixin_45754151%22%7D

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值