机器谱 发表于 2023-3-10 09:20:30

如何让小型双轮差速底盘实现双灰度循迹功能?

本帖最后由 机器谱 于 2023-3-10 09:20 编辑

1. 功能说明
    在机器人车体上安装2个 灰度传感器 ,实现机器人按照下图所指定的路线进行导航运动,来模拟仓库物流机器人按指定路线行进的工作过程。
https://28846868.s21i.faiusr.com/2/ABUIABACGAAg7qm7nwYoouPB8wEwngk4ngk!400x400.jpg.webp
2. 使用样机
   本实验使用的样机为R023e样机。
https://28846868.s21i.faiusr.com/4/ABUIABAEGAAg_6q7nwYono6-DDCRFDikEA!400x400.png.webp3. 功能实现3.1 电子硬件       在这个示例中,我们采用了以下硬件,请大家参考:

主控板Basra(兼容Arduino Uno)
扩展板SH-01外围电路扩展板(与Bigfish扩展板相似)‍
传感器
灰度传感器

电池7.4V锂电池

电路连接说明:
① 电机连在D6,D10及D5,D9接口上;
② 2个灰度传感器分别接在扩展板的传感器接口A0、A4上。

https://28846868.s21i.faiusr.com/2/ABUIABACGAAg0bu7nwYo2_S2_QEwoBc4wA8!500x500.jpg.webphttps://28846868.s21i.faiusr.com/2/ABUIABACGAAg_Lu7nwYoysbk6QEwoBc4wA8!500x500.jpg.webp

3.2 编写程序    传感器触发情况、小车行驶状态、对应行为策略表:


传感器1传感器2小车状态动作
01小车左偏向右调整
10小车右偏向左调整
11到达终点停止
00正常前进

① 根据实验内容,利用多分支结构设计出程序流程图。


https://28846868.s21i.faiusr.com/4/ABUIABAEGAAg5cG7nwYoqd7_xwEw_gQ4iAM.png.webp机器人轨迹导航任务流程图
② 根据设计好的程序流程图进行编程,编写并烧录以下程序(blackline_4if.ino),该程序将实现演示视频中的动作。编程环境:Arduino 1.8.19
/*------------------------------------------------------------------------------------

版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

         Distributed under MIT license.See file LICENSE for detail or copy at

         https://opensource.org/licenses/MIT

         by 机器谱 2023-02-09 https://www.robotway.com/                                 

------------------------------------------------------------------------------------*/

void turnleft_slow();

void forward();

void carstop();

void turnright_slow();


void setup()

{

pinMode( 18, INPUT);

pinMode( 14, INPUT);

pinMode( 10, OUTPUT);

pinMode( 6, OUTPUT);

pinMode( 5, OUTPUT);

pinMode( 9, OUTPUT);

}


void loop()

{

if (( digitalRead(14) && digitalRead(18) ))

{

    forward();

}

if (( !( digitalRead(14) ) && digitalRead(18) ))

{

    turnleft_slow();

}

if (( digitalRead(14) && !( digitalRead(18) ) ))

{

    turnright_slow();

}

if (( !( digitalRead(14) ) && !( digitalRead(18) ) ))

{

    carstop();

    delay( 5000 );

}

}


void turnright_slow()

{

analogWrite(6 , 80);

analogWrite(10 , 0);

analogWrite(5 , 0);

analogWrite(9 , 0);

}


void carstop()

{

analogWrite(6 , 0);

analogWrite(10 , 0);

analogWrite(5 , 0);

analogWrite(9 , 0);

}


void turnleft_slow()

{

analogWrite(6 , 0);

analogWrite(10 , 0);

analogWrite(5 , 80);

analogWrite(9 , 0);

}


void forward()

{

analogWrite(6 , 80);

analogWrite(10 , 0);

analogWrite(5 , 80);

analogWrite(9 , 0);

}
也可以使用if…else嵌套写法(blackline_ifelse.ino)。
void stop();

void left();

void right();

void forwards();


void setup()

{

pinMode( 18, INPUT);

pinMode( 14, INPUT);

pinMode( 10, OUTPUT);

pinMode( 6, OUTPUT);

pinMode( 5, OUTPUT);

pinMode( 9, OUTPUT);

}


void loop()

{

if (( !( digitalRead(14) ) && digitalRead(18) ))

{

    right();

}

else

{

    if (( digitalRead(14) && !( digitalRead(18) ) ))

    {

      left();

    }

    else

    {

      if (( !( digitalRead(14) ) && !( digitalRead(18) ) ))

      {

      stop();

      }

      else

      {

      forwards();

      }

    }

}

}


void stop()

{

analogWrite(5 , 0);

analogWrite(9 , 0);

analogWrite(6 , 0);

analogWrite(10 , 0);

}


void right()

{

analogWrite(5 , 150);

analogWrite(9 , 0);

analogWrite(6 , 0);

analogWrite(10 , 150);

}


void forwards()

{

analogWrite(5 , 150);

analogWrite(9 , 0);

analogWrite(6 , 150);

analogWrite(10 , 0);

}


void left()

{

analogWrite(5 , 0);

analogWrite(9 , 150);

analogWrite(6 , 150);

analogWrite(10 , 0);

}
4. 资料下载
​资料内容:
​①【R023】-灰度循迹2-例程源代码
​②【R023】-灰度循迹2-样机3D文件
​资料下载地址:https://www.robotway.com/h-col-113.html

想了解更多机器人开源项目资料请关注 机器谱网站 https://www.robotway.com

页: [1]
查看完整版本: 如何让小型双轮差速底盘实现双灰度循迹功能?