# 李肖飏-第一次周报
李肖飏项目进展周报表
周报日期:2022.7.1-2022.7.8
本周预定完成内容:
1. 在电脑中装入Ubuntu18.04系统。
2. 按照语雀使用文档完成日后项目开发所需要的相应配置(Ubuntu、ROS、Gazebo等)
3. 对安装好的环境进行测试,查看无人机是否可以起飞。
每日具体安排:
7.1周五:完成语雀使用文档的浏览,以规划工作安排。
7.2周六:为电脑加装Ubuntu18.04系统,并能够使用。
7.3周日:为电脑假装硬盘及内存条后使得双系统引导界面消失,无法启动Ubuntu系统。
7.4周一:通过百度等方式对此类问题进行查找,最终问题得到解决。
7.5周二:在Ubuntu系统下进行项目环境部分搭建(相关依赖安装,ROS安装)。
7.6周三:完成Gazebo安装、MAVROS安装。
7.7周四:完成PX4配置,环境搭建完成。
7.8周五:对搭建好的环境进行测试,测试结果为无人机可以起飞。
周报总结:
初次接触此类事务,对该领域十分陌生。在搭建环境时遇到了很多的问题,导致项目环境搭建工作迟迟无法顺利进行,通过不断的查看技术文档以及CSDN得到解决。遇到问题时不能着急,需要根据错误信息进行查找,最后通过检索解决问题。
问题:
1. 在环境搭建过程中由于不熟悉Linux,、ROS等相关知识,走了很多弯路。
2. 关于搭建环境中所使用的代码,并不了解,后续应当如何跟进?
3. 此项目中需要具备的理论知识等。以及后续安排。
# 李肖飏-第二次周报
李肖飏项目进展周报表
周报日期:2022.7.11-2022.7. 15
本周预定完成内容:
1. 了解无人机项目相关基础知识
2. 利用ros实现px4板外控制
3. 了解旋转矩阵、变换矩阵理论。
每日具体安排:
7.11-7.13:完成了解无人机项目相关基础知识(ros、px4、gazebo、mavros、地面站)。
7.14:参考官方文档以及CSDN完成利用ros1实现px4板外控制(ros2实现困难,未完成)
7.15:完成了解旋转矩阵、变换矩阵理论
周报总结:
经过一周的基础知识学习,渐渐对该项目有了一个初步的了解,如ros是机器人系统,mavros是ros与地面站、px4通信的一种工具,px4是一种自动驾驶的软件,称为固件、gazebo是仿真软件,用来模拟无人机等。地面站类似于可以调试飞控和检测飞控的一个平台,可以将px4烧写到硬件上等。
对于旋转矩阵以及变换矩阵参考了b站上相关的教学视频,对于这两个概念有了一些了解,例如:简单来说,针对同一个点,两个原点一样,旋转角度不一样的坐标系,通过将点向量表示,通过转置等操作,可形成旋转矩阵,换句话说,旋转矩阵是针对原点不动,坐标转动的情况。而变换矩阵是坐标原点存在相应位移,坐标系发生转动的情况,将向量表示增加一维(1)从而形成了变换矩阵。做此工作的意义相当于,举例相当于是将传感器中对于某点的坐标可以转换到机器人主体的坐标
问题:
1. 当实现ros1的板下控制demo后,试着尝试ros2的但是官方文档过于精炼了,没能搞懂如何配置px4和ros2的环境,通过搜索csdn寻求帮助,但由于 ro2技术相对较新,未能在csdn搜索到解决办法,希望老师能提供些帮助。
2. 目前对无人机项目基础概念有了一定了解,但是只是停留在表面,对于很多概念还是不熟悉。如px4架构中控制器图中的公式等等,看不懂……
3. 通过两周的学习,发现自身还是有一点小进步的,希望自己后续能够一直跟进,与老师及师哥及时交流问题,不断学习相关知识挺过现阶段难关。
# 李肖飏-第三次周报
李肖飏项目进展周报表
周报日期:2022.7.18-2022.7.22
本周预定完成内容:
1. 跟学ros基础。
2. 继续试着跑语雀的demo
3. 了解A*算法。
每日具体安排:
7.18周一:跟学ros基础了解什么是ros。
7.19周二:跟学ros基础了解ros核心基本概念。
7.20周三:尝试建立自己的工作空间;跟语雀试demo出现bug,当天为解决。
7.21周四:通过尝试,解决了昨晚出现的问题;通过ros教学视频小乌龟节点跟学publisher实现。
7.22周五:对语雀复合翼demo进行试飞,可行,了解A*算法大致思路。
周报总结:
通过跟学ros基础 让我对ros中的一些一本概念有了些了解,通过b站教程发现仍需学习c++,后续应当将c++跟进。在跑语雀时出了问题导致一直报错,最后发现是由于自己修改了一个配置文件导致,以后应当注意避免此类事情的发生。最后 在b站找到A*算法的通俗讲解,跟着了解了该算法的原理。
问题:
1. 师哥们在该项目中使用的是哪个编译软件pycharm?c++呢?
2. 后续还得补c++等该项目中所要用到的基础知识。
3. 通过百度等方式寻找px4教程,发现很少而且不全。
# 李肖飏-第四次周报
李肖飏项目进展周报表
周报日期:2022.7.25-2022.7.29
本周预定完成内容:
1. 安装一个编译器
2. 继续跟学ros基础。
3. 继续试着跑语雀的demo
4. 了解人工势场法等常见路径规划经典算法。
每日具体安排:
7.25周一:由于在文本编辑器上编写程序繁琐,完成了clion安装,通过百度等方式进行破解,参考官方文档与ros进行连接,复习了前日所学的发布者publisher的实现。
1.ROS节点初始化ros::init(argc,argv,"velocity_publisher");
2.创建节点句柄ros::NodeHandle n;
3.创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10。
ros::Publisher pub=n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
4.设置循环的频率
ros::Rate loop_rate(10);
5.初始化geometry_msgs::Twist类型的消息
geometry_msgs::Twist vel_msg;
vel_msg.linear.x=0.5;
vel_msg.angular.z=0.2;
6.发布消息pub.publish(vel_msg);
7.按照循环频率延时loop_rate.sleep();
整个发布流程与核心代码在此呈现,具体作用是海龟放仿真器发送一条速度话题,是仿真器上的海归能够运动。
7.26周二:主要完成了订阅者subscriber的编程实现,与发布者大同小异,但是里面多了回调函数等概念。具体流程如下:
1.初始化ros节点 ros::init(argc, argv, "pose_subscriber");
2.创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
3.循环等待话题消息,接收到消息后进入回调函数ros::spin();
4.在回调函数中完成消息处理 如将接收到的消息打印出来
完成话题消息的定义和使用,主要是如何自己定义一个话题,并在相关文档中进行相应配置
如在package.xml中添加功能包依赖、CMakeLists.txt添加编译选项,最后通过catkin_make进行编译。创建一个发布者,创建一个订阅者,完后在CMakeLisrs.txt中配置编译规则,重新编译,发布者与订阅者代码与上述代码核心不变,不在此赘述。
7.27周三:跟着语雀跑了跑2d激光slam,可通过这个进行建图,并完成路径规划,但是与文档中演示有出入,可能是我操作问题,但是在此之前教程中的视觉slam依赖安装不上就没跑出来,应该是梯子的问题 ,最近问了问朋友,这周再试试
7.28周四:之前了解了ros的一种通讯方式topic,今天看了下另一种通讯方式,service方式,类似于我们所学过的C/S架构。其与话题最大的不同就是话题是单向传播的而服务是双向传播,跟着b站的视频也看了看教程。
与话题相仿,需要一个客户端,需要一个服务器端,客户端的实现主要是以下四点:
1.初始化ros节点
2.创建一个client实例
3.发布请求数据
4.等待servicer处理之后的应答结果
而服务器端主要是三点:
1.初始化ros节点
2.创建sever实例
3.循环等待服务请求,进入回调函数
7.29周五:对于周四所学进行复习,对路径规划经典算法进行了解
周报总结:
通过对ros基础的学习让我更加了解了ros中的通讯机制,但是编写代码中还是有遗忘,需要下来在仔细的复习。这周安了clion编译器,因为之前一直用pycharm所以选了同一公司的使得编写代码更加的方便了,但是我发现用clion编写python文件时无法导入自定义库,百度了很久也未能解决,通过终端进行运行正常。其次外网的访问也很是一很大问题,需要下来研究下搭一个梯子,还有后续的方向问题希望能更加明确。
# 李肖飏-第五次周报
李肖飏项目进展周报表
周报日期:2022.8.1-2022.8.5
本周预定完成内容:
1. 完成语雀视觉SLAM仿真
2. 完成语雀3D激光SLAM仿真
3. 继续跟学ros基础。
4. 了解蚁群算法等常见路径规划经典算法。
每日具体安排:
8.1周一:复习古月居上面通讯机制中topic的简单实现,包括发布者,订阅者,以及自定义话题的实现。另一个通讯机制服务的服务器端及客户端的实现。
1.自定义话题实现步骤:在package.xml中添加功能包依赖、CMakeLists.txt添加编译选项,最后通过catkin_make进行编译
2.实现一个发布者:初始化ros节点、初始化ros节点句柄、创建一个publisher等……
3.实现一个订阅者:大致代码流程与发布者类似,但其还包含一个回调函数
4.实现了一个客户端,用于向服务器端发送请求。
5.实现了一个服务器端,用于接收请求并作出其他回应。
代码逻辑来说都是大同小异,在函数层面上,个人觉得也就是函数调用的不同。
8.2周二:了解了蚁群算法的原理,实现一个自定义的服务show_person.
1.蚁群算法基本思想1.用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。2.路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也越来越多。3.最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。
2.定义srv文件->在package.xml中添加功能包依赖->CMakeLists.txt添加编译选项->最后通过catkin_make进行编译。其实整个大致过程和话题创建一样。完后就是创建一个客户端,创建一个服务器端,最后实现的效果就是,客户端请求person信息,服务器端接收后显示出来。
8.3周三:试着问朋友要了个梯子,github是可以看了,完后着手搞语雀上的视觉slam。
视觉slam搞出来了 但是有一个疑问点,在不加入位姿真值前,飞机靠视觉定位,一直请求home prositoion,加了之后反而好了,但是不知道为啥。完后试着搞3dslam,今天安装了许多依赖。
8.4周四:今天试着看能不能跑出来语雀3D激光slam但是启动ALOAM时出问题,
尝试了一天都不行,试了很多的方法始终不知道为啥。打算明天再试试。
8.5周五:想着是看能不能把昨天的问题解决吧,挺糟心的,顺便再跟着古月居过过基础
周报总结:
这周任务大致主要还是跟学基础,跑语雀,有了梯子感觉方便不少,但是不知道为啥自己电脑不能在终端用clone,每次都超时,百度了很久也没解决,还有就是安装依赖的时候坑太多了,版本各种问题都能导致程序跑不起来,明天我再试试看看能不能跑出来吧。
# 李肖飏-第六次周报
李肖飏项目进展周报表
周报日期:2022.8.8-2022.8.12
本周预定完成内容:
学习yolo算法相关原理
学习视觉slam算法相关原理
继续跟学ros基础
尝试接着把语雀跑跑
每日具体安排:
8.8周一:学习yolov1-yolov3的原理,包括数据结构,网络框架,损失函数设计。
1.本想从yolov5开始看起但是搜了很多的教程最好还是先从1慢慢看,所以打算这周先看看v1-v3。
2.yolov1:主要掌握了yolov1的简单原理,以及输入图片的格式,整个网络的框架,以及损失函数的计算。也了解了作为第一代yolo网络,它的不足之处:对群体小目标的检测效果很差(主要是由于v1论文中对于每个cell只预测两个bounding box,而且这两个bounding box预测的是同一类别,因为对每个cell只预测了一组classes),还有目标出现新的尺寸或者是配置的时候,预测的效果差,主要是因为定位问题,这个问题在以后版本中通过anchors回归进行解决。
3.yolov2:在1版本的基础上进行了七个尝试包括BN(batch normolization批标准化)、采用更高分辨率的分类器(指的是输入图像尺寸变大)、使用anchor目标边界框的一个预测(这个之前实在ssd目标检测算法中提到的,但是时间过得有点旧了就忘记了)、Dimension Clusters(使用聚类的方法提取anchor的宽高)、目标边界框预测的修改,目的是为了让每个anchor去负责目标中心落在某个cell区域的目标、将高层信息与底层信息进行融合(底层信息包含更多的图像细节(小目标需要))、多尺度的训练,采用不同尺寸的图片训练网络增强图像的鲁棒性。简单学习了v2的整个网络框架。
4.yolov3:相较于v2首先是修改了backbone 采用darknet-53(v2用的是darknet-19),在其中还加入了一些残差网络,他的预测box在三个特征图上进行预测,每一图预测三个尺度,这样就得到了九个,获得方法使用的是k-means聚类算法得到的,还学习了如何将网络预测的回归参数转化为最终的目标边界框信息,主要是通过四个函数
b_x=σ(t_x )+c_x
b_y=σ(t_y )+c_y
b_w=p_w ⅇ^(t_W )
b_h=P_h ⅇ^(t_h )
后面还看了看v3中所提到的的一些小点。
8.9周二:主要复习了一下之前学习的ros两大通讯机制的编程实现,topic中的publisher和subscriber和service中的clinet 和server。具体的编程流程在前几次的周报种中都详细写过了,就不在这里赘述了。
8.10周三:主要是把古月居ros入门21讲的最后几科看完了,主要包括ros中参数的使用和与编程方法、ros中的坐标系管理系统(tf)、tf坐标系广播与监听的编程实现、launch启动文件的使用方法,以及常见ros可视化工具的介绍,如rvize、gazebo等
1.首先在ros master中会定义很多的参数,类似于字典,存储在全局中,我们可在终端通过rosparameter list进行查看,通过get set方法进行查看或者是更改。也可通过编写可执行文件对其进行更改,具体方式主要是初始化ros节点、get函数获取参数、set函数设置参数。
2.Tf是ros中的坐标系管理系统,是为了某位姿两个坐标系进行变换的。如某一传感器的坐标相对于全局坐标系的关系是怎样的,相机所看到的图片的位置相对与无人机中心坐标系的位置是哪里,机器人中心坐标系相对于全局坐标系的位置在哪里。及tf坐标变换如何实现——通过广播监听机制。
3.launch文件的使用方法 相当于是将很多的node节点放在一个文件中一起启动,避免开启多个终端进行rosrun各个节点,同时roslaunch 默认启动ros master 不需要像之前一样首先需要通过roscore去启动ros master。
8.11周四:试着跑了跑上周语雀留下的一些坑,但最后还是没试出来。。。。。。。。返回头看了看ros里面的参数编程和tf的广播,监听的编程实现。
8.5周五:看看视觉slam算法的东西,还有了解一下那个视觉里程计,再试试看能不能调出来语雀吧
周报总结:
这周任务偏理论知识,通过学习古月居ros入门21讲让我对这个ros机器人操作系统有了一些认识了,包括之前语雀中运行所使用的roslaunch文件是什么,也有了一定的认识,在编程方面,最好是下一个idea 我推荐使用clion 他和pycharm是一个公司的,这次会上可以和师弟们说一下这个,破解教程网上也有很多,唯一的缺点就是比起vscode会慢。算法方面看的有些慢了,yolo目前出到了7这周暂定只能先看到3了,关于视觉slam这里他也是一个很大的点,里面也是有很多细小的地方,我视频倒是找了一个,明天打算看看吧,如果有时间的话 我还想看看路径规划相关的东西 之前虽然看过A*,人工势场,蚁群,但是并不知道数据的类型,以及运作方式,相较于yolo视觉方面的东西,这个还需要我自己下来看看。
# 李肖飏-第七次周报
李肖飏项目进展周报表
周报日期:2022.8.15-2022.8.19
本周预定完成内容:
1. 继续学习yolo算法相关原理
2. 复习ros基础
3. 尝试接着把语雀跑跑
每日具体安排:
8.15-8.17 周一至周三:由于家中有一些事情所以这几天并不在家,手头没有电脑没来的及学。
8.18:今天回来了主要是复习了下古月居ros基础,包括之前所学习的通讯机制,以及后面的一些譬如rosmaster中参数字典,ros中tf的使用,以及launch文件的使用,完后看了看yolov4-yolox目标检测算法的基本原理和整体的架构。
看的过程中,我发现yolov4版本较v3版本改动较大,后面的v5以及x版本的整体架构都是基于4版本改的,其中yolov5并没有发表paper,所以这三个算法模型的讲解都是跟着b站一个up主的讲解跟进的,比如v4版本中特则提取的backbone是在v3基础上进行改进的加入了另一篇文章中的csp结构,还有通过使用spp解决多尺度的问题,以及pan结构将特征提取到的高层信息与底层信息进行融合,完后再将底层信息与高层信息进行融合,这段看的挺迷的,主要融合手段是将特征在通道方向进行拼接,v4版本中还介绍了改进的优化策略,主要是消除网格敏感度方面的,还介绍了数据增强所使用的方法等等,v5的话主要是采用新的csp-darknet53建构作为整个模型的特征提取,neck采用的是新型的sppf,以及新的csp-pan,head的话主要还是基于v3版本的head,还介绍了一些数据增强的方法等,还有一些训练的策略,针对三个预测特征层,计算损失采用不同的权重,在消除网格敏感度方面基本和v4版本差不多,但是在宽高上v5做了相应的改进等等,yolox的网络结构是在v5的基础上进行构建的,所以整体的网络结构与yolov5差不多,唯一同的就是在head这个部分,之前的head都是通过一个1x1的卷积核实现的,作者在文中提到这种是耦合的,对网络有害,文中采用的是一种解耦的检测头,能够加速收敛,提高分数,相当于就是将所预测的三类东西分开进行预测(类别、目标回归参数、目标)
8.5周五: 主要是打算跑跑语雀上的那些demo,再看看yolo前身的一些算法吧。
周报总结:
这周的偏理论学习让我对这个yolo相关的算法又了解了一些,明天再看看语雀吧,试着跑跑。s
# 李肖飏-第八次周报
李肖飏项目进展周报表
周报日期:2022.8.22-2022.8.25
本周预定完成内容:
1. 完成语雀多无人机精准降落demo
2. 学习ros基础
3. 学习yolov6算法
每日具体安排:
8.22 周一:尝试跑多无人机精准降落demo,但是发现缺模型,这个问题解决后,尝试在工作空间中对ros包进行编译但是一直编译失败,搞了好久迟迟没法解决。
8.23 周二:尝试各种方法无法解决,将已有的工作空间删除后,重新导入各种ros包,在编译过程中没有使用catkin_make,而是使用了catkin build,最后使得工作空间能够完成编译,事后想了想可能是由于catkin_make这个编译方法过于原始了,make方式会对整个空间下的所有ros包进行编译,该工作空间下的ros包多了以后,就会出一些bug。但是之前安装的集成开发软件clion好像依赖于cmake,搜了许多关于clion 与catkin build的东西并不知道如何转到catkin build,最后将安装好的clion删除,通过询问师弟,跟着网上的教程安装了vscode,对这个集成开发环境进行了熟悉,发现在使用过程中比原先的clion好用。
8.24周三: 解决完这个编译问题后,试着继续跑多无人机精准降落,工作空间通过编译后,仿真能够跑起来,但是实验效果与文档中视频差距太大,当时一直以为是哪块没有配置好,再进行多次尝试后,发现是降落的条件必须再汽车二维码的正上方,最后通过对飞机位置的调试,完成了三架无人机精准降落的demo,但是对于老师和我提到的融合,目前还是没法去看懂,包括上次开会师弟有提到其他人讲的ros基础,打算看看那个。
8.25周四: 今天主要是看了师弟推荐的ros基础课程,确实比古月居更适合入门,个人感觉古月居的入门视频过于精简了,很多细节没有autolabor官方处理的好,该教程也是用vscode进行讲解,对新手很友好,这个是该课程的教学文档http://www.autolabor.com.cn/book/ROSTutorials/
8.26周五: 打算看看yolov6的相关算法,继续往后跟进
周报总结:
这周进度也不是很快,主要是中间出了工作空间编译的bug,尝试询问语雀原作者,但也没能够解决这个问腿,最后将整个工作空间删掉,重新使用新的编译方式,重新安装的新的ide,试错就废了不少的时间,看了新的视频后发现古月居的视频还是过于潦草了,不过看过古月居的视频后再看这个会接受的更快,关于融合的问题还需要在掌握很多知识,一时半会儿还没有头绪。
# 李肖飏-第九次周报
李肖飏项目进展周报表
周报日期:2022.8.29-2022.9.1
本周预定完成内容:
1. 完成语雀多无人机精准降落代码逻辑梳理(进行中)
2. 学习ros基础
每日具体安排:
8.29-8.30 周一至周二:主要把剩下一些ros通讯方面得视频看了看。加深对于ros通讯中topic发布订阅以及服务的理解。
8.31 周三:按照老师所布置的任务开始看语雀多无人机精准降落中的代码,今天主要关注的是launch文件,刚开始看的时候里面很多标签都不懂,在主launch文件中也很少看到node标签的节点,于是去找了找关于launch文件的教程,了解了下里面一些标签的使用,完后通过对launch文件的阅读,大致理解了整个项目主要启动了一个带有tag的模型车,还有三家带有摄像头的无人机,但是整个launch文件中的参数以及参数文件众多,实在是看不过来,所以只是对整个仿真启动的launch文件有一个大致的了解,当天下午与师弟张浩进行了沟通,互相交流了一下对这个launch文件的看法,完后在启动launch文件后,通过rosnode list 命令去查看这个项目中的节点,但是在launch文件中找不到,可能是自己没找到。
9.1周四: 今天在询问了学伟师哥后,原来是因为整个home中同名文件有很多,自己找错了,所以没找到正确的节点路径,于是顺着正确的目录,找到了项目中的那些个节点,但是有一个问题就是比如/iris_0/mavros 这个节点 我倒是在node.launch文件中找到了node标签,但是在往下找的话就找不到这个关于mavros的东西了,可能是已经将这些个封装好了,这块还需要再去想想。今天与师弟进行了讨论,互相交流了一下关于这个项目的看法,师弟找到了csdn中对于xtdrone的键盘控制和无人机通信的源码讲解,我看了看关于apriltag的简单的知识,两个人互相交换了一下手头有的,完后统一了一下后续的工作,首先是需要吧无人机通讯以及键盘控制的脚本先搞清楚,后续还有一个关于apriltag的launch文件,还有多无人机精准降落的一个脚本,目前后续的主要任务是这四件事情,未来两天主要解决的是通讯以及键盘控制,但是整个项目的核心应该是后两个,还有与师弟交流过程中,因为这个项目使用的并不是手动坐标变换,而是使用ros中自带的tf来实现的,所以后续我们也得看了看tf的一些个教程。
9.2周五: 想法是按照周四与师弟商量的去进行摸索,其中若遇到问题,及时交流,实在不行就反应到群里或者询问老师或者是学伟师哥。
周报总结:
这次的任务量主要是代码的阅读,但是由于自己对于这方面的知识储备不够,看的很吃力,很多地方也是一知半解的,不过每天看一点终归是懂一些,再加上师弟老师师哥们,相信下周能够完成精准降落整个逻辑的梳理。
# 李肖飏-第十次周报
李肖飏项目进展周报表
周报日期:2022.9.5-2022.9.8
本周预定完成内容:
1. 完成多无人机精准降落demo的代码逻辑流程理解
每日具体安排:
9.5 周一:继续按照上次和师弟聊的安排进行工作,主要是将demo launch文件和无人机与gazebo仿真通讯脚本进行理解,返校准备相关东西。
9.6 周二:返校,按照学校安排进行返校,主要就是在忙学校的事情。
9.7周三: 针对语雀中对无人机进行控制的脚本进行理解,其主要是与无人机通讯脚本配合使用,键盘控制脚本发布无人机航点,通讯脚本接收到话题消息后,将其与仿真模拟器进行交互,使得gazebo中的无人机能够按照键盘控制脚本进行相应移动,完后看了看apriltag_ros功能包中的介绍,对于这个环境传感器有了一些了解。主要是订阅了相机的两个话题,通过该功能包封装好的算法实现对与tag位姿的获取,发布三个话题,两个是关于坐标系,二者有些细微差别,一个是相机话题但是会高亮显示tag。
9.8周四: 将之前了解到的东西和师弟进行交流,把整个demo的流程两个人串了下,明天打算将该流程用文字的方式展现出来,通过两人交流共同完成一份报告。
周报总结:
这周主要还是接着上周的任务搞了一下,大致和师弟明白了整个demo的过程以及其中涉及的相关点,但是还是有一些地方不能明白,希望开会的时候能够一起讨论一下。
# 李肖飏-第十一次周报
李小飏项目进展周报表
周报日期:2022.9.12-2022.9.15
本周预定完成内容:。
实现无人机跟随小车。
每日具体安排:
9.12周一:
通过通过tf树查看坐标系之间关系后,将不动的odom坐标在launch文件中通过添加静态坐标转换节点,实现了map坐标与odom坐标的绑定,通过tf就可以获得小车base_link与map下任一坐标的相对关系,但是由于跟踪函数是将距离差值作为速度发布,使得飞机速度太快,到达目标后不停摇摆,当天未能解决。
9.13周二:
下午与师弟们一起讨论了下无法悬停的原因,最后在不断地尝试下发现是速度太快所导致的,通过在代码中加入了最大速度的限制,无人机能够正确跟踪目标并在小车上方实现悬停。
9.14周三:
今天尝试另一种跟踪方式,给无人机发送小车的坐标,让无人机直接飞到目标点,跟是可以跟,但是遇到的问题与上一个角度尝试所遇到的问题一样,估计是由于只发送了点,飞机的姿态等控制出了问题没法能平稳。发送点跟随的无人机姿态问题还未解决。
9.15周四:
今天还是打算看看相关话题查找有关解决方式,打算开会的时候一起商量一下,但是好巧不巧的身体出现不适,感冒发烧,所以在宿舍休息
周报总结:
两种方式实现了其中一种,接下来需要研究下那个无人机控制相关的东西了
# 李肖飏-第十二次周报
李小飏项目进展周报表
周报日期:2022.9.19-2022.9.22
本周预定完成内容:。
Ekf选择gps时,完成无人机跟踪小车,降落
Ekf选择gps时,完成无人机跟踪小车,并使用apriltag实现降落
Apriltag功能了解,ekf简单了解。
每日具体安排:
9.12周一:
经过和师弟的讨论,将ekf选择gps作为数据源,小车能够实现跟踪,但是由于gps精度不高,有误差未能正确跟踪到小车正上方,后将gazebo发出的无人机位置信息直接订阅后该问题解决,之后打算尝试使用三架飞机一起跟踪。
9.13周二:
将昨日的跟踪代码进行修改,能够实现三架飞机跟踪小车,在不使用apriltag时,能够完成降落。现在打算将apriltag加进来,但是由于ekf选用gps使得无人机位置有偏差,三架飞机在apriltag上不能准确降落,与师弟开会商讨仍未解决,目前正在寻找解决办法
9.14周三:
今天突然想到由于精度问题,飞机的位置不能正确显示,那么每一架飞机同时估计三个tag那么必然会存在误差,在使用一架飞机降落的时候是可以完成降落的,所以就想到了,不让每架无人机估计所有的tag,而是分别对应,如iris0对应tag0,iris1对应tag1……,想到这里就试着改一下apriltag的配置,有了思路后打算明天对次想法进行实践
9.15周四:
按照昨天的想法,试着将apriltag的配置进行更改,最后完成了ekf选择gps下,使用apriltag完成三架飞机的降落,但是由于用的gps,精度有误差所以在rviz中飞机和tag的位置并不能正确反映。不过不影响三架无人机的正确降落。与师弟们讨论下各自组的进度,互相讲解了下各自项目的流程。由于目标检测demo中帧率太低的问题,安装了gpu驱动,cuda,最后更改相应配置后,yolo检测帧率明显提高。
9.16周五:
打算了解下apriltag中的算法以及ekf相关的东西。
周报总结:
这周实现了两种跟踪降落,但gps有误差,虽然不影响整个流程,但rviz中模型位置显示有偏差。下一步就看怎么能讲两个demo杂糅到一起。
# 李肖飏-第十三次周报
李小飏项目进展周报表
周报日期:2022.9.26-2022.9.29
本周预定完成内容:。
在目标检测与跟踪中找到相机坐标并和无人机进行绑定
每日具体安排:
9.26周一:
周末与师弟们进行商讨进行任务分工,一人负责一部分,我主要负责相机位姿和无人机位姿的绑定。具体思路是看看topic中谁在发送相机位姿,完后编写python脚本,通过使用tf功能完成绑定。将目前所修改的两个demo录像,记录进度。
9.27周二:
按照昨日思路,寻找到了相机位姿态是通过云台控制脚本中的一个发布者发送,完后尝试编写tf广播,但是突然又想到了在该项目中并没有自动发布无人机的tf,但是在降落demo中确实是有在发布,于是尝试去修改配置,看看是否能够将降落脚本中的配置改到这个demo中。通过修改一些配置代码,实现了tf的发布,完后尝试编写tf广播,将二者绑定。
9.28周三:
昨日基本上是实现了绑定,于是想试着看看这个无人机能否使用这个云台相机进行apriltag降落,但是每次运行脚本时都无法降落到二维码中,经过多次尝试后发现,是因为云台相机控制脚本中是写死了,俯仰角60度,尝试加大角度后发现不起作用,于是试着在这个无人机上将之前降落demo中的向下摄像头添加上,经尝试发现,使用这个向下的摄像头可以实现降落。但是为什么云台中的相机只能向下俯仰60度呢?
9.29周四:
看看关于ros建模中的一些配置教程,说不定能找到一些解决方案,今日主要是看看ros建模中的urdf文件,该教程中虽没有sdf配置文件的讲解但是感觉都差不多,最后在无人机sdf找到了相机俯仰角度的limit标签,通过修改参数,发现摄像头可以实现向下90度了。
周报总结:
这周实现了云台相机位姿到无人机位姿的绑定,但是关于无人机px4配置中默认不发布tf,我是直接拿了降落脚本中的进行了更改,暂时是没有发现bug。后续还打算再看看这个配置文件的教程打算再学习一些。
# 李肖飏-第十四次周报
周报日期:2022.10.3-2022.10.7
本周预定完成内容:
1.看tf原理
2.看加载模型相关教程
每日具体安排:
**10.3周一:**
今天打算去学习tf原理,本想顺着代码去看看坐标转换函数的具体代码实现,但是并未找到

与老师联系后,目前打算去读一下tf论文,该论文在维基百科中的ros tf下已经找到,打算看看。paper连接(http://wiki.ros.org/Papers/TePRA2013_Foote) 完后抽时间再去看看这个坐标转换函数的定义到底在那里,现在打算继续去看看加载模型的一些个教程。明日打算读读论文,代码暂时看不到,但是tf论文中一定有坐标转换原理。
**10.4周二:**
今天主要是读了下维基百科上提供的tf论文,这篇文章主要是介绍了tf运行原理及tf的数据结构,对于坐标转换细节并未给出,但大致流程通过阅读论文已明白其流程。
tf中包含两个模块,一个是广播器,一个是监听器。tf的数据结构是一课树。解决的是在请求的时间提供两个坐标系之间的转换。其论中主要思想就是这些:
1. 广播器
向整个系统传播转换信息
2. 监听器
接受转换信息并将其存储以供以后使用,这部分能够响应关于不同坐标之间的结果转换查询
3. 转换计算
为了计算任意两个节点之间的变换,计算生成集,然后根据该生成集计算网络变换。要计算源坐标徐和目标坐标系之间的生成集,监听器沿着树的边缘向上移动,直到找到一个共同的父节点,形成生成集。如果找不到公共父级,查找将失败并返回错误。如果查找成功,侦听器将计算沿生成集从源帧到目标帧的边的变换。当向上移动树中的某条边时,使用逆变换,而向下移动边时,则使用变换的值。
当计算两个frame(坐标)之间的变换时,a和c与b之间的变换是相对直接的,可以将变换链接在一起:
询问学伟师哥,师哥说代码应该是封装起来了,暂时还没想到怎么搞,打算还是再巩固下坐标转换的基础知识,今天还看了看关于建模的教程,虽然讲的主要是urdf,但基本内容通过学习这个教程,也能对飞机模型sdf进行简单阅读。
**10.5周三**
将b站上关于加载模型的一些教程看完了,讲的是urdf、xacro模型文件配置,如何将这些模型文件加载到gazobo仿真环境中,与gazebo中的sdf文件不太一样,但大致思路都是通着的,在网上搜了一些sdf与urdf的联系和区别,有做简单了解。还看了看欧拉角到四元数的转化,以及各自定义。
**10.6周四**
找了一些坐标变换的视频进行学习,之前遗留下来的bug——三驾飞机在outdoor1世界中无法正确加载的问题,经各种尝试,发现换一个world就可以正常显示了,但是具体原因还是不清楚。
**10。7**周五
打算继续看坐标相关的东西,加深理解。
**总结**
这周主要是偏理论学习,主要是欧拉角、四元数、tf、坐标变换、加载模型文件的学习,尝试着解决之前遗留下的bug,通过换world得到解决。
# 李肖飏-第十五次周报
周报日期:2022.10.10-2022.10.14
本周预定完成内容:
1.继续看tf原理,使用线性代数知识写一个坐标变换demo,用tf进行验证
2.阅读王老师给的那本电子书
每日具体安排:
**10.10周一:**
今天主要是看了下老师所给的书中第二章,关于坐标变换相关的知识,通过阅读,了解到了坐标变换是基于一个大坐标系下,通过坐标的位移加旋转,运用线性代数知识完成坐标的变换,旋转矩阵是针对于坐标三个轴转动(欧拉角)而考虑的,当然关于坐标的旋转还有很多种表示方式,如旋转向量,四元数,他们之前可相互转化。给旋转矩阵加上位移则在矩阵中添加一纬表示位移,称为变换矩阵,如某一坐标系通过平移加旋转后得到,在该坐标系下一点的位置是多少,那么通过旋转矩阵乘当前坐标系中的点的位置即可以表示该点在原来坐标系中的位置在哪。
**10.11周二:**
与师弟张浩进行简单交流后,打算尝试ros多机通讯,师弟那边遇到了bug,配置完毕后roscore启动报错,于是我这边打算用我的电脑和王昊的电脑进行尝试,通过在网络上寻找相关教程,实现了ros多机器通讯,在我的电脑上启动了ros自带的乌龟仿真GUI,用王昊的电脑上启动小乌龟键盘控制节点,通过控制王昊电脑那边的键盘,能够完成我电脑上乌龟的运动。随后将搜集好的相关资料发给师弟们。
在我的电脑上启动小乌龟键盘控制节点

在王浩电脑上启动小乌龟GUI

**10.12周三**
之前在网上看了一个利用C++的Eigen库,实现坐标转换的视频,简单了解了下该库的函数,打算尝试写一个简单的坐标变换,完后通过ros中带的tf左边变换进行验证。demo如下,已知一大坐标,其下还有一相对于大坐标的小坐标,该小坐标位于大坐标X轴3米处,且Z轴旋转了45度。在小坐标中有一点p(1,0,0),那么该点在大坐标的位置如何,通过使用Eiegn库,最后计算得到了点p在大坐标的位置,完后通过使用tf,编写坐标的广播和监听器,得到的点与自己手写出的一致。

**10.13周四**
今天试着尝试用我的电脑启动yolo节点,用王浩的电脑启动仿真,发现可行,与张浩师弟交流后了解到,启动第二个yolo会中断第一个yolo,猜想可能是节点名称冲突等原因造成的,最后通过对yolo启动的launch文件进行修改,以及darknet_ros中对订阅的话题及配置文件进行相应的更改,应该是解决了。
在我的电脑上启动仿真及第一架无人机yolo,在王浩电脑上启动第二架无人机yolo,可行。
这是第一架无人机的yolo

这是第二架无人机的yolo

**10.14**周五
之前看那本书的时候看到了目录有介绍云台相机的东西,那天简单扫了一眼,打算明天把这个看看,完后就得想办法搞搞我们项目里的云台相关的东西了。
**总结**
这周主要还是在于理解坐标变换,通过C++ Eigen库实现坐标变换demo并用tf进行了验证。解决了ros多机通讯的问题,接下来打算试着研究下云台那部分的跟踪小车的东西
# 李肖飏-第十六次周报
周报日期:2022.10.17-2022.10.21
本周预定完成内容:
1.将改好的模型加载到同一个launch文件中
2.用实现相机下的点转换到无人机坐标下的转换
每日具体安排:
**10.17周一:**
上周五学伟师哥开会讲了关于QGC的使用方法,和师哥聊了下QGC,我之前发不出航点,规定不了路线是由于我下的版本太高了,下回了旧版本后按照师哥的流程走了一遍,熟悉了下怎么使用QGC


下午和张浩,峰强,通过wifi实现多机ROS通讯,成功启动三个YOLO,不过在尝试张浩所写的那个东西后,发现逻有问题,一架飞机发现车后,其余两架飞机无法正确跟过去,最后将发点改为发速度后,问题得到解决,但是当三架飞机都发现车后,代码逻辑未生效,搞了半天未解决,最后发现是在代码中设置的变量只对单独文件生效,最后我们和张浩讨论了下,提出了一个思路,由他想办法解决。
**10.18周二:**
今天将上周所说的场景进行整合,将模型都加载到同一个仿真环境中,但是发现船没办法浮在水面上,有空气墙,和佳乐聊了一下,他也暂时没搞定这个,想着是先让他把tag加在床上在想着个,我也试了好久,还是暂时没法解决这个船隔着空气墙的问题。
完后和峰强讨论了下我们云台相机转动使得飞机没法正常飞往目标的问题,因为云台发布的是一个速度,但实际发布的可以理解为是在相机坐标下的X,Y的一个点(不知道这样理解对不对),现在的想法就是运用tf将这个点转化到无人机上。打算明天搞搞这个。
**10.19周三**
按照昨天的思路,搞了一下TF坐标变换,但是tf的转换耗时,飞机总是一顿一顿的,最后还是放弃了这个念头,打算直接在脚本中写入一个坐标变换。
**10.20周四**
今天打算将旋转矩阵直接写到脚本中,思路是由于云台转动后,和无人机朝向发生了变换,当前跟踪就无法实现,想着是反正相机是固定到无人机上的,他所发布的也只是xy二维的数据,那么直接用一次坐标变换,将这个xy的速度转到无人机上应该就能直接解决这个问题,原点一样,只不过是在z轴方向发生了改变,按照这个思路,通过查阅z轴转动的旋转矩阵,改了代码后,发现飞机还是乱飞,和峰强一起讨论,最后发现是 跟踪脚本中的相机俯仰角是根据一个话题拿到的,但是拿到的这个四元数转化成欧拉角,转化有问题,这个由于目前相机俯仰角是固定的所以在这里直接设置成了60度,怀疑是坐标的定义存在问题。
最后通过将这个俯仰角写死,相机偏航角反后,整个云台转动无人机跟踪算法暂时是通了,但是这个为啥转化出了问题,暂时还没想通。
**我们现在让云台向右转动120度 相机在当前状态下实现无人机跟踪**


**10.21**周五
今天和张浩聊了下,他那边又改好了一个,明天我,张浩,峰强去实验室再把张浩这个试一试。
**总结**
这周算是实现了云台转动,无人机能够正常跟车,但是里面还有一些细节没有想明白,需要再搞搞
---
**10.25周二**
按照王老师所说修改无人机偏航角后,再起跟踪脚本后发现没法跟踪,原因就是上周完成的跟踪脚本只是把相机坐标下的点通过旋转矩阵转化为了map坐标系下yaw的点,由于无人机初始偏航角和map坐标系一致,所以未发现问题,现在的想法就是拿到无人机在map下的偏航角,再写一个旋转矩阵,把这个点再转过去,通过实践,这个问题解决
如图:
此时无人机的偏航为:

相机偏航为:

通过两次旋转矩阵变换:

实现坐标转换
经测试,无人机能够完成跟踪:

**总的来说这个目前是实现了,但是有个问题:相机偏航角初始化为0后并不是朝向map x轴方向,这个地方需要再研下**
无人机偏航90度

相机设置的篇航是0,但是在gazebo中的偏航却是其他值:

这么说两次坐标变换 第一次是将当前相机下的点映射到相机回正后的点,第二次是将这个点映射到无人机上
**10.26周三**
今天将改好的代码给了师弟,师弟将我和他改的东西揉到一起后发现,飞机有时候没法正确跟车,想了好久,通过尝试,发现在launch文件中无人机的偏航角后,相机也会发生相同角度的转动,但是这个转动是相对于无人机的,也就是说无人机转90度,相机相对与无人机转90度,那么相机就是转了180度(但是这个为什么会这样不清楚),那么之前一直以为上周的坐标变换是将相机的转成了map,实际上是转成了无人机的,那么只需要把昨天添加的无人机自身的旋转变换删除掉就可以了。
---
随后研究下这个语雀中跟踪代码的逻辑,上周讨论的算法中的参数,fx,fy是相机的焦距

在这个话题消息中都是关于相机的一些个信息,通过查阅资料,对里面的信息有个简单了解。

通过阅读跟踪脚本的代码,其主要思想就是将像素间的距离差转化为了无人机与目标之间在xy平面上的距离差,用这个差值来表示成无人机的速度,但是公式中

最后两行关于无人机速度的代码逻辑,通过一步步推敲还是没能想明白为什么能够这样转化,对于第一个公式,
```
x_velocity = float(v_velocity*z/(v_*math.cos(theta)+fy*math.sin(theta)))
```
个人理解是将现实中无人机的x轴方向的速度与相机像素的比,等于飞机高度乘以cos(相机俯仰角)与竖直像素差乘cos(相机俯仰角)加上相机中y轴的焦距乘sin(相机俯仰角),这一步画图我也没理解出来他们之间的关系是什么,通过询问老师,打算搜搜相关的,看看能不能找到理论支持。
**10.27**周四
问师弟要了他改好的代码,我按周三想出来的想法,将周二加的旋转矩阵删除后,经过多次尝试,飞机能够正常跟踪了,之前一直以为相机经过旋转变换后是转成了map坐标,但实际上相机一直是参考的无人机坐标,所以不需要改动之前的代码,通过一次旋转矩阵就能将相机坐标下表示的速度转化成无人机坐标下的了。
此时无人机正常跟车,当车从左边视野中消失后,通过跟踪脚本,控制云台每秒向车消失方向旋转20度

当相机视野中识别到车后,能够完成跟踪

---
随后打算去尝试老师上周说的将这个无人机换成复合翼进行跟踪尝试,但是加载后,相机云台无法控制,尝试寻找解决办法,先去作者的git上搜了搜,搜到这么个问题

作者给出了解决办法


我试着将这些个参数加在了这个复合翼中,但是不生效。
这个问题还未能解决,最后查资料的时候发现这个typhoon无人机就带着这个云台,应该是人家一体的,可能内部的云台控制都以封装,直接将模型搬到复合翼上不能实现云台转动
# 李肖飏——第十八次周报
:::info
## 问题:将云台加到复合翼机型云台无法转动
:::
:::danger
## 是否解决:未解决
:::
### 10.31 周一
查看王昊的所修改的代码,发现其并未在模型文件中加入控制插件,我排查加入后,发现云台还是无法移动,询问师哥后,师哥建议我从控制方面下手,可能是多旋翼的控制和复合翼控制存在偏差。
### 11.01 周二
经过查找资料,从肖昆老师gitee上找到了类似问题的描述,只不过人家是在原来的机型上无法控制云台

这个图片是各种机型的一个参数配置,我从这个里面看到了原来搭载云台的无人机的参数
顺藤摸瓜看到了多旋翼默认参数配置文件中,有一个是关于云台控制的

```
#
# This is the gimbal pass mixer.
#
set MIXER_AUX pass
set PWM_AUX_OUT 1234
```
:::warning
**看注释是和云台控制有关,将这个代码移植到垂起默认配置文件,并将6011typhoon_h480.post文件移植到了复合翼机型中,进行尝试,云台还是不能转动**
:::
### 11.02 周三
:::danger
按照这个思路去查了一些关于px4飞控是怎么启动的,大致了解了下gazebo与px4启动,最终将问题锁定在了无人机的混控器

:::
但是这个混控器是是和无人机的机型相关联的,每一个具体的无人机型号都对应其自己的混控,里面的代码也是很底层的,和PX4控制有关
:::info
复合翼机型在px4中的type为22,而适用于云台的多旋翼机型为13,而关于各个机型所对应的控制也都封装到了px4中,强行在复合翼中加入云台会使px4控制出现冲突导致云台无法转动,在QGC中可以看到mount_oritation已经发生变化,但是由于控制冲突,云台是不能够转动的
:::
:::warning
在肖昆的代码中看到了一个关于固定翼加云台的模型,本想从中取得方法,但该模型压根没法正常加载
:::
和王老师聊了该问题,**尝试去和肖昆取得联系看看有没有解决办法**,也与老师聊了有关开题方向的问题接下来需要做的是读该方向的论文,但是目前还存疑,现有的目标检测及跟踪与目标跟踪好像不是一回事儿,这个需要我下来再去搜搜。
### 11.04 周五
通过查看个gitee上查看肖昆老师xtdroe,发现老师给了我答复,但是他没有解决这个问题,说是后续再去进行尝试
:::warning

:::
尝试着询问肖老师,看他能否给我提供一个思路去实现将云台加到复合翼机型中。
### 11.07 周一
再次去查看肖老师的gitee并没有给我答复,所以还是得自己想想,通过多次尝试,最终确定了就是px4飞控对复合翼机型的控制与云台控制起了冲突,在qgc中能够看到云台转动的相关数据,但是云台无法实现转动,在复合翼切换到固定翼模式飞行后,盘旋下能够看到云台发生了转动,通过查阅px4官网,关于云台仿真的描述,也只是说在typhoon_h480机型上进行了适配,但是对于其他机型,并未作出如何添加云台,未给出更多关于gazebo仿真中的教程
### 11.09 周三
按照王老师的安排 在和高老师开完组会后聊了下各自的进度,也将平台搭建需要交给研一的去做这个事情交待下去了。
### 11.10 周四
今天主要是去学习了下关于适量场那篇论文的东西,关于老师之前给我22年五月份的那篇,在翻译完后并未能理解,加上里面公式繁多,所以打算先看老师和我提到的那本英文书中相关的内容,书中主要是讲了下直线路径追踪,看了看书后好像是对这个有一点点理解,随后又去看了下老师给我发的20年的那篇,关于复合矢量场的论文,看了一小部分,感觉和人工势场法类似,又去简单的了解了下什么是人工势场法,通过查阅相关资料,人工势场法是将目标设置一个引力,在障碍上设置斥力,通过引力和斥力的合力去引导机器人向目标点运动
而适量场也类似,给目标路径设置一个矢量场,同时给障碍物也设置一个,通过一个函数将二者整合成一个矢量场,矢量场中箭头表示为机器人在该位置处期望的速度方向,目前对于这块的理解是这么多,这篇20年的论文还没读完,打算明天继续读读这个论文。
:::danger
疑惑:关于论文中使用的复合矢量场中的**路径追踪path following**与之前项目中的通过**视觉伺服**完成跟踪感觉不是一回事儿,路径追踪是给定一条路径,通过矢量场去引导机器人去贴合该路径,但是之前搞得那个跟踪只是从图片中获取到目标中心到图片中心的像素差,通过算法补偿为了无人机的一个期望速度,感觉不像是一回事,这块想不明白
:::
### 11.14 周一
:::info
将20年那篇论文读完了,大致理解了其中复合矢量场的内容,其主要思想是构建两个矢量场,一个是pf(路径跟踪矢量场)一个是反应矢量场,通过设计零入零出凹凸函数来平滑的叠加这两种矢量场,是机器人能够达到期望路径的同时完成避障,其中主要的思想是为障碍物设计两个环形“边界”排斥边界Q及反应边界R,而他们之间存在一个包含关系,及反应边界包含排斥边界包含障碍物

:::
:::info
**零入零出凹凸函数**的设计是为了当机器人在排斥边界内部,这时仅受反应矢量场的影响,而当机器人在反应边界外部,其只受路径跟踪矢量场的影响,而当机器人在排斥边界外部与反应边界内中的混合区域中,将同时受两种矢量场的影响

通过此函数就能够将两种矢量场进行平滑叠加,使得机器人在路径跟踪过程中同时完成避障
:::
:::info
该论文对这个理论进行了仿真实验
如图:

a图表示的红色圆圈是机器人的期望路径,黑色虚线表示的是障碍物的排斥边界,绿色实线表示的是障碍物的反应边界,粉色实线机器人在复合场中运动的轨迹,从图中四个不同的位置出发,均能避开障碍物按照期望的路径运动。
b图与a图类似,设计了多个障碍物,通过复合矢量场能够使得机器人完成路径跟踪的同时避开障碍物。
:::
接下来打算读一下那篇22年五月的论文
### 11.16 周三
昨天今天主要是看了看这篇22年五月份的文章,其大体思路与20年的那篇是一样的,主要是在之前论文的基础上加入了许多的理论证明。
:::info
还有关于当机器人处在混合区域中会陷入无法驶出混合区的问题引入了矢量场切换的思想,其主要思想就是在障碍物的反应边界外在构造一个比当前反应边界更大的反应边界,当机器人进入混合区域M的稳定区域中,将当前的复合矢量场切换为稍大一些的反应边界的矢量场,使得机器人能够离开当前混合区M的平衡区域(关于这个矢量场切换这边大致是理解了他想表达的意思,但是里子还是没能搞明白)

:::
:::info
作者在文中还做了多个实验

这个与20年文章中的一样,所以就不赘述了
:::
:::info
这个是关于切换矢量场的

但是这个暂时还没看明白
其主要想表达的是若不使用切换矢量场,那么粉色轨迹最后会陷入进平衡位置,若使用切换矢量场,那么机器人就能够顺利的从中驶离
:::
:::danger
问题:
1.关于论文中所提到的复合矢量场的思想我已经大概掌握了,但是里面涉及的众多公式证明及其他领域的专业词汇还是不能很好的理解。
2.关于文中所提到路径跟踪与避障,与我们现在正在用的基于yolo和视觉伺服的目标跟随感觉不是一回事儿,一个是规定一个期望路径,一个是将目标中心对准图像中心的差,转化成(定高)无人机的,x、y方向的速度,这两个我感觉没什么联系,不知道怎么去结合。
:::
### 11.24周四

### 12.05周一
:::info
今天主要是继续去看了下论文中提及的向量场的构造方式,主要是根据无人机位置到该点的距离构造出一个法向量和一个切向量,通过这两个向量的作用去计算该点的一个期望航向。

:::
:::info
英文书中提到的是在期望路径与无人机放在一个水平面上,去计算无人机位置点投影到期望路径点间这两点的距离,根据这个距离去设计在无人机位置时的期望航向,这里面我理解的是,当这段距离(误差消除时,期望航向为0)这时候0度就是沿着期望路径的方向前进。


:::
解了两种向量场的构造方式后,我大致明白了两者的共性,说白了就是根据无人机位置到期望路径的这段距离,根据这个距离去构造一个在该点处的期望航向,而期望路径空间各点的期望航向角就构成了一个期望航向角的集合,这个集合就是我们所称的向量场。
:::warning
接下来我按照老师的意思去把同一作者的关于3d向量场那篇论文去做了一个翻译,打算明天看看。
:::
### 12.06周二
将昨天翻译好的论文大概看了看,明白了其三维向量场的构造方式,按照其之前论文中二维向量场的构造主要是根据无人机位置到路径构造出一个沿该路径的切向量和法向量,通过这两个向量叠加,构造出在该点时,无人机的一个期望航向。
而在这篇三维向量场的论文中作者主要是采用在三维空间中设计两个平面,通过这两个平面的交点来构造出一个三维路径,而这个三维路径的向量场构造沿用了他之前二维的构造方法

途中黑的实线是由两个平面相交而得到的期望路径,首先针对这个图中红色的交点相对于其中一个平面我们可以得到关于该点这这个平面上的一个法向量,对于另一个平面也是如此,那么通过将这两个法向量做叉乘,我们就得到了一个垂直于这两个法向量所构成的一个平面的一个向量,此时这个向量也可以看作是三维路径,这条黑线在该点时的一个切向量,之后将这个切向量和两个法向量进行叠加就构造出了这个三维空间中的航向角了,那么这个航向角的集合也就被称作是三维的向量场了。
:::danger
论文中所描述的三维向量场的构建大概是看懂了,但是怎么将书中所提到的二维向量场扩展到三维还是没有头绪。
:::
### 12.07周三
今天继续想怎么能够将那本英文书中所提到的二维向量场扩展到三维上,我去看了上篇论文中的会议论文给了我一些灵感,其中有这样一幅图。

这幅图描述的是一个三维空间下的直线路径,从图中我们可以看到这个直线路径是由两个平面相交形成的,一个水平平面和一个垂直平面,那么按照这个思想,结合英文书中关于二维向量场的描述,其也是将三维的路径与无人机放到了一个水平面下(也可以说是将无人机和路径都投影到了一个水平面上),在这个水平平面上进行操作,最后给出的角度也是无人机的偏航角,那么是不是可以将无人机位置与期望路径位置放在同一个垂直平面上,根据他俩在垂直平面上的投影的纵向距离去设计一个期望的俯仰角,最后根据在该点处得到的期望偏航角,以及期望俯仰角,通过这两个角度就完成了二维向量场到三维向量场的扩展。
:::info
目前针对于二维向量场扩展到三维的一个想法
总结:
1. 二维的相当于是不管高度把路径和飞机投影到一个水平平面上,算出来无人机和无人机投影到路径上的这个横向距离距离算期望航向角。
2. 那么就在构造一个不管横向距离的 把无人机和路径投影到路径所在的垂直平面上 算一下在该垂直平面下无人机和无人机投影到期望路径这段纵向距离,根据这个算一个俯仰角。
3. 完后把这个横向得到的航向角的和纵向得到的俯仰角进行一个叠加,就完成了二维向量场到三维的扩展。
:::
### 12.12周一
这两天主要尝试将云台移植到复合翼上,与之前一样,将模型插件等相关配置移植后,云台晃动,但不能实现旋转。在QGC中有一个参数MAV_TYPE,若将其改为typhoon机型的就能够实现云台转动,但是无人机只能够按照多旋翼模式飞行,切换为固定翼后gazebo会卡死,若换回复合翼机型的MAV_TYPE=22,发布云台转动话题,能够看到云台朝转动方向发生抖动,但无法实现转动。随后在网络上搜寻相关问题,但均没有关于PX4云台移植的东西。

于是尝试去PX4 GitHub上寻求帮助。

按照他的提示,我尝试修改一些配置,但是关于上述参数中,有一个参数指定超过了设置的范围。云台还是不能实现转动。

### 12.13周二
经过继续询问,他给出的答复是我是用的版本较低,因为云台协议是在PX41.12后才出现的,而语雀中的PX4版本是1.11,他表示,在旧版本中虽没有云台协议V2,但是你可以使用typhoon机型控制云台,而我这种改了模型后云台在复合翼中不能转动可能是一个bug.

所以目前在语雀提供的这个版本中可能实现不了云台的移植,现在的想法是找一个新的PX4版本再进行尝试,而且我也看到在12月9号,语雀新建了一个新版本仿真平台基本配置,但里面还没内容,不知何时上线。打算继续在github和语雀上再寻找办法。

关于论文方面 通过将两个公式进行比较,发现他们的共性了,现在想着按照上周所想的这个方式
:::info
目前针对于二维向量场扩展到三维的一个想法
总结:
1. 二维的相当于是不管高度把路径和飞机投影到一个水平平面上,算出来无人机和无人机投影到路径上的这个横向距离距离算期望航向角。
2. 那么就在构造一个不管横向距离的 把无人机和路径投影到路径所在的垂直平面上 算一下在该垂直平面下无人机和无人机投影到期望路径这段纵向距离,根据这个算一个俯仰角。
3. 完后把这个横向得到的航向角的和纵向得到的俯仰角进行一个叠加,就完成了二维向量场到三维的扩展。
:::
这样是否可行呢?
### 12.26-12.28周一至周三
由于放假回家后家里遭遇疫情所以空闲的那些天没有进展,一直在家休息,好了一些后就继续开始之前的任务
:::danger
尝试解决云台问题,按照之前github上所描述的,询问肖老师安装新版本px4,其中遇到了诸多bug导致环境一直配不对,如项目无法编译等等问题,最后经过尝试和询问肖老师解决成功安装了新版本的PX4,但是飞机仍不能飞行

最后通过询问解决
安装完成后按照github上的修改方法尝试修改

在模型sdf文件中也进行了配置,但是启动后,发现云台相机不停的抖动,根本无法正常使用
使用语雀中云台控制脚本也会报错

但是换回typhoon机型后,云台正常,暂时没想到什么解决办法
:::
### 12.29-12.30周四至周五
:::info
主要是梳理向量场逻辑脉络,如何从二维向量场扩展到三维,按照逻辑自己写出来,自己拟定了两种扩展的思路打算写出来,暂时还不知道对不对。
:::
### 1.2-1.6周一至周五
:::danger
继续尝试解决云台问题及梳理向量场逻辑脉络
云台问题还是没能解决
将整理出来的文档与老师聊后,发现思路有误,不应该自己去创造一种扩展方式,而是采用论文中所提及的二维到三维向量场扩展的思路,进行梳理,而且不仅仅是要得到向量场,还需要根据这个向量场去得到后续的控制算法。而且文档梳理的还是太少了,需要将之前论文中提及的其他补充进来
:::
:::info
后续几天主要是看一下之前论文中忽略掉的固定翼模型控制算法,将文档进行进一步补充。
:::
### 1.10周二
前几日家中有事,所以耽误了几天时间,今天主要是学习论文中关于固定翼控制算法的部分,首先先将论文翻译后,进行理解,论文中所提及的固定翼模型有三个控制输入,分别代表航向、高度、空速,而这里高度与空速是独立于其他变量的,所以首先考虑水平方向的控制及航向,首先得到无人机的偏航角度,根据之前得到的向量场,其前两项数据作为水平面上的向量场方向,我们的目的是通过控制输入水平的一个角度,使得飞机在前朝向导航到水平面向量场的方向上,而高度与向量场的第三个分量保持一致即可。而空速的控制也仅仅是一个等式。




### 1.11周三
继续补充梳理脉络的文档,将之前缺少的部分进行一个补充。
### 1.17周二
主要是按照王老师之前说的重新给之前写好的文档排了下版,往文档中补充搭建仿真环境所用到的技术介绍
### 1.18周三
继续按照昨天的来,将ROS、PX4、Gazebo的介绍,梳理进自己的文档中。

### 1.23-1.27周一至周五
前几日过年走亲戚,一直不在家里所以之前一直没搞,断断续续的看之前老师说的讲座,都是集群规划方面的讲座
1.基于椋鸟群飞行原理的无人机集群技术研究——樊邦奎教授
2.集群系统协同控制理论及在飞行器集群中的应用——董希旺教授
3.无人机集群智能规划技术及验证——李杰教授
4.集群思考与实践:从端流表征到群机智能——许超教授
开始都是通过模仿生物间的集群,观察生物间协作,从中寻找规律,后期通过运用人工智能技术,实现自主智能化,但对于这方面还是了解较少,其中许多东西还是不能够理解。
### 1.28周六-1.30周一
今天继续梳理之前写好的文档。
:::info
主要是将文档继续检查排版,将写好的文档又看了一遍,在关于3D避障方面,论文中也给出了相应的解决办法



:::
:::success
关于3D避障向量场主要说明的是以下两点:
1.关于期望路径的构造,与3D期望路径构造保持一致,还是通过三维空间中的两个平面的交点集合来构造三维空间中的期望路径。

2.关于三维空间中障碍物的设计,在二维空间中,障碍物周围由反应性边界与排斥性边界包裹,将其扩展到三维后,相应的反应性边界与排斥性边界则扩展为反应性表面及排斥性表面,这时候关于反应性表面构造的三维向量场的表示则为:

将上述两个式子中的期望路径向量场与反应表面向量场与之前公式进行替换,就能够得到在三维空间中的复合向量场了
:::
### 2.13周一
开始研究关于向量场现成代码
[https://wiki.paparazziuav.org/wiki/Module/guidance_vector_field](https://)
看过官方介绍的文档后 以直线期望路径进行研究
主要包括以下几个代码文件
:::info
gvf_line.c
gvf.h
gvf.c
gvf_low_level_control.c
:::
:::danger
### **1.gvf_line.c**
是基于向量场的导航算法,所描述的向量场是针对二维直线运动轨迹的
其中重要的函数是**gvf_line_info()**

该函数的作用是返回一个直线期望路径的向量场的相关信息。
67-68行是当前无人机的位置信息
69-71是期望路径的信息航点a,b还有朝向alpha,关于描述期望路径的结构体的信息在gvf.h中有介绍

73-74是计算之前论文中的
76-78是计算[](https://i.imgur.com/Ob9xFG6.png)的梯度,(即偏导,就是法向量)
80-84是一个海森矩阵,暂时还没搞明白
:::
:::warning
### gvf.h
该文件存放的是一些已经定义好的结构体和声明了的函数
如之前提到的gvf_trajectory结构体就是在此定义的

:::
:::info
### gvf.c

这个函数的作用是定义一条期望路径,从航点获取 X 和 Y 坐标,并将航向从度转换为弧度
返回值是另一个函数gvf_line_XY_heading()

其中222行表示的是跟踪的方向(即切向向量的方向)
223行是gvf_line()

这个函数就是将上述得到的信息整合在一起
其中198-200这三行代码分别表示
202表示轨迹类型
其余都是轨迹的参数
209行对应之前提到的vf_line.c的中的函数,返回这个期望路径向量场的一些值
通过211行的函数gvf_control_2D()执行该算法以计算无人机的所需转弯



其中153行开始计算向量场中期望的角速度
暂时还没搞明白具体含义
:::
:::danger
问题:通过阅读了解到期望路径构造的方式有两种一种是隐式方程,一种是参数方程 目前现成代码中2d是隐式方程,而参数方程是2d,3d都有的 论文也有 接下来简单看看参数方程构造方法
:::
### 2.16周四
接下来主要看的是这个代码中3D向量场代码
:::info
网页介绍上表示在构造3d路径时与之前2d路径不同,并不采用隐式结构而是采用了参数化来表示三维路径(Vector Field Guided Path Following Control: Singularity Elimination and Global Convergence)完后去看了看这个论文的意思,其思想就是将路径进行参数化,以二维为例

其中w是路径的参数,这时可以得到

完后通过之前的

就能够将这个2d路径用三维表示出来,其中

通过计算,这时候的二维向量场(虚拟三维)为

:::
有了这个了解后,尝试去看3d向量场的代码,从三维中的椭圆入手(由三维空间中一个圆柱面与斜平面交点表示)
椭圆的参数方程表示为

w是用于生成轨迹的自由参数。

xo,yo或航点是圆柱体的XY中心,r是圆柱体的半径。对于垂直分量,zl 和 zh 是所得椭圆的最低点和最高点,alpha 是最低点的航向
:::success
这里面主要涉及以下几个部分的代码
1.gvf_parametric.h
2.gvf_parametric.cpp
3.gvf_parametric_3d_ellipse.h
4.gvf_parametric_3d_ellipse.c
5.gvf_parametric_low_level_control.c
:::
:::danger
### 1.gvf_parametric.h
这个文件是定义了二维和三维参数化路径的导航向量场算法中要用到的相应结构体等定义好的一些变量

:::
:::info
### 2.gvf_parametric.cpp
这个文件就是二维和三维路径导航向量场算法的代码
里面涉及很多的路径的方法及制导方法
以椭圆为例
首先是这个函数gvf_parametric_3D_ellipse_XYZ
xo,yo或航点是圆柱体的XY中心,r是圆柱体的半径。对于垂直分量,zl 和 zh 是所得椭圆的最低点和最高点,alpha 是最低点的航向

这个函数就是将三维空间中椭圆信息输入进去生成向量场,根据生成的向量场对无人机进行相应动作
该函数中还包含两个函数
gvf_parametric_3d_ellipse_info
这个是根据椭圆信息得到向量场相关信息的函数
gvf_parametric_control_3D
这个是通过上个函数及一些定义好的参数去进行向量场构建及后续控制算法的设计
首先看360-370行代码,是对飞行安全考虑人为更改路径
其次372-380行是将三维空间中椭圆的信息赋值到相应变量中方便后续使用
382则是定义一些后续需要使用到的变量(轨迹的参数方程和部分导数'w'的参数方程)
384是上面提到过的生成椭圆向量场信息的函数
这个函数在文件gvf_parametric_3d_ellipse.c中
385是将384得到的信息生成椭圆向量场及相关控制的函数




234-247行是计算各个方向上(x,y,z)的无人机位置到期望路径的误差
250-255行是通过上述误差进行椭圆向量场设计
与论文中所描述的大致相同
257-270是一个雅可比矩阵 在后续航向角角速度控制中使用过的值,暂时没搞明白只知道这个是用在后面控制算法中的
272以后是导航算法,将生成的向量场转化为无人机的控制(航向角速度,爬升率),使得无人机能够跟踪这个椭圆路径。 这个暂时还没搞明白 还得在看看
:::
:::warning
### 3.gvf_parametric_3d_ellipse.h

这个就是定义了生成椭圆向量场要用到的结构体变量等等的头文件
:::
:::info
### 4.gvf_parametric_3d_ellipse.c
这个文件就是生成椭圆向量场要用到的一些信息的算法
其中包括了定义椭圆时默认的一些个参数

其中最重要的是gvf_parametric_3d_ellipse_info这个函数
他在2.gvf_parametric.cpp中被调用

主要进行的是构建椭圆参数方程和计算W的偏导数
:::
:::warning
### gvf_parametric_low_level_control.c
用于二维和三维参数轨迹的导向矢量场算法的固件依赖文件。
:::
### 2.21周一_周二
:::info
尝试将代码调通
由于github中一些数据是通过他们的地面站以及一些配置文件XML给出,这里面需要先把上周讲到的关于向量场构造以及后续控制的代码能够先通过函数调用运行起来。
目前移植代码的思路是
1.先将github中的代码进行调试,能够使用。
2.针对需要的信息看看如何从ros话题中得到相应消息,并将其赋值到所需要的位置上
3.前两步成功的话尝试将最终控制消息以话题的形式发给QGC看看能否按照预定好的轨迹进行动作
:::
:::danger
今天先创建了一个基础功能包,将github中有关向量场的代码进行拷贝,但移植过来后发现,很多报错,主要原因是头文件依赖不对,还有其中一些数值是通过配置文件以及他们的地面站给出的。再加上自己对C/CPP也没有什么了解,暂时的想法是将一些变量赋予定值,先让代码能跑起来。
:::
### 2.22周二_周三
今天主要调试的代码是3D路径的,经过一天的尝试,目前将三种路径所需要定义的结构体,初始化函数等整合在了一个文件中,对于要赋值的变量先赋予定值,最后发现代码能通。
:::success

虽然代码现在通着,但是其中还有诸多变量不知道该如何去获取,所以在这里我都写成定值了。
比如:

:::
目前这个代码先这样,明后天打算尝试github中2D向量场代码的整合,说实话因为没有接触过C/CPP所以不知道这样写合适不合适。
### 2.23周四_周五
今天按照昨天调试3D路径代码的方式调试的2D路径,将一些需要的值写死后程序能够正常运行。
:::success
接下来的想法是:
1.总结一下这两个代码中所需要的数据是什么
2.怎么通过ROS节点接收到这些需要的数据,通过程序文件的计算得到的航向角速度(2D)、航向角速度、爬升率(3D),通过话题的形式再发到ROS中
:::
:::warning
### 先看3D向量场路径代码中需要获取到的数据
###### 这个是针对三叶草路径的三维空间中的2D控制算法
1.无人机当前位置

2.无人机的地速

3.无人机在三个坐标轴上的速度(东-北-上)

4.无人机地速的朝向

---
###### 这个是针对椭圆、里萨如路径的三维空间中的3D控制算法
1.无人机当前位置

2.无人机的地速

3.无人机在三个坐标轴上的速度(东-北-上)

4.无人机地速的朝向

:::
h4其中上述的两个控制算法中针对三叶草路径的不需要获取无人机的高度
---
:::warning
### 再看2D向量测路径代码中需要获取到的数据
###### 这个是针对三叶草路径的三维空间中的2D控制算法
1.无人机的地速

2.无人机地速的朝向

3.无人机当前位置

:::
:::info
接下来还需要的数据是各个路径的参数了
#### 3D路径中的一些参数
1.2D三叶草

(其中 w 是生成轨迹的自由参数)xo、yo 或航路点将轨迹置于地图的中心,并对其进行 alpha 旋转。

2.3D椭圆

xo,yo 是圆柱体的 XY 中心,r 是圆柱体的半径。对于垂直分量 zl 和 zh 是合成椭圆的最低点和最高点,alpha 是最低点的航向
3.3D利萨茹路径

参数 xo、yo、zo 和 alpha 用于在地图上定位和旋转轨迹(相对于家)。
---
#### 2D路径中的一些参数
1.直线

2.椭圆

3.sin

:::
这个路径参数的含义暂时还没找全,接下来找找看.
:::danger
目前应该是将github中的代码所需要的一些数据总结出来了,结下来打算想想看怎么去定义、和ROS去联系到一起了。
:::
---
### 2.28周二
:::info
上次和王老师开完组会后,按照王老师的要求,将两种向量场(二维、三维合在一起),通过自定义消息,在向量场代码中加一个逻辑进行区分,从mavros中获取到所需要的消息,通过已有向量场算法进行计算后得到两个速度(偏航角速度、爬升率),完后将这两个速度发到对应的话题中。
:::
今天主要的任务就是将两个向量场的代码放在一起,进行相应调试。
---
### 3.1-3.2周三至周四
:::info
继续完成昨日的工作,将需要的信息通过自定义消息打包起来,尝试设置节点话题查看能否订阅话题。定义好的消息后,尝试在代码中添加判断路径逻辑,通过话题接收到的消息内部的信息进行判断,根据消息内容去执行不同的向量场算法。
:::
---
### 3.3周五
:::info
将之前写死的那些个值通过订阅mavros中的话题,从中获取,运行代码尝试是否能够得到最后想要的两个速度(航向角速度、爬升率)。
:::
---
### 3.4周六
:::info
将获取到的两个速度尝试通过话题发给飞控
:::
:::danger
结果无人机并未产生动作,现在还不知道具体原因,但是代码来看的话两个速度确实是发出去了,暂时不知道怎么去解决
:::
---
### 3.14周二
:::info
上周由于得了甲流所以休息了一周,项目没有进度
:::
:::success
周一开完组会后周二尝试去调通王老师给的代码,可能是由于编辑器自身的问题,连接库一直连接不上,头文件的问题解决后在进行building时,还是报错:

针对这个问题尝试了多种解决办法还是没能building成功,后来打算先看下老师给的代码,想办法从中拿出所需要的东西整合在自己的代码中。
当晚与学伟师哥聊后了解到,在版外OFFBOARD模式下给飞控发消息应当发送这个话题:
```
/mavros/setpoint_raw/attitude
```
并且OFFBOARD模式要求消息发送频率必须大于2HZ。
还有关于这个话题应当发送的是角度,将三个方向的欧拉角转换成四元数后发在上述话题中,而代码中最后得到的是角速度,这个目前存疑。
:::
:::danger
目前的想法就是,先将老师给的代码中设置OFFBOARD模式的代码和发送这个
```
/mavros/setpoint_raw/attitude
```
消息的代码拿出来。尝试着先给飞控发 看看飞机能不能有相应动作。
:::
---
### 3.15周三
:::info
按照昨天的想法试着将OFFBOARD和发送/mavros/setpoint_raw/attitude话题的代码移植到我自己的代码上,尝试编写一个control.cpp节点



:::
:::danger
在尝试过程中,发现无人机能够切换到OFFBOARD模式下,但是相对于比自身高的路径,却会向下俯冲,这个问题通过添加一个负号得以解决,但是无人机却无法转弯,最后研究代码后,向量场最后得到的两个角速度heading_rate,和cilmbing_rate还喂进了一个函数
(以3D为例):

通过这个协调转弯将heading_rate转化为了rolling_rate,最后往话题中送的应当是rolling_rate,climbing_rate.
最后将rolling_rate也试着往飞控里发后飞机能实现转动了,但是不稳定,rolling_rate与climbing_rate过大导致坠机。而且飞行的轨迹与期望路径没关系。
:::
:::success
与王老师进行交流后得知:
可以将角速度发送到这个/mavros/setpoint_raw/attitude话题中,角速度也是速度差值,可以试着发送。
关于上面的问题:
1.可能是向量场需要的几个值,从mavros中取值的参考坐标与原来向量场中取值的参考坐标不一致。
2.还有可能是单位不一致。
3.以及在一些临界值跳变(正负等)。
关于无人机rolling_rate与climbing_rate过大导致坠机的问题,需要设置其最大爬升率及横滚率
:::
:::info
接下来要做的事情就是:
明确向量场中需要得到值的参考坐标是哪个,需要与mavros中取得的话题消息对应上,以及各个值的单位,去看一下github上的代码,看一下书中的协调转弯的公式。
:::
---
### 3.16周四
:::info
继续按照昨日的思路进行研究
:::
:::success
通过查看代码 整理了以下需要从mavros中拿的话题信息:
以3D椭圆向量场为例:(一个圆柱和平面的交点)
1.3D椭圆构造所需参数(x,y,r,zl,zh,alpha)x,y圆柱中心点,r圆柱半径,zl,zh轨迹最高点,alpha最低点航向。
2.无人机位置mav_pos 参考坐标ENU ENU->X ENU->Y ENU->Z
3.无人机地速ground_speed sqrt(enu_speed_x^2^+enu_speed_y^2^)或者sqrt(ned_speed_x^2^+ned_speed_y^2^)
4.无人机地速朝向course atanf(ned_speed_y,ned_speed_x)或者atanf(enu_speed_x,enu_speed_y)
5.无人机速度 ENU enu_speed_x enu_speed_y enu_speed_z
6.获取机身姿态欧拉角 NED x y z
:::
:::warning
明天打算按照这几个值去mavros中寻找对应话题
:::
---
### 4.12周三
:::info
试着加入两个情形下的避障
1.追前一个无人机进行避障
2.对于来向无人机进行避障
3.测试圆形期望路径下的避障
:::
:::success
具体实现方式就是订阅另一架无人机的位置,将其作为障碍物圆形轨迹的圆心位置,根据避障无人机其障碍物位置设计逻辑,实现角度融合
:::
:::warning
1.情况一——静止障碍物避障

2.情况二——追赶避障

3.情况三——来向避障



4.情况四——圆形期望路径避障



:::
---
### 李肖飏-5.1-5.11周报
预定完成内容:
1.找到3D球面路径参数方程,并与现有代码进行结合
2.将之前复合角度的逻辑改为复合向量场
3.学习从ros中保存数据
4.matlab画图
任务一完成情况:完成
先从三维空间中球面的参数方程下手:

发现球面的参数方程含有两个自由参数,而代码中只能有一个自由参数。想通过对两个自由参数进行映射,使其变为一个自由参数 另一个自由参数用上一个进行表示。经过几天的尝试,失败。
最后想到之所以有两个自由参数是因为该参数方程表示的是空间中的一个球面,所以一个参数是不可能的,又想到无人机在按照球面飞行的时候也只是选择其中一个空间中的圆形进行飞行,所以想到了用一个过圆心平面去与这个球面作一个交集,得到的交点就是空间中的一个圆形,圆形应该是可以用一个参数去表示的。
通过将空间平面方程与空间球面参数方程建立联系 取得两个自由参数之前的关系,得到球面与平面相交得到的空间圆。

通过构造空间圆的参数方程,使无人机能够按照预定的轨迹进行跟踪
任务二完成情况:完成
将之复合角度的逻辑放到了复合向量场中:
1.发布期望路径信息。
2.发布障碍物路径信息。
3.将之前复合角度的逻辑放在的向量场中

最后得到三个角速度(横滚俯仰偏航)。
4.将2发送的消息通过回调函数获取到后,将这三个角速度转化成四元数,让无人机在offboard模式下通过/mavros/setpoint_raw/attitude话题,使得无人机进行相应动作。
下面是仿真中的效果
3d球面避障




3d圆形避障

任务三完成情况:完成
通过使用rosbag功能包,在仿真跑起来的时候通过命令行键入命令就可以记录想到记录的对应话题的消息,再通过相应命令将bag格式的数据转化为csv文件,转化是可以选择自己想要的话题。
任务四完成情况:未完成。
昨天才完成了Matlab在ubuntu下安装,在安装过程中遇到很多问题,试了好多CSDN上的教程,最后终于成功,画图方面目前没有开展,接下来打算熟悉下matlb的使用以及询问师哥应当保存哪些数据。
---
### 李肖飏-5.12-5.18周报
预定完成内容:
1.简单学习保存数据、导入数据、matlab绘图基本用法
2.尝试绘制无人机期望路径与实际路径图
3.算法输出的三个角度和无人机实际的三个角度是否拟合
任务一完成情况:完成
通过在b站学习相应的matlab教程,简单了解了如何使用matlab导入rosbag保存的数据,通过matlab内置函数实现绘图。

任务二完成情况:完成
将期望路径与实际路径绘制在同一图中:
1. 期望路径为直线

2. 期望路径为同一高度平面圆。

任务三完成情况:完成
通过订阅无人机自身姿态消息及控制算法输出的姿态消息,将控制输出姿态及无人机实际姿态绘制在同一图中实现。
1. 期望路径为直线的三个角度的情况
俯仰

横滚

偏航

2. 期望路径为同一高度平面圆的三个角度的情况
俯仰

横滚

偏航

问题:
1.向量场图暂时还没好的解决办法,打算再想想办法。
2.订阅无人机姿态问题时偏航与横滚俯仰取自两个不同的话题,需要在组会上讨论下。
3.是否还需要其他类型图?
4.下一步打算尝试将避障的加进来看看效果。
---
### 李肖飏-5.20-5.25周报
预计完成内容:
1.调整mavros中的话题发布话题的频率
2.尝试在matlab画出无人机路径等图像
3.改代码,尝试解决上周说的三个实际角度与期望角度不符合的问题
任务一完成情况:完成
修改流程:
1.在MAVROS的官方界面找到你所需要的信息条目。

2. 选择对应的ROS版本,这里我使用的是18.04对应的melodic。
我的文件在 ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/rcS


任务二完成情况:完成
避障的期望路径与实际路径图



任务三完成情况:
尝试修改了下误差的系数

尝试将固定翼的油门调小

效果:
1. 直线路径情形:




2. 避障情形:



