智能寻迹避障清障机器人设计(电路图附件+代码)

这篇具有很好参考价值的文章主要介绍了智能寻迹避障清障机器人设计(电路图附件+代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

附  录

智能小车原理图

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法

智能小车拓展板原理图

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法

 

智能小车拓展板PCB

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法

智能小车底板PCB

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法

Arduino UNO原理图

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法

Arduino UNO PCB

智能寻迹避障清障机器人设计(电路图附件+代码),机器人,javascript,算法文章来源地址https://www.toymoban.com/news/detail-795728.html

程序部分

void Robot_Traction()                     //机器人循迹子程序

{

  //有信号为LOW  没有信号为HIGH

  SR = digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭

  SL = digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

  if (SL == LOW && SR == LOW)

    run();   //调用前进函数

  else if (SL == HIGH & SR == LOW)// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转

    left();

  else if (SR == HIGH & SL == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转

    right();

  else // 都是白色, 停止

    brake();

}



void bz()//障碍程序

{

  front_detection();//测量前方距离

  if (Front_Distance < 20) //当遇到障碍物时

  {

    brake3(2);//先刹车

    back3(3);//后退减速

    brake3(2);//停下来做测距

    left_detection();//测量左边距障碍物距离

    right_detection();//测量右边距障碍物距离

    if ((Left_Distance < 20 ) && ( Right_Distance < 20 )) //当左右两侧均有障碍物靠得比较近

      spin_left3(0.7);//旋转掉头

    else if (Left_Distance > Right_Distance) //左边比右边空旷

    {

      left3(4);//左转

      brake3(1);//刹车,稳定方向

    }

    else//右边比左边空旷

    {

      right3(4);//右转

      brake3(1);//刹车,稳定方向

    }

  }

  else

  {

    run(); //无障碍物,直行

  }

}



void gs() //跟随函数

{

  front_detection();//测量前方距离

  R = digitalRead(SensorR);//有信号表明在白色区域,红外传感器LED1亮

  L = digitalRead(SensorL);//有信号表明在白色区域,红外传感器LED2亮

 if (Front_Distance >9&&Front_Distance <= 30&&L == LOW&&R==LOW)

    run();   //调用前进函数

  else if (L == HIGH & R == LOW)// 左跟随红外传感器,检测到信号,车子向右偏离轨道,向左转

    left();

  else if (R == HIGH & L == LOW) // 右跟随红外传感器,检测到信号,车子向左偏离轨道,向右转  

    right();

  else if(Front_Distance > 4 && Front_Distance <= 9&&L == LOW&&R==LOW)

    brake();//先刹车

    else if(Front_Distance > 0 && Front_Distance <= 4&&L == LOW&&R==LOW)

  back();

    else // 都是黑色, 停止

  brake();  }

void ceju() //测距程序

{

 front_detection();//测量前方距离

 if (Front_Distance > 0 && Front_Distance <= 99 )

 {

 Serial.print("distance= ");

 Serial.print(Front_Distance);

 Serial.println("cm");

 delay(700);

 }

 if(Front_Distance >99 )

 Serial.println("Out of range");

 delay(700);

  }

  

void jxbcs()

{

  int robotIniPosArray[4][2] = {

  {servopin3, 90},

  {servopin2, 90},  

  {servopin4, 90},

  {servopin1, 90}

  };

   for (int i = 0; i < 4; i++){

    servopulse(robotIniPosArray[i][0], robotIniPosArray[i][1]);

  }

}

void jxb(char val1)

{

  val = Serial.read();

  switch (val1) {

    case 'W':  a += 10;if (a > 140) a = 140;servopulse(servopin1, a);

    Serial.print("a="); Serial.println(a);break;

    case 'S': a -= 10;if (a < 70) a = 70;servopulse(servopin1, a);

     Serial.print("a="); Serial.println(a);break;

    case 'A': b += 10;if (b > 180) b = 180;  

    Serial.print("b="); Serial.println(b);break;

    case 'D': b -= 10;if (b < 0) b = 0;

    Serial.print("b="); Serial.println(b);break;

    case '8':  c += 10;if (c > 180) c = 180;

    Serial.print("c="); Serial.println(c);break;

    case '5': c -= 10;if (c < 0) c = 0;

    Serial.print("c="); Serial.println(c);break;

    case '4': d += 10;if (d > 180) d = 180;servopulse(servopin4, d);

    Serial.print("d="); Serial.println(d);break;

    case '6': d -= 10;if (d < 0) d = 0; servopulse(servopin4, d);

    Serial.print("d="); Serial.println(d);break;

      break;

    default:

      break;

  }

}



void dump(decode_results *results)

{

  int count = results->rawlen;

  if (results->decode_type == UNKNOWN)

  {

    brake();

  }

}

void IR_IN()                             //机器人遥控子程序

{



  if (irrecv.decode(&results)) //调用库函数:解码

  {

    if (millis() - last > 250) //确定接收到信号

    {

      on = !on;//标志位置反

      dump(&results);//解码红外信号

    }

    if (results.value == CH0 )    { run2();delay(100);brake2();}//前进

    if (results.value == CH1 )    { back2();delay(100);brake2();}//后退

    if (results.value == PREV )   { left2();delay(80);brake2();}//左转

    if (results.value == NEXT )   { right2();delay(80);brake2();}//右转

    if (results.value == CH2 )     brake2();//停车

    if (results.value == PLAY )    spin_left2();//左旋转

    if (results.value == EQ )      spin_right2();//右旋转

    if (results.value == IR_200 ) { jxbcs();keyMode = KEYMODE_1;brake2();}

    if (results.value == VOL1 )   { val1 = 'W';jxb(val1); }

    if (results.value == VOL2 )   { val1 = 'S'; jxb(val1); }

    if (results.value == IR_0 )   { val1 = 'A';jxb(val1); }

    if (results.value == IR_100 ) { val1 = 'D';jxb(val1); }

    if (results.value == IR_1 )   { val1 = '8'; jxb(val1); }

    if (results.value == IR_2 )   { val1 = '5';jxb(val1);  }

    if (results.value == IR_4 )   { val1 = '4';jxb(val1); }

    if (results.value == IR_5 )   { val1 = '6'; jxb(val1);}

    if (results.value == IR_6 )   keyMode = KEYMODE_1;

    if (results.value == IR_7)    keyMode = KEYMODE_2;

    if (results.value == IR_8)    keyMode = KEYMODE_3;

    if (results.value == IR_9)    keyMode = KEYMODE_4;

    last = millis();

    irrecv.resume(); // Receive the next value }}



void LEDTask()

{

  switch (keyMode)

  {

case KEYMODE_1: IR_IN();digitalWrite(PORT_LED1, HIGH); break; //调用复位程序case KEYMODE_2: Robot_Traction(); digitalWrite(PORT_LED1, LOW);break;

case KEYMODE_3: bz();digitalWrite(PORT_LED1, HIGH);break;//用超声波避障程序

case KEYMODE_4: gs();digitalWrite(PORT_LED1, LOW);break; //调用跟随程序

    case KEYMODE_5: ceju(); digitalWrite(PORT_LED1, HIGH);break;//测距

    default:

      break;}}



void reve()

{

  if( Serial.available()>0 ){

         int receive=Serial.parseInt();

  if(receive>=1 && receive<=5){moveSpeed=int(receive*40+55);}

  else if(receive==0)        {brake();Serial.println("Speed=0,brake");}//停车

  else if(receive==100)      { val1 = 'A';jxb(val1); }

  else if(receive==101)      { val1 = 'W';jxb(val1); }

  else if(receive==102)      { val1 = 'S';jxb(val1);}

  else if(receive==103)      { val1 = 'D';jxb(val1);}

  else if(receive==104)      { val1 = '5';jxb(val1);}

  else if(receive==105)      { val1 = '4';jxb(val1); }

  else if(receive==106)      { val1 = '6';jxb(val1);}

  else if(receive==107)      { val1 = '8';jxb(val1);}

  else if(receive==117)      { jxbcs(); keyMode = KEYMODE_1;Serial.println("FW");brake2();}     

  else if(receive==108)     {run(); Serial.println("run");}//前进

  else if(receive==109)     {back();Serial.println("back");}//后退

  else if(receive==110)     {brake();Serial.println("brake");}//停车

  else if(receive==111)     { left();Serial.println("left");}//左

  else if(receive==112)     {right();Serial.println("right");}//右

  else if(receive==113)     {keyMode = KEYMODE_2;Serial.println("Robot_Traction");}//寻迹

else if(receive==114)     {keyMode = KEYMODE_3;Serial.println("bz");}//避障

else if(receive==115)     {keyMode = KEYMODE_4;Serial.println("gs");}//跟随

else if(receive==116)     {keyMode = KEYMODE_5;}}}

void loop()

{

  reve();//蓝牙遥控

  IR_IN();//红外遥控

  LEDTask();//模式区分

  servopulse(servopin2, b);//2舵机连续转动

  servopulse(servopin3, c);//3舵机连续转动

}

到了这里,关于智能寻迹避障清障机器人设计(电路图附件+代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器人制作开源方案 | 智能循迹避障小车

    作者: 刘元青、邹海峰、付志伟、秦怀远、牛文进 单位: 哈尔滨信息工程学院 指导老师: 姚清元       智能小车是移动式机器人的重要组成部分,而移动机器人不仅能够在经济、国防、教育、文化和生活中起到越来越大的作用,也是研究复杂智能行为的产生、探索人类思

    2024年01月16日
    浏览(60)
  • 无人驾驶动态避障策略调研 | 机器人动态避障策略 | 行人轨迹预测 | 机器人导航

    最近在研究机器人协同路径规划策略,发现现有paper中的obstacle都是静态的,但是在实际场景中,常有动态障碍的情形,如走动的行人等等。 为了更好的了解相关技术,我开始调研无人驾驶领域中的动态避障策略: 无人驾驶技术是多个技术的集成,包括了传感器、定位与深度

    2023年04月08日
    浏览(37)
  • 机器人的避障常用方案

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本

    2024年02月12日
    浏览(41)
  • 【数学建模】机器人避障问题

    已知: 正方形5的左下顶点坐标 ( 80 , 60 ) (80,60) ( 80 , 60 ) ,边长 150 150 150 机器人与障碍物的距离至少超过 10 10 10 个单位 规定机器人的行走路径由直线段和圆弧组成,其中圆弧是机器人转弯路径。 机器人不能折线转弯,转弯路径由与直线路径相切的一段圆弧组成,也可以由两

    2024年04月17日
    浏览(52)
  • 绳牵引并联机器人动态避障方法

    绳牵引并联机器人在受限空间中如何躲避动态障碍物,是个有挑战的课题。 来自哈尔滨工业大学(深圳)的熊昊老师团队,开展了一项有趣的研究,论文《Dynamic Obstacle Avoidance for Cable-Driven Parallel Robots With Mobile Bases via Sim-to-Real Reinforcement Learning》发表在SCIEI收录期刊IEEE Robot

    2024年03月24日
    浏览(47)
  • 遨博协作机器人ROS开发 - 机械臂自主避障

    目录 一、简介 二、环境版本 三、学习目标  五、任务实施 六、任务拓展 七、课堂小结 八、课后练习 大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),今天我们来学习一下“机械臂自主避障”。 主机系统版本:Windwos10 64位 处理器型号:Intel-i7 虚

    2023年04月10日
    浏览(41)
  • 机器人避障路径规划的MATLAB模拟退火算法

    机器人避障路径规划的MATLAB模拟退火算法 在机器人路径规划中,避免障碍物是一个重要的问题。模拟退火算法是一种启发式优化算法,可以用于解决路径规划问题。在本文中,我们将使用MATLAB实现一个基于模拟退火算法的机器人避障路径规划程序。 首先,我们需要定义问题

    2024年02月06日
    浏览(44)
  • 冰达ROS机器人使用-实现slam建模、自主导航、避障

    1.在windows中下载好远程连接工具: xshell 、 puty 1 2.机器人有两种模式: 模式 说明 AP模式 机器人自己创建一个热点,电脑端连接该热点,实现局域网互通 WiFi模式 机器人和电脑同时连接一个路由器,实现局域网通信 ps:本文使用AP模式,因为用起来比较方便 3.在机器人AP模式下

    2023年04月08日
    浏览(45)
  • 机器人动态避障的DWA算法及Matlab实现

    机器人动态避障的DWA算法及Matlab实现 机器人的动态避障是实现智能导航和避免碰撞的关键任务之一。其中,动态窗口方法(Dynamic Window Approach,DWA)是一种常用的算法,能够在实时环境中进行局部路径规划和动态避障。本文将详细介绍DWA算法的原理,并提供Matlab代码来实现机

    2024年02月06日
    浏览(47)
  • 基于蚁群优化的机器人避障算法仿真

    基于蚁群优化的机器人避障算法仿真 随着机器人技术的发展,机器人的避障能力也变得越来越重要。蚁群优化算法是一种智能优化算法,具有全局搜索能力和强鲁棒性。本文将介绍如何使用ACO蚁群优化算法实现机器人的避障功能,并用Matlab进行仿真。 算法原理 蚁群优化算法

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包