0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于OpenHarmony的智慧牧场方案:生物运动轨迹跟踪篇

电子发烧友开源社区 来源:未知 2022-11-25 09:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前文回顾

《智慧牧场之生物姿态检测篇》

《智慧牧场之生物心率检测篇》

1. 背景知识

1.1牧场定位的意义

在智慧牧场解决方案中,实时检测牲畜的活动状况是非常重要的环节。现在已经不是放牛和牧羊犬的时代了。面临大范围牧场上牲畜走失,寻找困难,过度放牧导致草场退化等问题,通过穿戴式的生物跟踪部件,可以有效解决以上的问题。

当大量牲畜散布在地面上时,牧场管理员往往发现很难跟踪正在发生的事情。需要一个系统来确定牲畜在任何给定时间的位置和行驶的距离。此外,跟踪系统也会防止任何类型的盗窃,因为牧场管理员可以使用跟踪报告来定位被盗牲畜。

1.2室外定位技术比较

目前的室外定位技术,大体上分为如下几种类别:

信号载体 典型定位方式 定位精度 不足
北斗/GPS卫星民用领域 3个观测方程式求解位置 10米级 遮挡影响较大
蜂窝移动网络GSM 基于TC-OFODM信号进行测距定位 100米级 对基站依赖程度较高
5G 超密集组网下的定位技术/面向5C的TDOA和AOA定位技术、面向5G网络上行定位和下行定位 100米级 抗干扰有局限性
惯性导航 基于航位推算方法 米级 存在累计漂移误差
地球磁场 基于信号场强定位或与其他技术组合应用 米级 地球指纹特征差异小

基于GPS和GSM的定位在全世界被广泛使用,可以用来确定其所连接生物的精确位置。这种器件成本低、可靠性高,并具有精确跟踪功能。可以提供有效、实时的物体、生物的位置报告和时间信息。

2. 解决方案概要

该方案采用基于全球移动通信系统(GSM)技术和GPS技术的嵌入式系统。该系统安装在生物穿戴设备中。接口GSM模块连接到Hi3861。该系统提供以下功能:a)位置信息,b)使用短信进行实时跟踪。

3127f17a-6c5d-11ed-8abf-dac502259ad0.jpg

3. 硬件设计

3.1SIM808模块调制解调器模块

3150e2c4-6c5d-11ed-8abf-dac502259ad0.png

可以选用GSM、GPRS、GPS三合一功能的SIM808模块。支持GSM/GPRS Quad-Band网络,结合GPS技术进行卫星导航。它具有睡眠模式下的超低功耗,并集成了锂离子电池充电电路,使其具有超长的待机时间,方便使用可充电锂离子电池的项目。它具有高 GPS 接收灵敏度,具有 22 个跟踪和 66 个采集接收器通道。模块通过 UART(编者注:Universal Asynchronous Receiver/Transmitter 通用异步接收器/发送器的英文缩写) 由 AT 指令控制,支持 3.3V 和 5V 逻辑电平。

GSM调制解调器的工作基于命令,命令始终以“AT开头”(表示注意),以“<CR>字符结束”,例如拨号命令是ATD<number>;ATD7814629081;这里,拨号命令以分号(;)结束。在Hi3861的帮助下,该AT命令被提供给GSM调制解调器。GSM调制解调器在MAX 232 IC的帮助下与微控制器串行连接。GSM指定的频率范围为1850到1990 MHz(移动台到基站)。

3.2 Hi3861

Hi3861开发板模组大小约2cm*5cm,是一款高度集成的2.4GHz WLAN SoC。

Hi3861芯片集成高性能32bit微处理器、拥有丰富的外设接口,芯片内置SRAM(编者注:Static Random-Access Memory 静态随机存取存储器的英文缩写)和Flash,并支持在Flash上运行程序。

Hi3861模组有2MB FLASH,352KB RAM。但我们编写代码时,要注意对有限资源的合理利用。

Hi3861可以说是麻雀虽小,五脏俱全。Hi3861的外设接口包括(外部主晶振为40M或者24M):

  • 2个SPI(Synchronous Peripheral Interface)

  • 3个UART(Universal Asynchronous Receiver & Transmitter)

  • 2个I2C(The Inter-Integrated Circuit)

  • 6路PWM(Pulse Width Modulation)

  • 15个GPIO(General Purpose Input/Output)

  • 7路ADC(Analog to Digital Converter)

  • 1个I2S接口

  • 1个高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;

31deb02c-6c5d-11ed-8abf-dac502259ad0.jpg

Hi3861主控功能框架图如下:

3202e604-6c5d-11ed-8abf-dac502259ad0.jpg

在该系统中,它用于同步GSM和GPS的操作。GPS连续向微控制器发送位置数据,即车辆位置的纬度和经度,而GSM从微控制器发送和接收数据。GPS调制解调器连续提供许多参数作为输出,但只有NMEA(编者注:National Marine Electronics Association国家海洋电子协会的英文缩写)数据被读取并“显示在OLED上”。将相同的数据发送给移动用户,以便可以知道车辆的确切位置。用户的移动号码存储在EEPROM(编者注:Electrically Erasable Programmable read only memory 带电可擦可编程只读存储器 的英文缩写)中。

4. 软件设计

软件编程是用C语言完成的。GPS从卫星接收的数据(坐标)在软件中定义。解码NMEA(国家海洋电子协会)协议是开发该软件的主要目的。软件程序中应包含用户的手机号码,以便从我们在GSM调制解调器中使用的SIM卡接收位置值。NMEA协议由一组ASCII字符集的消息组成。GPS接收数据并以ASCII逗号分隔的消息字符串的形式显示。$'在每条消息的开头使用符号。位置(纬度和经度)的格式为ddmm。mmmm(度数分钟和十进制分钟)。软件协议由GGA(编者注:Global Positioning System Fix Data 全球定位系统固定数据)和GLL(编者注:Geographic Position 地理位置-纬度/经度)组成。但在这个系统中,我们只使用GGA。系统流程图如下所示:

321752e2-6c5d-11ed-8abf-dac502259ad0.png

具体代码实现:

/***** 获取电压值函数 *****/
static float GetVoltage(void)
{
    unsigned int ret;
    unsigned short data;


    ret = AdcRead(WIFI_IOT_ADC_CHANNEL_5, &data, WIFI_IOT_ADC_EQU_MODEL_8, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
    if (ret != WIFI_IOT_SUCCESS)
    {
        printf("ADC Read Fail
");
    }


    return (float)data * 1.8 * 4 / 4096.0;
}


/* input:AT+CGNSINF Command Response
* output:struct GGPS_DATA
*/
static void GPS_CGNSINF_Analyze(char *origin, GGPS_DATA *gpsdata)
{
    int counter = 0;
    char tmp[150] = {0};
    char *lptr = NULL;
    char *localptr = NULL;


    lptr = (char *)strstr(origin, "+CGNSINF");
    if (lptr == NULL)
    {
        return;
    } else {
        lptr += 10;
    }

    while (*lptr != '')
    {
        if (*lptr == ',' && *(lptr + 1) == ',')
        {
            tmp[counter] = *lptr;
            counter++;
            tmp[counter] = '0';
        } else if (*lptr == '
' && *(lptr + 1) == '
' && counter < 148)
        {
            tmp[counter] = '0';
            tmp[counter + 1] = ',';
            tmp[counter + 2] = 0;
            break;
        } else {
            tmp[counter] = *lptr;
        }
        lptr++;
        counter++;


        /* avoid array out of range */
        if (counter >= GNSINF_MSG_MAX_LEN){
            return;
        }


    }
    /* Clear struct data */
    memset(gpsdata, 0, sizeof( GGPS_DATA));


    localptr = (char *)strtok(tmp, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->GNSSrunstatus, localptr, sizeof(gpsdata->GNSSrunstatus));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->Fixstatus, localptr, sizeof(gpsdata->Fixstatus));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->UTCdatetime, localptr, sizeof(gpsdata->UTCdatetime));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->latitude, localptr, sizeof(gpsdata->latitude));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->logitude, localptr, sizeof(gpsdata->logitude));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->altitude, localptr, sizeof(gpsdata->altitude));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->speedOTG, localptr, sizeof(gpsdata->speedOTG));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->course, localptr, sizeof(gpsdata->course));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->fixmode, localptr, sizeof(gpsdata->fixmode));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->Reserved1, localptr, sizeof(gpsdata->Reserved1));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->HDOP, localptr, sizeof(gpsdata->HDOP));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->PDOP, localptr, sizeof(gpsdata->PDOP));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->VDOP, localptr, sizeof(gpsdata->VDOP));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->Reserved2, localptr, sizeof(gpsdata->Reserved2));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->satellitesinview, localptr, sizeof(gpsdata->satellitesinview));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->GNSSsatellitesused, localptr, sizeof(gpsdata->GNSSrunstatus));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->GLONASSsatellitesused, localptr, sizeof(gpsdata->GLONASSsatellitesused));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->Reserved3, localptr, sizeof(gpsdata->Reserved3));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->CN0max, localptr, sizeof(gpsdata->CN0max));


    localptr = (char *)strtok(NULL, ",");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->HPA, localptr, sizeof(gpsdata->HPA));


    localptr = (char *)strtok(NULL, "
");
    if (localptr == NULL)
    {
        return;
    }
    strncpy(gpsdata->VPA, localptr, sizeof(gpsdata->VPA));
}


static void GsmCheckRingAndHanupMessage(void)
{
    if (strstr(g_uart_buff, "RING") != NULL)
    {
        printf("ring.
");
        if (GsmGetConnectSts() == false)
        {
            GsmSetRingSts(true);
        }
    }
    if (strstr(g_uart_buff, "NO CARRIER") != NULL)
    {
        printf("hang up.
");


        GsmSetHungUpSts(true);


        if (GsmGetConnectSts() == true)
        {
            GsmSetConnectSts(false);
        }
    }
}


static uint32_t GsmSendCmd(char *cmd, int len)
{
    if (cmd == NULL || len <= 0)
    {
        return HI_ERR_FAILURE;
    }


    uint32_t ret = HI_ERR_FAILURE;
    static uint32_t count = 0;
    uint8_t *uart_buff_ptr = g_uart_buff;


    ret = hi_uart_write(DEMO_UART_NUM, (hi_u8 *)cmd, len);
    if (ret == HI_ERR_FAILURE)
    {
        return HI_ERR_FAILURE;
    }
    printf(" SendData%d,cmd:%s.
", len, cmd);


    while (g_uartController.isReadBusy)
    {
        count++;
        if (count > UART_WAIT_COUNT_MAX)
        {
            break;
        }


    }


    if (g_uartController.isReadBusy)
    {
        printf("GsmSendCmd hi_uart_read busy return");
        return HI_ERR_FAILURE;
    }
    if (!g_uartController.isReadBusy){
        usleep(100000); /* sleep 100ms */
    }


    g_uartController.isReadBusy = true;
    g_ReceivedDatalen = hi_uart_read(DEMO_UART_NUM, uart_buff_ptr, UART_BUFF_SIZE);


    if (g_ReceivedDatalen > 0)
    {
        printf(" rcvData len:%d,msg:%s.
", g_ReceivedDatalen, g_uart_buff);
        if (strstr(g_uart_buff, "OK") != NULL)
        {
            GsmCheckRingAndHanupMessage();
            memset(g_uart_buff, 0, sizeof(g_uart_buff));
            g_ReceivedDatalen = 0;
            g_uartController.isReadBusy = false;
            return HI_ERR_SUCCESS;
        }
        else
        {
            printf(" received error cmd
");
            GsmCheckRingAndHanupMessage();
            memset(g_uart_buff, 0, sizeof(g_uart_buff));
            g_ReceivedDatalen = 0;
            g_uartController.isReadBusy = false;
            return HI_ERR_FAILURE;
        }
    }
    else
    {
        g_uartController.isReadBusy = false;
        printf(" SendCmd no cmd return!
");
        return HI_ERR_FAILURE;
    }


    return HI_ERR_SUCCESS;
}




uint32_t GpsGetLocation(GGPS_INFO *gpsInfo)
{
    uint32_t ret = HI_ERR_FAILURE;
    static uint32_t count = 0;
    uint8_t *uart_buff_ptr = g_uart_buff;


    ret = hi_uart_write(DEMO_UART_NUM, (hi_u8 *)"AT+CGNSINF
", strlen("AT+CGNSINF
"));
    if (ret == HI_ERR_FAILURE)
    {
        return NULL;
    }


    while (g_uartController.isReadBusy)
    {
        count++;
        if (count > UART_WAIT_COUNT_MAX)
        {
            break;
        }
        usleep(100000); /* sleep 100ms */
    }


    if (g_uartController.isReadBusy)
    {
        printf("GpsGetLocation hi_uart_read busy return");
        return HI_ERR_FAILURE;
    }else{
        usleep(100000); /* sleep 100ms */
    }


    g_uartController.isReadBusy = true;
    g_ReceivedDatalen = hi_uart_read(DEMO_UART_NUM, uart_buff_ptr, UART_BUFF_SIZE);


    if (g_ReceivedDatalen > 0)
    {
        printf(" rcvData len:%d,msg:%s.
", g_ReceivedDatalen, g_uart_buff);


        uint8_t *strLocation = (uint8_t *)strstr(g_uart_buff, "+CGNSINF: 1,1");


        if (strLocation != NULL)
        {
            GGPS_DATA gpsData;
            GPS_CGNSINF_Analyze((char *)g_uart_buff, &gpsData);


            printf("latitude:%s.
", gpsData.latitude);
            printf("logitude:%s.
", gpsData.logitude);


            memcpy_s(gpsInfo->UTCdatetime, sizeof(gpsInfo->UTCdatetime), gpsData.UTCdatetime, sizeof(gpsData.UTCdatetime));
            memcpy_s(gpsInfo->logitude, sizeof(gpsInfo->logitude), gpsData.logitude, sizeof(gpsData.logitude));
            memcpy_s(gpsInfo->latitude, sizeof(gpsInfo->latitude), gpsData.latitude, sizeof(gpsData.latitude));
            memcpy_s(gpsInfo->satellitesinview, sizeof(gpsInfo->satellitesinview), gpsData.satellitesinview, sizeof(gpsData.satellitesinview));


            GsmCheckRingAndHanupMessage();


            memset(g_uart_buff, 0, sizeof(g_uart_buff));
            g_ReceivedDatalen = 0;
            g_uartController.isReadBusy = false;


            return HI_ERR_SUCCESS;
        } else {
            GsmCheckRingAndHanupMessage();
            memset(g_uart_buff, 0, sizeof(g_uart_buff));
            g_ReceivedDatalen = 0;
            g_uartController.isReadBusy = false;
            return HI_ERR_FAILURE;
        }
    } else {
        printf(" SendCmd no cmd return!
");
        g_uartController.isReadBusy = false;


        return HI_ERR_FAILURE;
    }
}


uint32_t GsmCallCellPhone(char *cellPhoneNumeber)
{
    uint32_t ret = HI_ERR_FAILURE;
    char sendCmd[32] = "";
    uint8_t cPhoneNumLength = strlen(cellPhoneNumeber);


    if (cPhoneNumLength < PHONE_NUMB_LEN)
    {
        return HI_ERR_FAILURE;
    }


    /* Send AT+CSQ. */
    strncpy(sendCmd, "AT+CSQ
", strlen("AT+CSQ
"));
    printf(" sendCmd=%s
", sendCmd);
    ret = GsmSendCmd(sendCmd, strlen(sendCmd));
    if (ret == HI_ERR_FAILURE)
    {
        return HI_ERR_FAILURE;
    }
    memset(sendCmd, 0, strlen(sendCmd));


    /* Call cellPhone Number:ATD+cellPhoneNumber. */
    snprintf(sendCmd, sizeof(sendCmd), "ATD%s;
", cellPhoneNumeber);
    printf(" sendCmd=%s
", sendCmd);
    ret = GsmSendCmd(sendCmd, strlen(sendCmd));
    if (ret == HI_ERR_FAILURE)
    {
        return HI_ERR_FAILURE;
    }


    return HI_ERR_SUCCESS;
}

32318676-6c5d-11ed-8abf-dac502259ad0.gif

未完待续……

后期预告《智慧牧场之室内管理系统篇》

更多热点文章阅读

  • 玩嗨OpenHarmony:基于OpenHarmony的智能助老服务机器人
  • 玩嗨OpenHarmony:基于OpenHarmony的智慧农业环境监控系统
  • 首个通过OpenHarmony兼容性测评的全场景实验箱
  • 基于OpenHarmony的智能门禁系统,让出行更便捷
  • OpenHarmony 3.2 Beta多媒体系列:音视频播放框架

提示:本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


原文标题:基于OpenHarmony的智慧牧场方案:生物运动轨迹跟踪篇

文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电子发烧友
    +关注

    关注

    33

    文章

    584

    浏览量

    33980
  • 开源社区
    +关注

    关注

    0

    文章

    95

    浏览量

    775

原文标题:基于OpenHarmony的智慧牧场方案:生物运动轨迹跟踪篇

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【道生物联TKB-623评估板试用】用一段视频简单介绍一下道生物联TKB-623评估板试用

    领域提供先进、有竞争力的窄带无线物联网接入技术和全套系统解决方案。 道生物联TKB-623评估板大功率 TK8620 模组评估板是为方便测试与评估 TKM-210 大功率模组性能和功能而设计的。可直接
    发表于 11-07 22:59

    【置顶公告】视美泰开源鸿蒙系列产品业务咨询与商务合作通道正式开启!

    设计。 生态解决方案整合智慧政务、智慧医疗、智慧园区、智慧教育、智慧安平、工业物联网等领域鸿蒙化
    发表于 10-20 16:23

    24G人在感应雷达和24G目标轨迹跟踪雷达的区别

    24G人体存在感知雷达模块和24G人体目标轨迹跟踪雷达模块都是人体感知雷达,那么在具体功能上和应用上面有什么差异呢?产品性能上的差异24G人体存在雷达功能定位:区分人体状态(静止/微动/运动)并输出
    的头像 发表于 08-19 12:01 1092次阅读
    24G人在感应雷达和24G目标<b class='flag-5'>轨迹</b><b class='flag-5'>跟踪</b>雷达的区别

    HDC.2025 润开鸿发布基于OpenHarmony智慧中医AI辅助诊疗解决方案

    ,江苏润和软件股份有限公司旗下子公司润开鸿数字科技有限公司(以下简称“润开鸿”)于本届大会上重磅发布基于OpenHarmony智慧中医AI辅助诊疗解决方案,展示了自身基于“OpenHarmo
    的头像 发表于 06-27 18:50 4015次阅读
    HDC.2025 润开鸿发布基于<b class='flag-5'>OpenHarmony</b>的<b class='flag-5'>智慧</b>中医AI辅助诊疗解决<b class='flag-5'>方案</b>

    Nordic下一代可穿戴设备和边缘人工智能改进运动表现分析

    入地了解运动表现和发挥改进潜力。 最新的表现跟踪解决方案借助了无线连接和边缘处理技术的强大功能,帮助用户实现这些目标并获得竞争优势。 结合数十个数据点,便可以建立个人能力的独特档案。各项运动
    发表于 05-12 11:24

    运动场馆智慧照明控制系统

    随着智能化技术的发展,运动场馆的照明系统正从传统的手动控制向智慧化、数字化方向转型。通过对照明系统进行升级,提升场馆运营效率,优化运动员与观众的体验,降低能源消耗。 运动场馆
    的头像 发表于 04-30 14:38 553次阅读

    基于智能穿戴的智慧校园运动健康解决方案NRF52832

    方案概述: 随着现代社会的发展,青少年学生面临着越来越多的学业压力和生活习惯不良的问题,对他们的身体健康和运动需求提出了更高的要求。物联网走进校园成为必然趋势,同时基于智能穿戴的智慧校园运动
    发表于 04-09 15:37

    船舶焊接自动化升级:激光焊缝跟踪传感器解决方案

    船舶的制造对焊接质量与效率的要求极高,传统焊接依赖人工调整或固定程序化机器人,难以应对工件装夹误差、装配偏差及复杂焊缝轨迹等难题,创想智控激光焊缝跟踪传感器凭借高精度实时焊缝跟踪技术,给船舶制造业
    的头像 发表于 03-10 15:05 596次阅读
    船舶焊接自动化升级:激光焊缝<b class='flag-5'>跟踪</b>传感器解决<b class='flag-5'>方案</b>

    创想智控激光焊缝跟踪系统智能引导焊接螺旋搅龙叶片的应用方案

    。今天一起了解创想智控激光焊缝跟踪系统智能引导焊接螺旋搅龙叶片的应用方案。 激光焊缝跟踪系统原理 创想智控的激光焊缝跟踪系统采用先进的视觉传感器和激光扫描技术,能够实时检测焊缝位置及其
    的头像 发表于 02-05 17:03 601次阅读
    创想智控激光焊缝<b class='flag-5'>跟踪</b>系统智能引导焊接螺旋搅龙叶片的应用<b class='flag-5'>方案</b>

    智慧园区人员定位及轨迹追踪技术哪个好?

    智慧园区作为城市发展的重要组成部分,其管理和服务效率的提升日益受到重视。人员定位及轨迹追踪技术作为智慧园区建设的核心环节之一,对于提高园区安全性、优化资源配置、提升服务体验具有重要意义。然而,传统
    的头像 发表于 01-22 11:18 879次阅读
    <b class='flag-5'>智慧</b>园区人员定位及<b class='flag-5'>轨迹</b>追踪技术哪个好?

    迅为RK3568开发板OpenHarmony实操HDF驱动控制LED-添加内核编译

    编译内核时将该 HDF 驱动编译到镜像中,接下来编写驱动编译脚本 Makefile,代码如下所示: 加入编译体系,填加模块目录到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多内容可以关注:迅为RK3568开发板OpenHa
    发表于 01-22 10:35

    24GHz轨迹跟踪雷达模组,可检测区域内人员位置、数量

    Rd-03D是一款24GHz单雷达,高性能24GHz一发两收微带天线的模组,能够探测指定区域内的多个目标并实时上报结果。精准感知人体及区域运动状态,搭载的智能算法实现运动轨迹识别与跟踪
    的头像 发表于 01-17 18:01 1058次阅读
    24GHz<b class='flag-5'>轨迹</b><b class='flag-5'>跟踪</b>雷达模组,可检测区域内人员位置、数量

    迅为RK3568开发板OpenHarmony配置HDF驱动控制LED-新增 topeet子系统

    目录 ├── led_driver.c:内核 LED HDF 驱动程序 └── Makefile:内核 LED HDF 驱动编译脚本 更多内容可以关注:迅为RK3568开发板OpenHarmony
    发表于 01-13 15:59

    运动控制中如何实现路径轨迹预测

    运动控制中,轨迹执行时间的预测对于多轴的协同、路径预处理等方面有着重要的作用。CODESYS系列控制器提供了预测轨迹执行时间功能块。要实现完整的预测功能,需要使用到以下的功能块
    的头像 发表于 01-05 11:04 1510次阅读
    <b class='flag-5'>运动</b>控制中如何实现路径<b class='flag-5'>轨迹</b>预测

    芯海科技系列OpenHarmony3.1芯片支持智慧生态构建

    随着OpenHarmony3.1的正式发布,芯海科技作为OpenHarmony生态的重要参与者,及时推出了两款与系统适配的新品:健康测量CS1262芯片和无线连接CST85F01模组,为智慧生态的构建贡献了芯海力量。
    的头像 发表于 12-17 17:25 899次阅读
    芯海科技系列<b class='flag-5'>OpenHarmony</b>3.1芯片支持<b class='flag-5'>智慧</b>生态构建