# Qt-Simulation **Repository Path**: Immortalqx/qt-simulation ## Basic Information - **Project Name**: Qt-Simulation - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-10 - **Last Updated**: 2021-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lidar Simulator This program demonstrates the whole process of using lidar to construct a map. ## Prerequisites We have tested in Ubuntu 18.04, but it should be easy to compile in other platforms. #### QT4 You can install qt4 in Ubuntu by: ```bash sudo apt-get install libqt4-dev libqt4-opengl-dev qtcreator ``` ## Compile: ```bash qmake-qt4 Simulation.pro make ``` ## Usage: you can run this program by: ```bash ./Simulation ``` **Keyboard:** - `up_arrow` - move forward - `down_arrow` - move backward - `left_arrow` - turn left - `right_arrow` - turn right **Mouse:** - `Right click` - remove obstacles - `Left click` - add obstacles ## Screenshot ![](./doc/testA.png) ![](./doc/testB.png) ![](./doc/testC.png) ## 建议 * 20210516: 车辆前进过程,激光雷达模拟的画面没有更新。是不是自主运动的功能还没有实现? * 可以参考一下 https://gitee.com/pi-lab/DynamicPathPlanning , 虽然这个程序也不是写的非常好,但是还是有一些借鉴价值。 * 具体的建议请参考代码里面的`FIXME`标注 ## 日志 - 20210704:这两天在忙相机标定,没花太多时间写代码,主要是在推导分离轴定理,尝试寻找了一些简化方案,但严格来说都不可以用。 目前master分支的代码还不能够编译。 - 20210705:今天时间比较多,把car类基本重构好了。 目前在考虑是先修改控制类的代码,跑起来看效果,还是先重构Translate类,把它重构成Lidar类。 - 20210707:上午重构了Simulator部分的代码,让它调用重构的RMap类,保持了之前的地图随机绘制、添加障碍物、删除障碍物等功能。目前可以编译了。 下午实现了Simulator中调用Car类,暂时还没有让GUI程序画出小车,小车的碰撞检测问题比较多。 - 20210711:前几天主要在学SLAM,没有重构代码。今天把碰撞检测的一部分问题给解决了,障碍物在小车坐标系上投影来进行碰撞检测的代码还有问题。 目前碰撞检测的效果看着还过的去,打算先重构其他的部分。 - 20210718:这几天在重构lidar类,但问题比较多,一个是之前对角度的描述不一样了,另外,地图统一成RMap类后,可以简化一些代码,但好像也引入的新的问题。 目前的代码能够通过编译,但不一定能运行起来,打算后续几天把lidar类里面的问题解决掉,再把car类写成单例模式,让lidar作为car的一个变量,这样看起来更合理。 > 可以先按你的理解把程序写完,然后想想如何优化仿真部分,可以等你写完了看看其他人的Lidar仿真如何实现 - 20210719:发现问题主要出在RMap类的调用上面,写RMap类的时候,addBlock和deleteBlock函数用的参数都是仿真环境中的坐标,而queryBlock用的参数却是矩阵中的行数和列数,之后别的类调用这几个函数时,我传入的都是行数列数,导致结果并不正确。另外还有一些别的小问题,比如行和列搞反、没有检测是否越界等。 目前代码可以编译,也可以运行起来了。后面几天如果基地的无人机没修好的话,应该时间还比较多,打算先把后面的部分重构好,之后再反过来优化碰撞检测、雷达建图等部分。 - 20210720:今天稍微调整了一下,把lidar作为car的一个变量了,然后给mapper类和viewer类添加了传参的函数。 - 20210722:还是简单的调整了一下,把Viewer类里面画图时处理小车转向的代码放到了Lidar类里面。其实Viewer和Mapper类并不是很需要调整,他们只需要接受传入的地图并且把它画出来。 之后的一些想法: - 取消保存日志的功能,考虑是取消保存地图的功能还是保留这个功能并增加一个加载地图的功能。 - 调整一些类名、变量名,整理一下函数、代码的结构 - 优化碰撞检测和雷达扫描的算法 - 优化建图的算法 - 尝试实现小车的自主运动 - 20210723:今天花了一个小时写了写,实现了几个简单的功能。(地图的保存和加载还差一点点,明天能完成) 考虑了一下雷达的算法,之前写的是小车往前移动一大格后才会刷新雷达扫描的结果,这就导致建图的时候重叠的很多。之后需要调整一下,只要小车移动了就应该刷新,雷达的模拟算法没问题了后面建图的问题才能解决。 - 20210724:稍微做了点,现在是每天抽点时间做做,最近学习PX4和Mavlink多一些。 - 20210725:改进了模拟激光雷达扫描的算法,改动比较小,但效果很显著。 但扫描和建图还是有一些小问题,比如接近障碍物的时候扫描不到,右、下边界无法绘制到地图中,这些问题会陆续修复。 > 做的很好!除了比较近的时候激光扫描不全,另外车身旋转的时候显示不全 - 20210727:检查了激光雷达扫描的算法,按理说是没有问题的,建图的算法也仅仅是根据小车的位置把激光扫描到的东西保存起来,感觉是因为浮点数运算有误差,对一些判定产生了影响,从而影响了最后的结果。今天主要就调整了其中的一点参数,弥补了一下运算误差。