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

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

3天内不再提示

基于rt-smart实现扫描雷达

RTThread物联网操作系统 来源:RTThread物联网操作系统 作者:ledoen 2022-07-19 17:48 次阅读

一、功能描述

使用控制舵机带动超声波测距模块转动,同时进行测距,完成对0-180°范围内的障碍检测

使用到了PWM模块、GPT模块和ENET模块

硬件

  • imx6ul开发板

  • 舵机

  • 超声波测距模块

  • 网口

软件

  • 下位机基于rt-smart实现

  • 控制舵机转动

  • 控制测距模块进行测距

  • 使用UDP协议和上位机进行通讯

  • 上位机程序

  • 向下位机发送指令,控制设备运行和停止

  • 接收扫描数据

  • 以雷达图的形式展示扫描结果

二、功能实现

2.1 舵机控制

舵机控制只使用到了PWM模块,代码上使用一个循环,实现舵机从0-180°的往复运动。

 1voidpwm3_rotor_entry(void*parameter)
 2{
 3angle=1500;
 4int16_tincrease=SCAN_STEP;
 5while(1)
 6{
 7if(myapp_isrunning)
 8{
 9rotor_set_angle(angle);
10if(angle==500)
11{
12increase=SCAN_STEP;
13}
14elseif(angle==2500)
15{
16increase=-SCAN_STEP;
17}
18angle+=increase;
19}
20else
21{
22rt_thread_mdelay(150);
23rotor_set_angle(1500);
24}
25rt_thread_mdelay(SCAN_PERIOD);
26}
27}

2.2超声波测距模块

需要使用PWM模块和GPT模块配合控制,PWM模块用于产生10us的启动脉冲,GPT模块用于接收超声波模块返回的echo信号,具体的实现在上一篇文章进行了描述。

2.3UDP通信

下位机和上位机采用服务器/客户端的方式进行通信,下位机作为服务器,上位机作为客户端

数据包分为两种,一种为指令包,上位机发给下位机;一种为数据包,下位机发给上位机。下位机在接收到开始指令后,启动扫描,并开始向上位机发送扫描数据,接收到停止指令时,停止扫描,并停止数据发送。

下位机使用UDP server的方式,参考rt-smart自带example的UDP server,绑定IP和端口。因为需要同时发送和接收,采用了两个线程,一个线程用于循环接收上位机的指令,一个线程用于循环发送扫描数据。

 1/*接收线程*/
 2while(1)
 3{
 4/*接收数据,并获取客户端地址*/
 5lwip_recvfrom(transfer.sockfd,(void*)recv_buffer,BUFSZ-1,0,
 6(structsockaddr*)&client_addr,&addr_len);
 7/*分析数据*/
 8if(recv_buffer[0]==1)
 9{
10if(recv_buffer[1]==1&&transfer.is_running==0)
11{
12transfer.is_running=1;
13transfer.radar_control(1);
14}
15elseif(recv_buffer[1]==2&&transfer.is_running==1)
16{
17transfer.is_running=0;
18transfer.radar_control(0);
19}
20}
21}
22/*发送线程*/
23while(1)
24{
25if(transfer.is_running)
26{
27/*【5】获取数据*/
28transfer.get_data(&angle,&distance);
29/*【6】整合数据*/
30/*angle=htons(angle);
31distance=htonl(distance);*/
32tran_data[1]=0xff33tran_data[2]=0xff&(angle>>8);
34tran_data[3]=0xff&distance;
35tran_data[4]=0xff&(distance>>8);
36tran_data[5]=0xff&(distance>>16);
37tran_data[6]=0xff&(distance>>24);
38/*【7】发送数据*/
39lwip_sendto(transfer.sockfd,tran_data,BUFSZ,0,(structsockaddr*)&client_addr,sizeof(structsockaddr));
40}
41rt_thread_mdelay(100);
42}

2.4总结

程序入口

 1intmyapp(void)
 2{
 3rotor_init();
 4/*控制舵机转动*/
 5rt_thread_tpwm3_rotor_thread=rt_thread_create(
 6"pwm3_rotor",
 7pwm3_rotor_entry,
 8RT_NULL,
 91024,
1025,
115
12);
13if(pwm3_rotor_thread!=RT_NULL)
14{
15rt_thread_startup(pwm3_rotor_thread);
16}
17hr04_enable();
18/*定时获取角度值*/
19rt_thread_ttest_thread=rt_thread_create(
20"hr04",
21test_fun_entry,
22RT_NULL,
231024,
2425,
255
26);
27if(test_thread!=RT_NULL)
28{
29rt_thread_startup(test_thread);
30}
31/*监控上位机指令*/
32rt_thread_tcontrol_thread=rt_thread_create(
33"myapp",
34myapp_entry,
35RT_NULL,
361024,
3725,
385
39);
40if(control_thread!=RT_NULL)
41{
42rt_thread_startup(control_thread);
43}
44return0;
45}

下位机程序一共使用了4个线程

  • 一个用于控制舵机

  • 一个用于获取距离信息

  • 一个用于监听上位机指令

  • 一个用于发送扫描数据

三、效果

舵机+超声波测距

afc14d38-0687-11ed-ba43-dac502259ad0.png

上位机界面

afd4b10c-0687-11ed-ba43-dac502259ad0.png

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

    关注

    114

    文章

    5123

    浏览量

    213260
  • 雷达
    +关注

    关注

    50

    文章

    2887

    浏览量

    117209
  • 开发板
    +关注

    关注

    25

    文章

    4914

    浏览量

    97103

原文标题:rt-smart学习笔记——小实验:实现“扫描雷达”

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通过Uboot TFTP启动rt-smart内核

    介绍Windows下通过 Uboot  TFTP 方式下载和启动rt-smart 内核
    的头像 发表于 06-30 12:34 3620次阅读
    通过Uboot TFTP启动<b class='flag-5'>rt-smart</b>内核

    RT-Smart的资料合集

    1、RT-Smart的启动过程在熟悉 RT-Smart 架构的过程中,研究其启动过程的是必不可少的,那么在系统正常运行之前,需要做哪些准备工作呢。本文将以 32 位 RT-Smart 的源代码为
    发表于 03-22 15:06

    rt-smart中断阻塞问题是怎么引起的

    rt-smart 中断阻塞问题如何解决?该问题是怎么引起的?为了测试rt-smart的实时性,测试了一下中断的稳定性。用systick的1ms中断做测试源。平时都正常的,但是发现打印时,波形老是抖动
    发表于 03-25 09:56

    请问rt-smart gdbserver是闭源的吗?

    编译“RT-Smart”,启用RT_USING_GDBSERVER时,发现许多文件都找不到,请问这部分代码不公开吗?比如#include #include
    发表于 04-19 09:37

    请问rt-smart gdbserver是闭源的吗?

    编译“RT-Smart”,启用RT_USING_GDBSERVER时,发现许多文件都找不到,请问这部分代码不公开吗?比如#include #include
    发表于 04-26 10:01

    基于RT-Thread操作系统衍生rt-smart实时操作系统简介

    1、rt-smart 实时操作系统简介RT-Thread Smart(简称 rt-smart)嵌入式实时操作系统是基于 RT-Thread
    发表于 06-22 17:56

    rt-smart应用程序系统调用实现过程是怎么样的?

    rt-smart应用程序系统调用实现过程是怎么样的? 比如open时候怎么一步一步切换到内核态的?
    发表于 09-08 17:00

    树莓派上rt-smart的应用编程入门

    我们从现在开始会逐步连载RT-Thread Smart(简称rt-smart,甚至有时会称为smart os)的介绍文章,旨在让大家认识,接触到sm
    的头像 发表于 05-13 14:10 3091次阅读
    树莓派上<b class='flag-5'>rt-smart</b>的应用编程入门

    rt-smart移植分析:从树莓派3b入手

    移植rt-smart到最新的板子上具体需要注意哪些细节,哪些才是移植rt-smart的关键点?本文从树莓派3b上移植rt-smart的角度,从头分析rt-sm...
    发表于 01-25 18:48 0次下载
    <b class='flag-5'>rt-smart</b>移植分析:从树莓派3b入手

    优雅的在D1S上运行RT-Smart

    前言 最近在学习 RT-Smart ,正巧有在全志开发者论坛看到这么一篇帖子【惊】在麻雀上运行国产rt-smart系统,看到很多人都在关注 D1S 在 Smart 上的运行情况。如今该 BSP 已经
    的头像 发表于 11-16 20:15 2763次阅读

    丝滑的在RT-Smart用户态运行LVGL

    开发流程 1、RT-Smart 环境搭建 下载 RT-Smart 用户态应用代码: 1 git clone https: //github.com/RT-Thread/userapps.git
    的头像 发表于 11-22 20:20 1203次阅读

    RT-Smart riscv64汇编注释

    rt-smart在全志D1上的代码为例,主要注释了rt-smart在riscv64上的系统初始化和异常处理的代码仓库地址https://gitee.com/rtthread/rt
    的头像 发表于 02-08 21:40 1092次阅读

    零基础上手rt-smart适配bsp

    RT-Thread Smart(简称rt-smart)是基于RT-Thread操作系统衍生,面向带MMU(Memory Management Unit),中高端应用的芯片,例如ARM
    的头像 发表于 08-08 10:34 974次阅读
    零基础上手<b class='flag-5'>rt-smart</b>适配bsp

    RT-Smart riscv64汇编注释

    rt-smart在全志D1上的代码为例,主要注释了rt-smart在riscv64上的系统初始化和异常处理的代码
    的头像 发表于 10-12 17:26 569次阅读
    <b class='flag-5'>RT-Smart</b> riscv64汇编注释

    RT-Smart应用开发笔记:fopen造成文件被清空问题的分析记录

    RT-Smart 应用(apps)开发环境,ubuntu 20.04 + win10 VS Code
    的头像 发表于 10-20 16:01 549次阅读
    <b class='flag-5'>RT-Smart</b>应用开发笔记:fopen造成文件被清空问题的分析记录