机器谱 发表于 2023-3-8 09:16:24

小型双轮差速底盘躲避悬崖功能的实现

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

1. 功能说明
      本实验使用的样机为小型双轮差速底盘。在样机前方安装3个 近红外传感器 ,实现机器人躲避悬崖、在某平台上移动时不会掉下去的效果。

https://28846868.s21i.faiusr.com/2/ABUIABACGAAg6f61nwYompe7swEwwCA4sBg!600x600.jpg.webp
2. 电子硬件    在这个示例中,我们采用了以下硬件,请大家参考

主控板Basra(兼容Arduino Uno)
扩展板Bigfish2.1
传感器近红外传感器
电池7.4V锂电池

    左轮直流电机连在D9,D10接口上;右轮直流电机连在D5,D6接口上;3个近红外传感器从左到右分别连在A0、A4、A3接口上。
https://28846868.s21i.faiusr.com/2/ABUIABACGAAg84O2nwYogKCslQEwwCA4sBg!600x600.jpg.webp

3. 示例程序编程环境:Arduino 1.8.19编写并烧录以下程序(nine.ino),该程序将实现演示视频中的动作
/*------------------------------------------------------------------------------------

版权说明: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-10 https://www.robotway.com/                              

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

void Right();

void Left();

void Stop();

void Forward();

void Back();


void setup()

{

pinMode( 17, INPUT);

pinMode( 18, INPUT);

pinMode( 14, INPUT);

pinMode( 10, OUTPUT);

pinMode( 6, OUTPUT);

pinMode( 5, OUTPUT);

pinMode( 9, OUTPUT);

}


void loop()

{

if (((!( digitalRead(14)) && ! (digitalRead(17)) ) ))

{

    Forward();

}

if (( digitalRead(14) ))

{

    Left();

    delay( 300 );

}

if (( digitalRead(17) ))

{

    Right();

    delay( 300 );

}

if (( digitalRead(18) ))

{

    Back();

    delay( 1000 );

    analogWrite(5 , 100);

    analogWrite(6 , 0);

    analogWrite(9 , 0);

    analogWrite(10 , 100);

    delay( 1500 );

}

}


void Right()

{

analogWrite(5 , 0);

analogWrite(6 , 0);

analogWrite(9 , 100);

analogWrite(10 , 0);

}


void Forward()

{

analogWrite(5 , 100);

analogWrite(6 , 0);

analogWrite(9 , 100);

analogWrite(10 , 0);

}


void Back()

{

analogWrite(5 , 0);

analogWrite(6 , 100);

analogWrite(9 , 0);

analogWrite(10 , 100);

}


void Left()

{

analogWrite(5 , 100);

analogWrite(6 , 0);

analogWrite(9 , 0);

analogWrite(10 , 0);

}


void Stop()

{

analogWrite(5 , 0);

analogWrite(6 , 0);

analogWrite(9 , 0);

analogWrite(10 , 0);

}4. 扩展
       本实验采用3个近红外传感器,利用的是近红外传感器能够识别到距离较近的桌面,无法识别到距离较远的地面,因此桌面要距离地面远一些。
       本实验还可以使用灰度传感器或者白标传感器。利用的是灰度和白标在悬崖处极难收到反射回来的红外线的原理,因此相应的桌面必须是浅色,如果桌面也是深色,灰度和白标传感器就无法区分桌面和悬崖了。

5. 资料内容
躲避悬崖-例程源代码
​资料下载地址:https://www.robotway.com/h-col-113.html

想了解更多机器人开源项目资料请关注 机器谱网站 https://www.robotway.com
页: [1]
查看完整版本: 小型双轮差速底盘躲避悬崖功能的实现