极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2154|回复: 0

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

[复制链接]
发表于 2023-3-10 09:20:30 | 显示全部楼层 |阅读模式
本帖最后由 机器谱 于 2023-3-10 09:20 编辑

1. 功能说明
    在机器人车体上安装2个 灰度传感器 ,实现机器人按照下图所指定的路线进行导航运动,来模拟仓库物流机器人按指定路线行进的工作过程。

2. 使用样机
     本实验使用的样机为R023e样机。

3. 功能实现
3.1 电子硬件
       在这个示例中,我们采用了以下硬件,请大家参考:

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

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



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

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

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


机器人轨迹导航任务流程图

② 根据设计好的程序流程图进行编程,编写并烧录以下程序(blackline_4if.ino),该程序将实现演示视频中的动作。
编程环境:Arduino 1.8.19

  1. /*------------------------------------------------------------------------------------

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

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

  4.            https://opensource.org/licenses/MIT

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

  6. ------------------------------------------------------------------------------------*/

  7. void turnleft_slow();

  8. void forward();

  9. void carstop();

  10. void turnright_slow();


  11. void setup()

  12. {

  13.   pinMode( 18, INPUT);

  14.   pinMode( 14, INPUT);

  15.   pinMode( 10, OUTPUT);

  16.   pinMode( 6, OUTPUT);

  17.   pinMode( 5, OUTPUT);

  18.   pinMode( 9, OUTPUT);

  19. }


  20. void loop()

  21. {

  22.   if (( digitalRead(14) && digitalRead(18) ))

  23.   {

  24.     forward();

  25.   }

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

  27.   {

  28.     turnleft_slow();

  29.   }

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

  31.   {

  32.     turnright_slow();

  33.   }

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

  35.   {

  36.     carstop();

  37.     delay( 5000 );

  38.   }

  39. }


  40. void turnright_slow()

  41. {

  42.   analogWrite(6 , 80);

  43.   analogWrite(10 , 0);

  44.   analogWrite(5 , 0);

  45.   analogWrite(9 , 0);

  46. }


  47. void carstop()

  48. {

  49.   analogWrite(6 , 0);

  50.   analogWrite(10 , 0);

  51.   analogWrite(5 , 0);

  52.   analogWrite(9 , 0);

  53. }


  54. void turnleft_slow()

  55. {

  56.   analogWrite(6 , 0);

  57.   analogWrite(10 , 0);

  58.   analogWrite(5 , 80);

  59.   analogWrite(9 , 0);

  60. }


  61. void forward()

  62. {

  63.   analogWrite(6 , 80);

  64.   analogWrite(10 , 0);

  65.   analogWrite(5 , 80);

  66.   analogWrite(9 , 0);

  67. }
复制代码

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

  1. void stop();

  2. void left();

  3. void right();

  4. void forwards();


  5. void setup()

  6. {

  7.   pinMode( 18, INPUT);

  8.   pinMode( 14, INPUT);

  9.   pinMode( 10, OUTPUT);

  10.   pinMode( 6, OUTPUT);

  11.   pinMode( 5, OUTPUT);

  12.   pinMode( 9, OUTPUT);

  13. }


  14. void loop()

  15. {

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

  17.   {

  18.     right();

  19.   }

  20.   else

  21.   {

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

  23.     {

  24.       left();

  25.     }

  26.     else

  27.     {

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

  29.       {

  30.         stop();

  31.       }

  32.       else

  33.       {

  34.         forwards();

  35.       }

  36.     }

  37.   }

  38. }


  39. void stop()

  40. {

  41.   analogWrite(5 , 0);

  42.   analogWrite(9 , 0);

  43.   analogWrite(6 , 0);

  44.   analogWrite(10 , 0);

  45. }


  46. void right()

  47. {

  48.   analogWrite(5 , 150);

  49.   analogWrite(9 , 0);

  50.   analogWrite(6 , 0);

  51.   analogWrite(10 , 150);

  52. }


  53. void forwards()

  54. {

  55.   analogWrite(5 , 150);

  56.   analogWrite(9 , 0);

  57.   analogWrite(6 , 150);

  58.   analogWrite(10 , 0);

  59. }


  60. void left()

  61. {

  62.   analogWrite(5 , 0);

  63.   analogWrite(9 , 150);

  64.   analogWrite(6 , 150);

  65.   analogWrite(10 , 0);

  66. }
复制代码

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


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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 05:55 , Processed in 0.050888 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表