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

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

3天内不再提示

如何制作一个智能寻路+避障的小车?

芯片开放社区 来源:芯片开放社区 2022-12-22 14:27 次阅读

本文源自“玄铁杯第二届RISC-V应用创新大赛”活动,由OCC整理发布。

本项目利用D1 Dock Pro的USB拍照程序,结合L298N电机驱动模块和红外探测循迹光电传感器模块,制作了一个拥有智能寻路+避障功能的小车。该项目为“玄铁杯第二届RISC-V应用创新大赛”活动中的优秀作品。

关于自动寻路小车的技术细节,请看本文详细介绍。

01项目介绍

随着我国人工智能技术的进一步发展,自动驾驶汽车吸引了越来越多的目光,巡线是其行走控制方法之一,人们对智能循迹小车适应各种复杂路况的性能、安全平稳性等的要求越来越高,所以我们小组想要做一个智能寻路+避障小车。

fb0635c0-81b0-11ed-8abf-dac502259ad0.jpg

智能小车成品

02Demo的整体框架

fb459b8e-81b0-11ed-8abf-dac502259ad0.jpg

03具体实施方案

1. 首先,根据哪吒开发板的原理框图了解开发板的工作原理,不同类型的引脚能实行怎样的功能,怎么使各引脚工作起来。

2. 在电脑上安装Ubuntu环境,进行编译环境配置,源码下载,编译和烧写。

3. 成功尝试了使用哪吒开发板运行的第一个HelloWorld程序和USB拍照程序。

4. 上网购买智能小车的所有部件:1个亚克力双层智能小车套件;2个L298N电机驱动模块;三种类型的杜邦线各一排;1个四路红外探测循迹光电传感器模块;4节5号电池。

5. 安装、连接、测试小车的行走功能。

6. 编写代码,调节红外探测的灵敏度使小车能够较为准确地感知周围环境并且运行测试成功。

7. 调试代码,完善小车的功能。

fb93278c-81b0-11ed-8abf-dac502259ad0.jpg

04软件、硬件介绍

软件:Oracle VM VirtualBox Ubuntu 14.04虚拟机系统、全志USB烧录驱动、AllwinnertechPhoeniSuitRelease工具。

硬件:哪吒开发板、USB数据传输、USB供电海康威视摄像机、组装好的智能小车。

05作品源码

#include
#include
#include
#include 
#define EXPORT_GPIO1 "echo 2027 > /sys/class/gpio/export"
#define EXPORT_GPIO2 "echo 2020 > /sys/class/gpio/export"
#define EXPORT_GPIO3 "echo 2021 > /sys/class/gpio/export"
#define EXPORT_GPIO4 "echo 2022 > /sys/class/gpio/export"

#define UEXPORT_GPIO1 "echo 2027 > /sys/class/gpio/unexport"
#define UEXPORT_GPIO2 "echo 2020 > /sys/class/gpio/unexport"
#define UEXPORT_GPIO3 "echo 2021 > /sys/class/gpio/unexport"
#define UEXPORT_GPIO4 "echo 2022 > /sys/class/gpio/unexport"

#define GPIO1_OUTPUT "echo out > /sys/class/gpio/gpio2027/direction"
#define GPIO2_OUTPUT "echo out > /sys/class/gpio/gpio2020/direction"
#define GPIO3_OUTPUT "echo out > /sys/class/gpio/gpio2021/direction"
#define GPIO4_OUTPUT "echo out > /sys/class/gpio/gpio2022/direction"

#define LOWGPIO1 "echo 0 > /sys/class/gpio/gpio2027/value"
#define LOWGPIO2 "echo 0 > /sys/class/gpio/gpio2020/value"
#define LOWGPIO3 "echo 0 > /sys/class/gpio/gpio2021/value"
#define LOWGPIO4 "echo 0 > /sys/class/gpio/gpio2022/value"

#define HIGHGPIO1 "echo 1 > /sys/class/gpio/gpio2027/value"
#define HIGHGPIO2 "echo 1 > /sys/class/gpio/gpio2020/value"
#define HIGHGPIO3 "echo 1 > /sys/class/gpio/gpio2021/value"
#define HIGHGPIO4 "echo 1 > /sys/class/gpio/gpio2022/value"

//红外
#define EXPORT_HW1 "echo 2023 > /sys/class/gpio/export"
#define EXPORT_HW2 "echo 2024 > /sys/class/gpio/export"
#define EXPORT_HW3 "echo 2025 > /sys/class/gpio/export"
#define EXPORT_HW4 "echo 2026 > /sys/class/gpio/export"

#define HW1_INPUT "echo in > /sys/class/gpio/gpio2023/direction"
#define HW2_INPUT "echo in > /sys/class/gpio/gpio2024/direction"
#define HW3_INPUT "echo in > /sys/class/gpio/gpio2025/direction"
#define HW4_INPUT "echo in > /sys/class/gpio/gpio2026/direction"

#define UNEXPORT_HW1 "echo 2023 > /sys/class/gpio/unexport"
#define UNEXPORT_HW2 "echo 2024 > /sys/class/gpio/unexport"
#define UNEXPORT_HW3 "echo 2025 > /sys/class/gpio/unexport"
#define UNEXPORT_HW4 "echo 2026 > /sys/class/gpio/unexport"

#define run 1
#define left 3
#define right 4
#define back 2
#define stop 5

void INIT()
{

system(EXPORT_GPIO1);
system(EXPORT_GPIO2);
system(EXPORT_GPIO3);
system(EXPORT_GPIO4);

system(EXPORT_HW1);
system(EXPORT_HW2);
system(EXPORT_HW3);
system(EXPORT_HW4);

system(GPIO1_OUTPUT);
system(GPIO2_OUTPUT);
system(GPIO3_OUTPUT);
system(GPIO4_OUTPUT);

system(HW1_INPUT);
system(HW2_INPUT);
system(HW3_INPUT);
system(HW4_INPUT);
//printf("1
");

}

void RUN()
{
system(LOWGPIO1);//0
system(HIGHGPIO2);//1
system(HIGHGPIO3);//1
system(LOWGPIO4);//0
//printf("2
");

}
void STOP()
{
system(LOWGPIO1);
system(LOWGPIO2);
system(LOWGPIO3);
system(LOWGPIO4);
//printf("3
");
}
void LEFT()
{
system(LOWGPIO1);//0
system(HIGHGPIO2);//1
system(HIGHGPIO3);//1
system(HIGHGPIO4);//1
}
void RIGHT()
{
system(HIGHGPIO1);//1
system(HIGHGPIO2);//1
system(HIGHGPIO3);//1
system(LOWGPIO4);//0
}
void BACK()
{
system(HIGHGPIO1);//1
system(LOWGPIO2);//0
system(LOWGPIO3);//0
system(HIGHGPIO4);//1
}
void MOTORRUN(int cmd)
{
  switch(cmd)
  {
  case 1:
  RUN();
  break;
  case 2:
  BACK();
  break;
  case 3:
  LEFT();
  break;
  case 4:
  RIGHT();
  break;
  case 5:
  STOP();
  break;
  }
}
int GETHW(int gpio)
{

    char path[64];
    char value_str[3];
    int fd;

    snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", gpio);
    fd = open(path, O_RDONLY);
    if (fd < 0) {
        perror("Failed to open gpio value for reading!");
        return -1;
    }

    if (read(fd, value_str, 3) < 0) {
        perror("Failed to read value!");
        return -1;
    }

    close(fd);
    return (atoi(value_str));
}

void TRACE()
{
int l1=GETHW(2023);
int l2=GETHW(2024);
int r1=GETHW(2025);
int r2=GETHW(2026);
//printf("%d,%d,%d,%d",l1,l2,r1,r2);
if(l1&&l2&&r1&&r2){
MOTORRUN(run);
printf("直走
");
}
else if(l1+l2r1+r2){
//MOTORRUN(back);
printf("左转
");
sleep(0.5);
MOTORRUN(left);
}
else if(!r1&&!r2&&!l1&&!l2){
            printf("停止
");
MOTORRUN(stop);
}

}

int main(void)
{
INIT();
while(1)
{
 TRACE();
// printf("2022");
// sleep(1); 
// RUN();
 sleep(0.5);
// STOP();
 }return 0;

}

审核编辑:汤梓红

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

    关注

    2486

    文章

    44852

    浏览量

    728192
  • 智能小车
    +关注

    关注

    84

    文章

    537

    浏览量

    80863
  • 自动驾驶
    +关注

    关注

    759

    文章

    12269

    浏览量

    162042
  • RISC-V
    +关注

    关注

    38

    文章

    1570

    浏览量

    44330
收藏 人收藏

    评论

    相关推荐

    智能小车

    智能小车的protel电路图和pcb图,有的发到772478656@qq.com不胜感激。
    发表于 10-24 10:54

    【mBot申请】智能线小车

    小项目。项目描述:全面拆解学习,并利用开发套件平台,实现小车线,光,自动功能。
    发表于 11-11 11:02

    循迹小车

    名电子信息工程的大新生,目前没有学习专业知识,想要自己做一个循迹小车,想要制作循迹小车的全部信息来学习,求大神帮忙!!!
    发表于 10-02 00:09

    请问循迹当中的四循迹模块与红外光&模块有什么区别?

    小车,其中用到的两模块——四循迹与红外光&amp;模块在网上查完后感觉都是通过红外发送器发送信号然后再用接收器接收信号从而进行判断,所以想问
    发表于 02-01 10:53

    小车

    光和超声波更有效的结合啊?
    发表于 03-28 09:09

    如何去实现种基于单片机智能循线智能小车系统设计

    智能小车采用后轮驱动,两轮各用步进电机执行,速度检测的传感器采用红外对射式,用的传感器采用红外反射式,速度检测的码盘采用手工制作。【关键词】:循线 红外传感 码盘
    发表于 12-13 07:09

    基于STM32的循迹小车制作

    制作循迹小车制作比较简单但是还是出现了很多bug,因此在博客中记录下,希望对后期需要制作的能有所帮助,小车由PWM信号+L293D驱动。(二轮驱动,第三轮为自由轮
    发表于 01-05 07:48

    红外小车设计论文

    小车设计论文红外小车设计论文红外小车设计论文
    发表于 11-13 15:57 103次下载

    寻迹小车

    小车寻迹小车寻迹小车寻迹
    发表于 11-13 15:53 38次下载

    具有密码保护功能的智能小车的设计与制作_夏雄平

    智能小车的设计与制作_夏雄平
    发表于 01-19 21:54 1次下载

    基于红外智能小车的设计_强彦

    智能小车的设计_强彦
    发表于 01-21 12:16 27次下载

    智能循迹小车设计与实现

    智能循迹小车设计与实现
    发表于 06-06 08:48 300次下载

    红外小车原理介绍及制作

    小车原理介绍及
    发表于 07-18 09:39 51次下载

    基于stm32的智能小车作品(循迹蓝牙)(下)

    智能小车作品(循迹蓝牙)(下)五、小车制作1.超声波模块接线2.工作原理3. 超声波程序六、蓝牙遥控小车制作1.模块介绍+接线3.蓝牙遥控小车程序4.
    发表于 12-28 19:03 72次下载
    基于stm32的<b>智能</b><b>小车</b>作品(循迹<b>避</b><b>障</b>蓝牙)(下)

    怎样制作小车

    小车的基础上,加装了传感器以及控制电路,组成了台具体有功能的小车。而这个所谓小车,实际上就是和 PVCBOT-1号 机器人类似的
    的头像 发表于 09-18 09:35 1.8w次阅读