导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    用 TFmini-Plus 实现人流、身高测量的方案

    激光雷达
    1
    1
    966
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • benewake
      benewake 最后由 xiaoqiang 编辑

      1. 人流身高测量仪说明
        本方案为利用北醒公司产品 TFmini-Plus 和 Arduino-UNO 板结合开发出的小设备。
        其作用为:统计人流数量以及相应目标身高高度。

      2. 试验设备及接线
        2.1 实验设备
        Benewake TFmini-Plus 标版
        替代文字
        TFmini-Plus 详细参数见 TFmini-Plus 使用说明。
        Arduino-UNO 板
        替代文字
        电脑
        替代文字
        电脑作为程序编写上传和数据显示功能。数据显示功能后期可进行升级优化,例如增加显示屏显示当前人流
        量和身高数据,用扬声器语音播报“欢迎光临”等问候语。
        连接线
        替代文字
        杜邦线——用于 Plus 与 UNO 板连接(Plus 端子可拆)
        USB 方口数据连接线——用于 UNO 板与电脑连接
        2.2接线
        替代文字
        TFmini Plus 产品线序定义为:红色+5V,黑色 GND,绿色 TX,白色 RX;TFmini-Plus 供电电压为 5V,所以
        直接连接 Arduino 板的 5V 和 GND 即可,其他雷达请查阅产品规格书,确保供电正常;
        串口通信连接需要注意,对于 Arduino UNO 板雷达的 TX 端接板子的 pin 2 口(软串口 Serial1 的 RX),雷达的 RX 端接板子的 pin 3 口(软串口 Serial1 的 TX),这个跟后文中的程序编写有关。

      3. 人流身高测量原理
        雷达启动后,设置安装高度、身高限度、下限值。
        当人进入探测区域时,数据会出现上升,输出人数,每出现此情况,人数加 1,输出人数。
        当人处于探测区域时,数据会在身高限定以上波动,此时比较赋值 Height,Height 为人在探测区域内数据波动的最大值。
        当人走出探测区域时,数据会出现下降,输出 Height。

      4. 程序框图
        替代文字

      5. 程序编写
        该例程功能的实现至少需要两个串口,一个接受雷达的数据,另一个用于将数据输出到电脑端显示出来。可以复
        制以下代码粘贴到 IDE 程序编辑窗口。
        #include<SoftwareSerial.h>//软串口头文件
        SoftwareSerial Serial1(2,3); //定义软串口名称为 Serial1,并把 pin2 定为 RX,pin3 定为 TX
        /对于有多个串口的 arduino 板如 DUE 板,注释掉上面两段代码,直接使用 Serial1 串口/
        int dist;//雷达实测距离值
        int strength;//雷达信号强度,强度在 100 以下数据不可信
        int IH=230;//雷达安装高度(需设置),需要根据实际黑色物体进行校正
        int H;//身高值
        int h=0;//上一次身高值
        int check;//校验数值存放
        int i;
        int Number=0;//人数
        int Height=0;//身高高度最大值
        int up=50;//身高限定(需设置),物体身高在此值以上才有效
        int down=40;//下限值(需设置),高度在下限值以下突破身高限度才会计数,防止高度处在恰好身高限度时导
        致数据波动,产生错误数据
        int uart[9];//存放雷达测量的数据
        const int HEADER=0x59;//数据包帧头
        void setup()
        {
        Serial.begin(115200);//设置 arduino 与电脑连接串口的波特率
        Serial1.begin(115200);//设置雷达与 arduino 连接串口的波特率
        }
        void loop()
        {
        if (Serial1.available())//查看串口是否有数据输入
        {
        if(Serial1.read()==HEADER)//判断数据包帧头 0x59
        {
        uart[0]=HEADER;
        if(Serial1.read()==HEADER)//判断数据包帧头 0x59
        {
        uart[1]=HEADER;
        for(i=2;i<9;i++)//存储数据到数组
        {
        uart=Serial1.read();
        }
        check=uart[0]+uart[1]+uart[2]+uart[3]+uart[4]+uart[5]+uart[6]+uart[7];
        if(uart[8]==(check&0xff))//按照协议对收到的数据进行校验
        {
        dist=uart[2]+uart[3]*256;//计算距离值
        strength=uart[4]+uart[5]*256;//计算信号强度值
        H=IH-dist;//计算身高值
        /测量人数/
        /原理:当数据从下限值突破身高限定值则人数加 1/
        if(H>=up&h<down)//当人进入测量区域,人数加一
        {
        Number=Number+1;
        h=H;
        Height=H;
        Serial.print("Number = ");
        Serial.print(Number);//输出数量值
        Serial.print(‘\t’);
        }
        if(H>=up&h>=down)//当人处于测量区域内,通过比较得出此期间的最大值
        {
        if(Height<H)
        {
        Height=H;
        }
        }
        if(H<down&h>=up)//当人走出测量区域,输出身高最大值,同时将最大值重新置零
        {
        Serial.print("Height = ");
        Serial.print(Height);//输出身高值
        Serial.print(‘\n’);
        h=H;
        Height=0;
        }
        // Serial.print("H = ");
        // Serial.print(H);//输出身高值
        // Serial.print(‘\t’);
        // Serial.print("dist = ");
        // Serial.print(dist);//输出雷达测试距离值
        // Serial.print(‘\t’);
        // Serial.print("strength = ");
        // Serial.print(strength);//输出信号强度值
        // Serial.print(‘\n’);
        }
        }
        }
        }
        }

      6. 数据查看
        将程序上传到 Arduino 板,打开串口监视器,即可看到雷达实时探测的人流数量和相应目标的身高高度,如图:
        替代文字

      7. 注意事项
        安装高度需要根据实际黑色物体进行校正,因为不同颜色物体反射率不同雷达接收的信号不同。
        当多人并走时,雷达光斑只能打到一个物体,只能计数加 1,适用单人出入的场景。
        如果光斑未完全打到头顶,身高数据会出错。考虑人行走时身高会浮动,尽量让脚落在光斑左右,探测到最高值,减小误差。
        缓冲区域为“身高限定-下限值”,避免探测高度恰好在“身高限定”的物体时,数据波动产生重复人数加 1的情况。

      1 条回复 最后回复 回复 引用 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2015-2023 BlueWhale community