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;

}

审核编辑:汤梓红

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

    关注

    2551

    文章

    51125

    浏览量

    753747
  • 智能小车
    +关注

    关注

    87

    文章

    549

    浏览量

    81750
  • 自动驾驶
    +关注

    关注

    784

    文章

    13823

    浏览量

    166486
  • RISC-V
    +关注

    关注

    45

    文章

    2283

    浏览量

    46174

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

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

收藏 人收藏

    评论

    相关推荐

    智能小车

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

    【mBot申请】智能线小车

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

    循迹小车

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

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

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

    小车

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

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

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

    基于STM32的循迹小车制作

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

    红外小车设计论文

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

    寻迹小车

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

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

    具有密码保护功能的智能小车的设计与制作_夏雄平
    发表于 01-19 21:54 1次下载

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

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

    智能循迹小车设计与实现

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

    红外小车原理介绍及制作

    红外小车原理介绍及制作
    发表于 07-18 09:39 53次下载

    怎样制作小车

    本项目是在 PVCBOT-A型 基础平台车——BEAM小车的基础上,加装了传感器以及控制电路,组成了台具体有
    的头像 发表于 09-18 09:35 1.9w次阅读

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

    基于stm32的智能小车作品(循迹蓝牙)(下)五、
    发表于 12-28 19:03 79次下载
    基于stm32的<b class='flag-5'>智能</b><b class='flag-5'>小车</b>作品(循迹<b class='flag-5'>避</b><b class='flag-5'>障</b>蓝牙)(下)