0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何制作一個智能尋路+避障的小車?

芯片開放社區(qū) ? 來源:芯片開放社區(qū) ? 2022-12-22 14:27 ? 次閱讀

本文源自“玄鐵杯第二屆RISC-V應(yīng)用創(chuàng)新大賽”活動,由OCC整理發(fā)布。

本項目利用D1 Dock Pro的USB拍照程序,結(jié)合L298N電機驅(qū)動模塊和紅外探測循跡光電傳感器模塊,制作了一個擁有智能尋路+避障功能的小車。該項目為“玄鐵杯第二屆RISC-V應(yīng)用創(chuàng)新大賽”活動中的優(yōu)秀作品。

關(guān)于自動尋路小車的技術(shù)細(xì)節(jié),請看本文詳細(xì)介紹。

01項目介紹

隨著我國人工智能技術(shù)的進(jìn)一步發(fā)展,自動駕駛汽車吸引了越來越多的目光,巡線是其行走控制方法之一,人們對智能循跡小車適應(yīng)各種復(fù)雜路況的性能、安全平穩(wěn)性等的要求越來越高,所以我們小組想要做一個智能尋路+避障小車。

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

智能小車成品

02Demo的整體框架

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

03具體實施方案

1. 首先,根據(jù)哪吒開發(fā)板的原理框圖了解開發(fā)板的工作原理,不同類型的引腳能實行怎樣的功能,怎么使各引腳工作起來。

2. 在電腦上安裝Ubuntu環(huán)境,進(jìn)行編譯環(huán)境配置,源碼下載,編譯和燒寫。

3. 成功嘗試了使用哪吒開發(fā)板運行的第一個HelloWorld程序和USB拍照程序。

4. 上網(wǎng)購買智能小車的所有部件:1個亞克力雙層智能小車套件;2個L298N電機驅(qū)動模塊;三種類型的杜邦線各一排;1個四路紅外探測循跡光電傳感器模塊;4節(jié)5號電池。

5. 安裝、連接、測試小車的行走功能。

6. 編寫代碼,調(diào)節(jié)紅外探測的靈敏度使小車能夠較為準(zhǔn)確地感知周圍環(huán)境并且運行測試成功。

7. 調(diào)試代碼,完善小車的功能。

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

04軟件、硬件介紹

軟件:Oracle VM VirtualBox Ubuntu 14.04虛擬機系統(tǒng)、全志USB燒錄驅(qū)動、AllwinnertechPhoeniSuitRelease工具。

硬件:哪吒開發(fā)板、USB數(shù)據(jù)傳輸、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("左轉(zhuǎn)
");
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;

}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51099

    瀏覽量

    753567
  • 智能小車
    +關(guān)注

    關(guān)注

    87

    文章

    549

    瀏覽量

    81741
  • 自動駕駛
    +關(guān)注

    關(guān)注

    784

    文章

    13812

    瀏覽量

    166456
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2277

    瀏覽量

    46159

原文標(biāo)題:應(yīng)用速遞 | 如何制作一個智能尋路+避障的小車?

文章出處:【微信號:芯片開放社區(qū),微信公眾號:芯片開放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    智能小車

    求各位大神給智能小車的protel電路圖和pcb圖,有的發(fā)到772478656@qq.com不勝感激。
    發(fā)表于 10-24 10:54

    【mBot申請】智能小車

    的學(xué)習(xí)記錄,與學(xué)友們分享入門過程中的各種問題。全面拆解這臺機器人,并完成小項目。項目描述:全面拆解學(xué)習(xí),并利用開發(fā)套件平臺,實現(xiàn)小車線,
    發(fā)表于 11-11 11:02

    循跡小車

    我是名電子信息工程的大新生,目前沒有學(xué)習(xí)專業(yè)知識,想要自己做一個循跡小車,想要
    發(fā)表于 10-02 00:09

    請問循跡當(dāng)中的四循跡模塊與紅外光&模塊有什么區(qū)別?

    `本人在做arduino小車,其中用到的兩模塊——四循跡與紅外
    發(fā)表于 02-01 10:53

    小車

    怎樣能把光和超聲波更有效的結(jié)合???
    發(fā)表于 03-28 09:09

    如何去實現(xiàn)種基于單片機智能循線智能小車系統(tǒng)設(shè)計

    。智能小車采用后輪驅(qū)動,兩輪各用步進(jìn)電機執(zhí)行,速度檢測的傳感器采用紅外對射式,
    發(fā)表于 12-13 07:09

    基于STM32的循跡小車制作

    寫在最前:最近由于需要制作循跡小車,制作
    發(fā)表于 01-05 07:48

    紅外小車設(shè)計論文

    紅外小車設(shè)計論文紅外小車設(shè)計論文紅外
    發(fā)表于 11-13 15:57 ?0次下載

    尋跡小車

    尋跡小車尋跡
    發(fā)表于 11-13 15:53 ?0次下載

    具有密碼保護功能的智能小車的設(shè)計與制作_夏雄平

    具有密碼保護功能的智能小車的設(shè)計與制作_夏雄平
    發(fā)表于 01-19 21:54 ?1次下載

    基于紅外智能小車的設(shè)計_強彥

    基于紅外智能小車的設(shè)計_強彥
    發(fā)表于 01-21 12:16 ?28次下載

    智能循跡小車設(shè)計與實現(xiàn)

    智能循跡小車設(shè)計與實現(xiàn)
    發(fā)表于 06-06 08:48 ?308次下載

    紅外小車原理介紹及制作

    紅外小車原理介紹及制作
    發(fā)表于 07-18 09:39 ?53次下載

    怎樣制作小車

    本項目是在 PVCBOT-A型 基礎(chǔ)平臺車——BEAM小車的基礎(chǔ)上,加裝了傳感器以及控制電路,組成了臺具體有
    的頭像 發(fā)表于 09-18 09:35 ?1.9w次閱讀

    基于stm32的智能小車作品(循跡藍(lán)牙)(下)

    基于stm32的智能小車作品(循跡藍(lán)牙)(下)五、
    發(fā)表于 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>藍(lán)牙)(下)