案例分享:Qt+iMx6生命探测仪(探测障碍物、静止目标、动态目标、生命目标、探测半径、探测前方雷达显示、动态目标轨迹显示、探测热力图、探测过程存储与回放)

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110994486
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

合作案例专栏:案例分享(体验Demo可下载,只定制)


需求

  生命探测仪
  1. 扫描雷达状态显示:正在扫描 or 扫描停止;
  2. 显示扫描雷达的灵敏度;
  3. 探测过程中的数据文件保存(用于跟踪和后期回放)
  4. 探测仪连接app的终端的状态显示;
  5. 电池电量显示;
  6. 多语言切换,中文/英文;
  7. 探测目标二维成图显示界面,包括生命体、静止目标、动态目标;
  8. 显示or隐藏动态目标的移动轨迹;
  9. 雷达探测过程中实时现实探测的前方障碍物物体等,同时转换为一维火山图显示;
  10. 前方探测距离的、方位范围‘、灵敏度设置;
  11. 探测文件实时保存;
  12. 探测文件的探测过程回放;


Demo

  在这里插入图片描述
  在这里插入图片描述


硬件

  在这里插入图片描述

  在这里插入图片描述
  在这里插入图片描述


Demo头文件代码

RadarScanWidget.h

#ifndef RADARSCANWIDGET_H
#define RADARSCANWIDGET_H

#include <QWidget>
#include <QElapsedTimer>
#include <QPixmap>
#include <QTimer>

namespace Ui {
class RadarScanWidget;
}

class RadarScanWidget : public QWidget
{
    Q_OBJECT
public:
    enum COORDINATE_HORIZAL{
        COORDINATE_HORIZAL_4 = 0x00,
        COORDINATE_HORIZAL_6 = 0x01,
        COORDINATE_HORIZAL_8 = 0x02,
    };
    enum COORDINATE_VERTICAL{
        COORDINATE_VERTICAL_10 = 0x00,
        COORDINATE_VERTICAL_20 = 0x01,
        COORDINATE_VERTICAL_30 = 0x02,
    };

public:
    explicit RadarScanWidget(QWidget *parent = 0);
    ~RadarScanWidget();

public:
    inline bool hasMoveTarget() { return _listListPointFForMove.size() > 15; }
    void setShowMoveLineMoreThanLimitPoints(int showMoveLineMoreThanLimitPoints);

signals:
    void signalStaticTargetNumber(int number);

public slots:
    void startScanning();
    void stopScanning();
    void setHorizalCoordinate(COORDINATE_HORIZAL c);
    void setVerticalCoordinate(COORDINATE_VERTICAL c);
    void setShowPath(bool showPath);
    void recvTargetPointF(QList<QPointF> listPointF, bool isStatic);
    void recvMatrixUChar(int frameIndex, QList<uchar> listUChar);
    void clearAllData();


protected slots:
    void timeout();

protected:
    void paintEvent(QPaintEvent *event);
    void timerEvent(QTimerEvent *event);

protected:
    void drawBackground(QPainter &painter);
    void drawChartBackground(QPainter &painter);
    void drawChart(QPainter &painter);
    void drawArc(QPainter &painter);
    void drawPointData(QPainter &painter);
    void drawWallData(QPainter &painter);

protected:
    QPointF judgetStaticDistanceLessThanDistance(QPointF p1, QPointF p2, qreal distance, bool *ok = 0);
    bool judgetMoveDistanceLessThanDistance(QPointF p1, QPointF p2, qreal distance);

private:
    Ui::RadarScanWidget *ui;
    int _offsetX;
    int _offsetY;
    int _stepsX;
    int _stepsY;
    int _rangleXMin;
    int _rangleXMax;
    int _rangleYMin;
    int _rangleYMax;
    int _width;
    int _height;
    QColor _backgroundColor;
    QColor _backgroundChartColor;
    QColor _lineColor;
    QColor _color;
    QColor _pointColor;
    QStringList _strListVericalLocaltion;
    QStringList _strListHorizalLocaltion;
    int _offsetHorizalTextX;
    int _offsetHorizalTextY;
    int _offsetVerticalTextX;
    int _offsetVerticalTextY;
    int _originX;
    int _originY;
    bool _isScanning;
    COORDINATE_HORIZAL _cooradinateHorizal;
    COORDINATE_VERTICAL _cooradinateVertical;
    int _indexOfArc;
    int _timerId;
    int _interval;
    QList<QList<QPointF> > _listListPointFForMove;
    QList<QList<QPointF> > _listListPointFForMoveLine;
    QList<QList<QPointF> > _listListPointFForStatic;
    QList<QList<uchar> > _listListUCharForMaxtric;
    QList<QPointF> _listPointFForStatic;
    bool _showPath;
    QElapsedTimer _elapsedTimerForMove;
    QElapsedTimer _elapsedTimerForStatic;
    int _intervalTime;
    QPixmap _pixmap;
    QList<QPixmap> _listPixmapForMove;
    QList<QPixmap> _listPixmapForStatic;
    QList<int> _listCount;
    QTimer *_pTimer;
    int _staticCircleR;
    QList<int> _listStaticTime;
    int _staticsStaticTargetTime;
    int _showMoveLineMoreThanLimitPoints;
};
#endif // RADARSCANWIDGET_H

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110994486

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值