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;

}

审核编辑:汤梓红

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

    关注

    2526

    文章

    48092

    浏览量

    740025
  • 智能小车
    +关注

    关注

    85

    文章

    541

    浏览量

    81184
  • 自动驾驶
    +关注

    关注

    773

    文章

    13032

    浏览量

    163209
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045

原文标题:应用速递 | 如何制作一个智能寻路+避障的小车?

文章出处:【微信号:芯片开放社区,微信公众号:芯片开放社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    智能小车

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

    多功能智能小车

    项目说明:利用贵公司的芯片,设计种多功能智能小车,具有自动,路面线等功能,
    发表于 11-07 14:46

    【mBot申请】智能线小车

    的学习记录,与学友们分享入门过程中的各种问题。全面拆解这台机器人,并完成小项目。项目描述:全面拆解学习,并利用开发套件平台,实现小车线,
    发表于 11-11 11:02

    款5循迹3蓝牙多功能小车

    月,最终定型。本款产品求真电子科技工作室拥有完全自主知识产权。并且外观设计已申请专利。自学成才两驱智能小车功能如下:第部分:作为智能小车
    发表于 03-17 22:12

    循迹小车

    我是名电子信息工程的大新生,目前没有学习专业知识,想要自己做一个循迹小车,想要
    发表于 10-02 00:09

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

    `本人在做arduino小车,其中用到的两模块——四循迹与红外
    发表于 02-01 10:53

    小车

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

    关于STM32智能循迹小车

    小白枚,目前有四电机,车架,STM32F103VET6最小系统板,还有L293D驱动
    发表于 04-25 11:09

    多模态智能小车的实现

    想问下智能小车的设计与实现需要学习什么资料呀?学校学过51单片机的知识,但是教课内容也就仅限于对单片机有
    发表于 02-03 11:13

    智能小车

    求教用51单片机做个小车想用摄像头采集,传到计算机处理,这两模块学习什么内容
    发表于 02-06 15:01

    怎么制作智能循迹小车

    的能力,而且智能小车还是很好的硬件平台,只要增加些控制电路就能完成循迹小车、救火机器人、足
    发表于 04-23 07:13

    怎样去设计智能循迹小车

    智能循迹小车毕业设计论文.docx》由会员分享,可免费在线阅读全文,更多与《智能循迹
    发表于 08-26 13:26

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

    智能小车采用后轮驱动,两轮各用步进电机执行,速度检测的传感器采用红外对射式,
    发表于 12-13 07:09

    基于STM32的循迹小车制作

    写在最前:最近由于需要制作循迹小车制作
    发表于 01-05 07:48

    怎样去设计基于stm32的循迹蓝牙小车

    基于stm32的智能小车作品(循迹蓝牙)(上)前言、材料准备二、AD画板+焊接1.原理图2.pcb图3.裸板成品4.焊好后成品三、让轮
    发表于 01-14 08:33