# program_learning **Repository Path**: gyxGYX123/study_1 ## Basic Information - **Project Name**: program_learning - **Description**: program_learning - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-08 - **Last Updated**: 2024-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 进展和建议 ## 进度 ### 2023.4.9 * 完成项目环境的基本配置,包括Qt和vscode的配置。 * 项目基本思路为:通过Qt搭建虚拟环境,通过生成随机坐标点并使用三次插值算法绘制封闭曲线生成地图,摄像头的思路暂无,寻路使用判定摄像头拍摄图像的中点和轨迹线的偏差判定是否需要调整运动状态 ### 2023.4.10 * 参照例程文件结构,完成闭合曲线的绘制,后续将作为地图使用,主要思路为利用给定点利用三次贝塞尔曲线拟合。 * 对Qt程序的基本结构和编译过程有了初步认知,学习了QPoint和QVector,下一步准备添加按钮控件和小车模块。摄像头思路暂无。 ### 2023.4.15 * 这几天参加了工程工业创新比赛,今天答辩完才开始继续写,今天完成了按钮控件的添加,实现通过按钮绘制地图。 * 对QtDesigner的使用有了深刻理解,在自定义槽函数处卡了很久,通过提升控件解决。 * 重温了槽函数和信号的用法,同时对Qt的头文件和初始化有了更深刻的理解。 * 下一步准备添加小车模块。摄像头计划给其赋高度和角度,根据成像原理进行进行坐标变换后绘图,需考虑最大可视范围。 添加控件后的示例: ![ui1](line_track/image/ui1.png) ![ui2](line_track/image/ui2.png) ### 2023.4.17 * 完成小车绘制(暂用矩形简单替代,后续进行改进)和初始位置放置,以曲线的起点和第一个控制点的连线作为起始方向。示例如下: ![car](line_track/image/car.png) ### 2023.4.21 * 完成摄像头绘制(暂未有运动功能),通过opencv结合旋转矩阵对图片进行旋转后截图,旋转角度为车相对x轴的偏转角度 * 在Qt的编译环境中加入了opencv环境,了解了pro文件加入其他头文件的编写规则。 * 存在的问题:模糊度较高,后续考虑进行去雾操作 * 示例如下: ![camera](line_track/image/camera.png) * 下一步准备进行运动函数的编写,最近可能要参加几个比赛,时间上可能有些不够,我会尽量协调好时间 ### 2023.4.25 * 实现小车运动,利用QTimer模拟小车运动,每100ms进入一次运动函数 ### 2023.4.27 * 发现摄像头有一点问题并进行整改 ### 2023.4.28 * 现存问题: ``` 1.转向后的摄像头位置如何确定 2.怎么控制小车转向 现行思路:通过阈值判断摄像头拍摄的轨迹线中点,结合底线中点求解旋转角度,但感觉不太准 ``` ### 2023.5.2 * 对摄像头和小车的运动函数进行了整改,以相对角度计算旋转后位置 ### 2023.5.5 * 粗略实现循迹,但效果时好时坏,偶尔会偏离轨道 * 示例如下: ![move1](line_track/image/move1.png) ![move2](line_track/image/move2.png) ![move3](line_track/image/move3.png) ![move4](line_track/image/move4.png) * 现存问题:控制函数很粗糙,效果不好 * 后续进行: ``` 1.修改控制函数 2.增加控制类,将控制函数从car类中移出 ``` * 最近在考虑大创的事,去年的大创要结项了,对于今年的大创还没有头绪,希望老师能给我一些建议。 ### 2023.5.16 * 新增Transmission类,初步实现文件间通信 ### 2023.5.18 * 全面使用pub-sub替代全局变量 ### 2023.5.19 * 重写控制部分代码,优化小车运动 #### 后续考虑 ``` 准备进行算法练习 ``` ### 2023.5.25 * 使用模板重写Transmission ### 2023.5.22-2023.5.26 * 进行初级算法练习,感觉这里任重而道远 ``` 1.学习了哈希表,这在数据结构中应用的很多 2.指针在数据结构中的应用 ``` * 这周在忙大创结项的事,下周有两门考试,最近的时间可能会比之前少一些。 ### 2023.6.2 * 在line_track_v4中使用cmake进行编译 * 这周依然在忙大创结项的的事,基本差不多了,周末还有两堂考试,这周只来得及做这一小部分 ### 2023.6.5-2023.6.9 * 进行算法练习,参考书目为leetcode初级算法,保存在algorithm文件夹中 ### 2023.6.16 * 学习opencv特征点计算与匹配,效果如下: ![match](opencv_study/image/match.png) * 最近要开始期末考试了,可能会先停止两周,考完期末考试再继续学习 ### 2023.7.6 * 学习了标定的基本原理和坐标系之间的关系 ### 2023.7.7-7.11 * 学习了二叉树的基本知识 * 学习了一些opencv的基本知识,包括一些基本操作比如滤波,锐化等 * 学习了SIFT算法,了解了运用高斯金字塔进行尺度空间构建,按照梯度值选择极值点,求特征点的主方向的流程。 * 学习了图像特征的基本知识,并练习编写了边界特征和LBP特征的程序 效果如下: ![edge_detection](opencv_study/image/edge_detection.png) ![LBP](opencv_study/image/LBP.png) ### 2023.7.12 * 下载并编译了ORB_SLAM2 * 学习了Eigen库的使用,了解了基本的矩阵定义和运算操作,练习编写了基于Eigen库对图像进行卷积和池化的程序 效果如下: ![convolution](Library_study/image/egien.png) ### 2023.7.13 * 学习了Ceres库的使用 ### 2023.7.14 * 练习了HOG特征的提取与可视化 ### 2023.7.15 * 学习了Pangolin库的使用,这是一个3D画图的库,还是挺好玩的 ### 2023.7.16-2023.7.21 * 这一周基本上都在忙基地的事情,十月份要参加中国机器人大赛,这里边有一个任务是危险品标签的识别,去年参加的时候我是直接拿yolo跑的,但是其中有几张相互之间特别像,识别效果不是很理想,所以我在想能不能用ocr文字识别来完成这个任务,我的基本的思路是先通过yolo找到标签,用霍夫曼线检测提取出它的矩形轮廓,然后将其文字转正(即转正后的矩形转45度),提取中间的部分然后对其进行文字识别。文件在opencv_study文件夹中的tesseract-ocr文件夹,现在的效果如下: ![OCR](opencv_study/image/ocr.png) * 但是依然存在很多问题 - 首先是背景的问题,它对白底黑字和红底白字的效果都还可以接受,但橙底的效果就不太好; - 第二是我现在只实现了将矩形框转正,但它有四种可能的方向。我并不能保证它的文字是转正的,我想过将四种可能的方向都转一边然后通过置信度来进行判断,但那样帧率会很低。 ### 2023.7.21 * 下载编译了g2o库,了解了一些基本内容,这是个图优化的库,感觉和ceres差不多。看了一些函数的用法和基本的优化流程,但感觉还有挺多要看的 ### 2023.7.23-2023.7.24 * 学习了红黑树的知识 ### 2023.7.25 * 学习了ceres库的线性和非线性优化 ### 2023.7.28 * 学习了g2o库的一些概念,尝试进行了曲线拟合,在这一部分中由于版本问题导致的函数不存在浪费了很多时间。 * 这周事情有点多,学习的东西比较少,后续会补上 ### 2023.7.30 * 学习了数据结构图 ### 2023.8.1-8.3 * 学习了部分计算机基础知识 ### 2023.8.4 * 计划开始进行集群无人机编队控制练习,查询了一些这方面的资料,了解了一些算法,计划采用基于一致性理论的编队控制展开,采用一个领航着多个跟随着的模式。 * 这周基本上把基地的事情忙完了,下周的时间会充裕一些。 ### 2023.8.5-2023.8.11 * 完成了QT界面的初始化,计划下周编写编队算法 * 同步学习了部分计算机基础知识 ### 2023.8.12-2023.8.19 * 完成了无人机运动和盘旋编写, ![hover](ClusterDroneFormationControl/image/hover.png) * 同步学习了部分计算机基础知识 ### 2023.8.23 * Qt4->Qt5 ### 2023.8.27 * 这周军训,请假一周。 * 很有兴趣前去实验室做真机实验,但不知道实验室的具体位置,这学期十月份比完中国机器人大赛之后就有相对充裕的时间。 ### 2023.9.7-2023.9.8 * 改进了一下无人机集群程序,计划下周学习一下其他的程序继续改进 * 现行效果如下: ![UAV_move](ClusterDroneFormationControl/image/UAV_move.png) ![UAV_move](ClusterDroneFormationControl/image/UAV_move_2.png) * 以前有接触过ROS,计划下周复习一下,并学习一些新内容 ### 2023.9.14-9.15 * 按照建议修改了以下无人机集群程序 * 复习了ros的一些基础知识 * 在编译安装PX4的过程中出了点问题,,准备下周学习一下 ### 2023.9.21-9.22 * 按照建议修改了部分 * 说明:首先进行初始设置,然后开始绘制,无人机开始盘旋后点击设置终点,之后在图中点击希望设置的位置,最后开始仿真。 * 这两周要忙一下基地的事情。。。 ### 2023.10.20 * 比赛结束,这周把缺的课和作业补了一下,下周继续 ### 2023.10.27 * 说明:首先点击初始设置(也可以不进行初始设值,则按照默认值进行),设置完成后点击开始绘制,当无人机开始盘旋后点击设置终点按钮,此时可以在左侧中点击希望设置的位置,设置终点后点击开始仿真。 * 安装了PX4-Autopilot 1.13.3,准备学习一下PX4 ### 2023.11.9 * copy了官方开源的起飞控制代码,大概看了一下控制的逻辑,了解了一下需要发布和接受哪些信息以及对应节点 ### 2023.11.10 * 找了几个教程,凑出来一份键盘控制飞行的代码,基本完成了基础控制的学习。 ### 2023.11.15-11.16 * 学习了一下gazebo,搭建模型用的是inkscape画SVG图转三维图 ### 2023.11.17 * 给无人机添加了前摄,初步实现圈的检测,效果如下: ![circle_detected](PX4_learning/image/circle_detected.png) * 下周写控制代码 ### 2023.11.22-23 * 初步完成钻圈控制,实现过程中发现直接给位置误差比较大,所以改为使用pd控制速度(pid控制会产生积分饱和,所以没有用积分项),效果如下: ![circle_track](PX4_learning/image/track.gif) ### 2023.11.24 * 改为增量pid控制,加入i后确实更准了,效果如下: ![circle_track_2](PX4_learning/image/track_2.gif) ### 2023.11.29-30 * 初步实现钻多个圈,但不是很稳定,效果如下: ![multi_track](PX4_learning/image/multi_track.gif) ### 2023.12.1 * 看了一下gmapping,下周准备看一下雷达的使用 ### 2023.12.6 * 将状态机写成了MissionControl类 * 学习了一下gmapping的原理 ### 2023.12.7-12.8 * 初步实现了gmapping建图,在gazebo中搭建了一个简单地图,借助之前写的键盘控制建了一个图。(发现当无人机移动产生偏转时会使雷达倾斜导致建图效果差,这和地面机器人不太一样) * 效果如下: ![gmapping_1](PX4_learning/image/gmapping_1.png) ![gmapping_2](PX4_learning/image/gmapping_2.png) * 建好的图存在mapping包里的map文件夹中,启动建图: roslaunch mag mapping_demo.launch * 关于自主导航和建图,还在学习,准备下周实现 ### 2023.12.13-12.14 * 上周写的tf变换有点问题,laser和base_link没有连接起来,导致有时候会scan话题会断开,修改后tf树如下: ![tf](PX4_learning/image/tf.png) * 通过amcl实现定位,通过DWA算法实现路径规划 * 效果如下: ![planning](PX4_learning/image/planning.png) * 接下来就是把move_base输出的速度转化为无人机速度,这一步我目前写的有点问题 ### 2023.12.15 * 在gitee上找了一个基于realsense的rtabmap视觉建图,准备后续再认真看看 ![rtabmap](PX4_learning/image/vision_slam.png) ### 2023.12.22 * 最近要复习期末考试,考完再继续学习 ### 2023.3.1 * 学习slam14讲的前5章 ### 2023.3.8 * 继续学习slam14讲第6,7章 ### 2023.3.15 * 学习了一些前段的知识 * 在基地找到了一个realeanseD435,结合最近的学习有一个想法,能否根据深度的测算和对相机姿态的估算得到一个物品的世界坐标给机械臂一个较为精确的点从而实现机械臂的自主抓取 ### 2023.3.21 * 学习了一些后端的知识,没太看明白 * 用realeanse的库实现了相机坐标系下的三维点坐标计算,但不是很准。。。 ### 2023.3.29 * 学习了后端的位姿图优化 * 用realsense在ros中搭了一个前段VO用于估计相机姿态,下一步准备结合机械臂手眼标定给出相对基坐标系的三维点坐标 ### 2023.4.5 * 本周清明放假回家,只在放假前借助原先的代码做了一下人机接口的作业 ## 建议 ### 2024-04-13 * 继续把SLAM的基础学完 * 考虑如何把学到东西组装成一个VO,然后在仿真环境里面运行,看看效果 ### 2024-04-06 * 做的挺好的,这个功能蛮有意思的 * 继续往前推进,学习如何结合机械臂、无人机、视觉、优化等 ### 2024-03-30 * 进展很好,平衡好自己的课程学习和编程练习 * 挺好的,把机械臂,目标定位等结合好 ### 2024-03-24 * 优化需要花一些时间和精力去学习 * 计算出来之后,可以考虑利用BA类似的方法优化一下;或者是不是程序里面有隐藏比较深的bug,可以考虑如何找到这种计算程序的bug ### 2024-03-16 * 做的挺好的,把学到的视觉应用到实际场景,这样能明确知道如何去学 * 有时间继续把视觉SLAM的基础学好 ### 2024-03-09 * 做的挺好的,继续学习SLAM的基本理论、方法、技巧等 ### 2024-03-02 * 继续学习SLAM,并完成SLAM的模块、代码编写 ### 2023-12-23 * 安排好自己的时间,好好复习各个科目 ### 2023-12-16 * 继续完善自己的程序,做出来的效果挺好的 * 可以先学一下rtabmap,了解一下视觉SLAM * 之后可以考虑学习SLAM十四讲,学习基础理论 ### 2023-12-09 * 做的很好! * 除了gmapping,可以尝试使用视觉SLAM,看看效果如何 * 或者学习导航,建图,规划等整个流程 ### 2023-12-02 * 做的很好! * 你目前的程序是写在main函数里面,可以考虑把钻圈的状态机写成一个类,这样方便拓展成其他的任务,或者让多个无人机完成任务 * 按照你的思路去尝试gmapping等方法 ### 2023-11-25 * 做的非常好! * 控制流程做出来了,有时间可以考虑如下的点: * 如何优化状态机,检测等,能够更通用,例如如何实现多架飞机依次穿过圆环、方框,或者一个飞机连续穿过多个圆环、方框。。。 * 能否实现SLAM,把检测到的圆环、方框的位置,环境地图构建出来,让其他无人机更快速的规划路线,从而更快的穿越圆环 * 如果感兴趣,可以考虑学习强化学习,用机器学习的方式实现控制 * 多个无人机如何协调完成任务,使用ROS2中的FastDDS等实现多机的通信、协同控制。。。 * 根据自己的课程、时间、精力,合理安排进度 ### 2023-11-18 * 做的很好! * 先把无人机自主钻圈的控制实现出来 * 之后可以考虑如何优化控制策略、方法,能够更通用。。。 ### 2023-11-11 * 做的挺好的!继续学习相关的知识 * 同步学习Gazebo,能够在仿真环境实现基本的无人机控制,然后练习无人机的视觉引导降落或者钻圈。。。 * 也可以考虑如何仿真多架飞机,并进行控制 ### 2023-11-04 * 好的,有时间可以学习PX4,能够使用ROS,或者MAVLINK控制飞机飞行 * 考虑Gazebo或者Airsim等仿真,然后实现SLAM和自主飞行 ### 2023-09-30 * 我这里还是出不来你的效果 * 可以先忙基地的事情 ### 2023-09-16 * 做的很好! * 不过你的程序我始终不知道怎么操作,能否在项目目录里的README.md文件,简要写一下使用方法 * 初始设置里面,能否每个都有一个默认值,真心不知道怎么设置这些值 * 每个按钮之间的点击顺序是?能否简化一下,用更少的按钮? * 有些设置能否直接就设置好默认值,不需要用户去设置,直接运行就可以。如果想改,再点击修改,或者在绘图区的右键相应里面增加修改起始点、终点等 * 有时间继续学习OpenCV,ROS等 ### 2023-09-09 * 改进的挺好的 * 有时间可以学习OpenCV,ROS等,用这些工具搭建更逼真的环境 ### 2023-09-02 * 可以先学一下PX4飞控的基础知识,实验室在老校区的翼型叶栅重点实验室,可以提前联系一下 * 可以继续完善一下无人机集群的程序,目前操作逻辑、效果都不是很好,你可以根据别人的程序,设计一下自己程序的目标 ### 2023-08-26 * 可以继续改进无人机集群程序,可以参考XTDrone,SwarmLab等程序,看看别人是如何设计的。。。 * 有兴趣学习一下ROS, SLAM, 尝试用Gazebo + ROS + PX4做仿真度更高的系统 * 如果有兴趣,可以来实验室,和实验室的师兄一起做真机实验 ### 2023-08-19 * 无人机集群的程序,操作比较困难,后续可以考虑如何改进交互 * 可以找一些其他的程序,例如xtdrone等,看看他们是如何设计、实现的,可能他们的程序过于复杂了,不过可以先借鉴学习他们的设计思路。。。 ### 2023-08-13 * 可以学习并使用Linux,在Linux下编译、运行程序 * 最好使用Qt5, Qt4用的越来越少了 * 先把集群的基本功能先实现出来,可以先用最简单的控制方法,后续考虑优化改进算法。。。 ### 2023-08-05 * 这个集群无人机编队控制的小项目挺好的。 * 有了上次的项目经验,可以在做的时候就考虑程序架构的设计,如何从面向对象,设计模式的角度去考虑程序结构的设计 https://gitee.com/pi-lab/learn_programming/tree/master/5_advanced/4_DesignPattern_UML ### 2023-07-29 * 目前你的能力基本上可以了,可以考虑用一个更大的项目牵引自己的学习,例如下面的可以选一个,或者自己想一个。 * 如何实时生成二维地图 https://gitee.com/pi-lab/Map2DFusion * https://gitee.com/pi-lab/learn_programming/blob/master/4_projects/README.md 这里列的没有做的项目,例如集群无人机编队控制。。。 * 或者你们竞赛的项目。。。 * 如果计算机基础不是特别好,可以同步学习一下计算机基础知识 https://gitee.com/pi-lab/learn_programming/blob/master/8_other/README.md ### 2023-07-22 * 如果是识别文字,可以实时比较鲁棒的文字识别的方法;后者自己把图像转换成黑白图,然后用YOLO训练,规避颜色产生的问题 * 如果是文字识别,应该能检测出正方向 * 可以通过SLAM十四讲里面的例子等牵引学习ceres,g2o的学习,这样效率比较高;或者想想结合你们比赛里面需要解决的问题,看看图优化能否用上 ### 2023-07-16 * 进度挺快的,继续学习相关的知识 * 算法可以一直练习,这个能力对于科研、找工作都挺重要的 * CMake用的挺好的,不过有些库,可以使用系统的,例如:`set(OpenCV_DIR “~/home/gyx/opencv-4.2.0/build”)#set opencv` 最好用系统的 ### 2023-07-07 * 考试完成,继续练习 ### 2023-06-18 * 安排好时间,先复习考试,后续继续 ### 2023-06-10 * 继续练习LeetCode算法 * 可以专门练习一下树(二叉树、红黑树的算法。。。),图的算法。。。 * 可以学习视觉 https://gitee.com/pi-lab/learn_slam , ROS https://gitee.com/pi-lab/learn_ros ### 2023-06-03 * 做的很好,Stage4基本上可以了 * 后续可以练习LeetCode的算法 * 可以继续学习 https://gitee.com/pi-lab/learn_programming 里面的 Stage5, Stage6, Stage 7, Stage 8 ### 2023-05-27 * 模拟小车的程序基本算是可以了。不过仍有改进的空间: * 程序里的变量有些重复,可以精简 * 格式、命名等可以再想想 * 是否可以用CMake来控制编译 ### 2023-05-20 * 改进的挺好的 * 后续可以考虑,如何让transmission更通用,使用模版就不需要每种类型都定义一遍 * transmission的使用可以设计的更好 ### 2023-05-13 * 第二版本比之前的要好一些,不过仍有改进的空间 * 仔细思考这个项目的核心要求是什么?仿真、控制、显示最好是独立的,通过这套仿真程序开发的无人车控制程序最好不做任何修改就能移植到真的无人车上。因此仿真、控制、显示这这个组件最好都是独立的,不相互耦合 * 仿真程序拿到无人车位置,生成模拟的相机拍摄的图像 * 控制程序拿到仿真的图像,然后进行无人车控制指令生成,更新无人车的状态 * 显示程序,将仿真与控制整合,通过GUI呈现出来 * 如何不使用全局变量实现各个模块的通信? * 想想如何更好的构建整个程序架构,各个类的所属关系。。。 * 关于仿真和控制程序的解耦,可以借鉴学习ROS的方式,或者 https://gitee.com/pi-lab/Svar-allinone/tree/master/svar_messenger ### 2023-05-06 * 虽然基本功能实现了,但是程序非常不正规,可以保留当前版本,在一个新版本里面(例如`line_track_v2`)进行代码重构 * 关于编程规范可以参考 https://gitee.com/pi-lab/learn_programming/tree/master/5_advanced/programming_standard * 关于代码重构可以参考 https://gitee.com/pi-lab/learn_programming/blob/master/5_advanced/README.md * 关于大创可以考虑 https://gitee.com/pi-lab/research_air_gound_collaboration , 或者集群无人机探索建图 ### 2023-04-29 * 你现在的程序基本功能实现出来了,可以考虑更好的优化代码,让各个模块的功能比较清晰 * 摄像头模拟的部分,仅仅根据位置、角度,模拟采集的图像就可以了 * 写一个小车控制的类,拿到图像解析图像内容,生成控制指令给car类实现真个的闭环控制 ### 2023-04-22 * 这个程序可以直接截取绘制的图像模拟采集到的图像,没有太大的必要使用OpenCV * 关于模糊,应该是你的采集分辨率不高,这个先用低分辨率的把功能实现出来,去雾不是这个项目的关键点 * 先把主体的功能实现完,然后考虑代码的优化。。。 ### 2023-04-15 * 关于摄像头,可以采用类似截屏软件的方式,截取窗口上给定一个区域的图像。也就是做一个假设摄像头垂直于地面,拍摄的画面是矩形。需要考虑旋转,可以使用旋转矩阵算出矩形的4个顶点,然后再获取拿到矩形内的每个像素的颜色值 * 其他的修改见我的批注,可以先把整个程序实现完成,再考虑优化代码