我如何破解自动驾驶功能的mBot Ranger套件

两周前,我写了一篇关于 mBot Ranger套件。这是我第一次’我一直在玩Makeblock工具包,这给我留下了深刻的印象。优质的组件,还有更多扩展空间,等等。您可以在 mBot Ranger评论。在这篇文章中,我’继续我在mBot Ranger上的经验,并与您分享了如何破解mBot Ranger套件以使用超声波传感器自动工作的方法。

经过30分钟的工作,我将mBot套件的所有硬件组件组装到了一个漂亮的机器人储物箱中。我非常高兴,至少直到进入软件方面为止。该套件可通过PC或使用应用程序进行编程。很快我发现我的文档存在一些问题,并且智能手机的软件版本不是最新的,因为该套件没有’当时已被释放。关于该软件的平板电脑版本,我不知道’没有平板电脑。 (是的,我不’t want a tablet!)

幸运的是,我知道机器人的大脑是基于Arduino Mega 2560的Me Auriga砖。作为Arduino风扇,我知道该怎么做才能前进。

计划是在库中搜索并找到使用Arduino草图控制机器人电机的引脚。经过几分钟的研究,我找到了控制两个直流电动机所需的引脚。使用超声波传感器要容易得多。我使用Makeblock库读取距离。

想法是对机器人油箱进行编程以检测障碍物,当传感器检测到一个或多个障碍物时,机器人会右转直到传感器不再检测到任何障碍物。

这是Arduino草图,也是我使用mBot Ranger套件的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/ **
* @文件        mBot Ranger自主模式
* @作者       IntoRobotics.com
* @版本      V1.1
* @日期         2016/05/13
* @说明  此文件是mBot Ranger套件的示例代码
* /
#包括"MeAuriga.h"
#包括<SoftwareSerial.h>
 
超声波传感器 超感测器(PORT_7); //超声波模块
 
整型 distanceLimit=50;    //我们要ping的最大距离(以厘米为单位)。
整型 最大功率=255;
整型 半Pwm=200;
整型 转Pwm=150;
整型 d=500;
整型 frontDistance;
 
 
//左马达
const 整型 pwmMotor1 = 11;
const 整型 inMotor1_1 = 49;
const 整型 inMotor1_2 = 48;
 
//向右行驶
const 整型 pwmMotor2 = 10;
const 整型 inMotor2_1 = 47;
const 整型 inMotor2_2 = 46;
 
虚空 设定()
{
  序列号.开始(9600);
  pinMode(pwmMotor1,输出值);    //我们必须将PWM引脚设置为输出
  pinMode(inMotor1_1,输出值);  //逻辑引脚也设置为输出
  pinMode(inMotor1_2,输出值);
  pinMode(pwmMotor2,输出值);    //我们必须将PWM引脚设置为输出
  pinMode(inMotor2_1,输出值);  //逻辑引脚也设置为输出
  pinMode(inMotor2_2,输出值);
}
 
虚空 循环()
{
   GetFrontDistance();  //以厘米为单位获取超声波距离
   如果(frontDistance>=distanceLimit){
      全速模式();  //机器人处于全速模式
    }
 
   其他 {  
      减缓速度();   //降低机器人的速度
      停止();          //停止机器人
       {  
          右转();
          延迟(200);  //等待传感器稳定
          GetFrontDistance();  //以厘米为单位获取超声波距离  
          } (frontDistance<distanceLimit);
      }
}
 
整型 GetFrontDistance(){
   frontDistance=超感测器.距离Cm();
   序列号.打印(“前距(以厘米为单位)是:”); //用于调试
   序列号.打印(frontDistance);
   返回 frontDistance;
   }
 
虚空 全速模式(){
    digitalWrite(inMotor1_1, );
    digitalWrite(inMotor1_2, );
    AnalogWrite(pwmMotor1,最大功率);
    digitalWrite(inMotor2_1, );
    digitalWrite(inMotor2_2, );
    AnalogWrite(pwmMotor2,最大功率);
    序列号.打印(“全速模式”); //用于调试
   }
 
  虚空 减缓速度(){
    digitalWrite(inMotor1_1, );
    digitalWrite(inMotor1_2, );
    AnalogWrite(pwmMotor1,半Pwm);//通过PWM设置速度
    digitalWrite(inMotor2_1, );
    digitalWrite(inMotor2_2, );
    AnalogWrite(pwmMotor2,半Pwm);//通过PWM设置速度
    序列号.打印(“降低速度”); //用于调试
    延迟(d);
    }
 
  虚空 停止(){
    AnalogWrite(pwmMotor1, 0);
    AnalogWrite(pwmMotor2, 0);
    序列号.打印(“停止”);
    延迟(d);
   }
   虚空 右转(){
    digitalWrite(inMotor1_1, );
    digitalWrite(inMotor1_2, );
    AnalogWrite(pwmMotor1,转Pwm);//通过PWM设置速度
    digitalWrite(inMotor2_1, );
    digitalWrite(inMotor2_2, );
    AnalogWrite(pwmMotor2,转Pwm);//通过PWM设置速度
    序列号.打印(“向右转机器人”); //用于调试
    }

Makeblock mBot Ranger套件自主模式

15条评论 » Write a comment

  1. 嗨!

    我已经阅读了您的博客,对此印象深刻。我正在尝试使用mBot Ranger做类似的事情。您能和我分享一下您如何找出使用Arduino草图控制机器人电机的引脚吗?

    亲切的问候。

      • 嗨!

        感谢您的及时答复。我想我可能不太清楚我的问题。以下是代码片段:
        //左马达
        const 整型 pwmMotor1 = 11;
        const 整型 inMotor1_1 = 49;
        const 整型 inMotor1_2 = 48;

        //向右行驶
        const 整型 pwmMotor2 = 10;
        const 整型 inMotor2_1 = 47;
        const 整型 inMotor2_2 = 46;

        在此代码片段中,您正在初始化引脚。我的问题是:您如何确定电机与MeAuriga板上的哪个引脚相连?

        我希望我现在更有意义。再一次谢谢你。

        • 你好

          好吧,现在我明白了这个问题-
          我看了看图书馆。在这里,您可以找到有关引脚等的更多详细信息。

          我已经在文章中写道:“计划是在库中搜索并找到使用Arduino草图控制机器人电机的引脚。”

  2. 嗨!

    我运行了这段代码,但遇到了最奇怪的问题。我想问一下您,因为您在使用mBot Ranger和arduino方面有丰富的经验。当我将此代码上传到Auriga开发板并且该bot仍旧保存在计算机上时,它一直在正常运行。但是,当我取下电缆时,一旦超声波传感器感应到墙壁,电动机就会稍微移动然后停止并继续执行此操作。关闭并重新打开mBot没什么区别。我也更换了电池,但问题仍然存在。你能告诉我我做错了吗?

    亲切的问候

  3. 你好,

    I’我只是想让我的马达在mBot游侠上移动。一世’通过读取固件,可以成功地从传感器读取内容。但是,我’我被电机卡住了:我’我尝试了很多事情–包括上面的例子–但可惜-没有任何动作。

    该代码执行正常,没有错误。我认为引脚号可能不适合我的电路板。您如何找到主板的引脚?当我查看mBot的固件代码时,会看到SLOT_1和SLOT_2之类的东西,而不是硬编码的数字。
    关于如何确保我的针脚正确的任何想法吗?

  4. 你好

    您能更准确地告诉我我在图书馆中寻找什么吗?我应该在哪里找到这些别针? (一世’是arduino的新手,所有与它有关的东西’在Google上关于mBots(Ranger)的混乱。

    首先,我尝试使用MakeBlock中的库通过Arduino IDE对机器人进行编程。但是我可以’设法使用motor.run()启动电动机。我尝试对电动机进行各种地址处理(MeDCMotor名称(9)或MeDCMotor名称(Slot_1)或MeDCMotor名称(M1)等),但没有任何效果。我真的认为’这与电机的地址处理有关,因为我的代码可以完美地编译。但是您的方法有效,’是我的机器人上唯一可用的代码。

    另外,我尝试了与互联网不同的示例,这些示例也使用这些库,但这些都没有用。它’在Google上寻找答案很费劲,因为80%的结果与mBlock应用程序有关,而不与Arduino IDE有关。

    Multumesc!

    • 嗨,伊曼纽尔,
      “您能更准确地告诉我我在图书馆中寻找什么吗?我应该在哪里找到这些别针?” –首先,您必须知道您使用哪种类型的板’re using – Auriga, MegaPi,…?

      根据要从Arduino IDE控制的内容(传感器,电机),您必须在以下文件中找到合适的引脚: //github.com/Makeblock-official/Makeblock-Libraries/tree/master/makeblock/src
      通常,引脚号位于文件的开头。

      “I really think there’这与电机的地址处理有关,因为我的代码可以完美地编译。但是您的方法有效,’是我的机器人上唯一可用的代码。” –很可能你不知道’t控制正确的引脚。

      铜胎-

      • 你好,我们又见面了!这将是一个更长的消息,但是如果您不愿意,可以忽略它,我将完全理解。我没有’甚至期望我回答第一个,因为它’一个2岁的职位。

        太好了,我’我有一个Auriga板。您的代码正在运行。我还在底部的/meauriga.h中找到了相同的引脚,但是如果我必须搜索其他引脚(未像meauriga.h中明确指定),我想我会迷路的。

        我浏览了图书馆的书面代码,’t yet figured why it’不能使用其库和功能,而且板子类型不起作用’确实很重要,因为每种类型的电路板都使用相同的MeDCmotor文件。也许我’尝试用另一个构造函数调用meDCmotor’我给引脚指定了参数,但是我看到它们在参数列表中只有1个引脚作为方向,据我所知,每个电机我需要2个引脚。最好的决定是坚持您的方法。

        关键是我们有一个学校项目,我选择了mbot Ranger。作为首要任务,我们的老师说要对机器人进行如下控制循环:我给他设定速度,如果机器人开始上坡或下坡,则必须保持相同的速度。

        在我看来,编码器和电机是分开的两部分,所以我的方法是这样的:我为电机设置了一个速度,如果从编码器读取的速度低于设置为电机的速度,则说明机器人是攀爬,我需要提高速度。 (就像我在电动机上施加5伏特的电压一样,它以5 m / s的速度运行,但是如果我继续以5伏特的功率供电,并且速度降低,那一定是因为’攀爬或其他障碍)。

        无论如何。我发现我可以’真的做到了。我不’认为我什至可以同时设置和读取编码器,因为我使用并设置了引脚作为输出。我还注意到在库中的getSpeed()函数中,它没有’t实际上是从硬件读取的,但它是从我先前设置的值读取的)。

        我应该使用内置陀螺仪吗?一世’m afraid that I’会解决与电动机相同的问题,也许我赢了’无法正确找到和配置引脚。一世’当我再次使用机器人时,请立即尝试一下(大学大楼内只有少数几个用途)。

        Multumesc din nou。允许终极裁判,哈哈! O zi faina!

        • 你好
          好吧,您想用PWM和编码器控制机器人。我没有’不要这样尝试,说实话,我没有’不知道该怎么做。也许您必须尝试与制造商联系以使您可以访问代码。
          附注:达卡·德·波阿朱塔(Daca Te Pot Ajuta),古拉·德拉奥利坎德(cari mare drag oricand)!
          问候,
          德拉戈斯

  5. 我需要mblock代码,以便可以通过我的移动应用或遥控器进行控制,以将其直接左右移动
    我正在建立一个由我的移动应用程序控制的相扑机器人
    它具有超声波传感器,线路跟随器和蓝牙。
    它具有四个马达端口1具有右前马达端口2具有左前马达,而part3具有右后马达,端口4具有左后马达

  6. 我发现在大多数情况下,mbot文档不佳甚至根本不存在,令人难以置信的是,每个支持此类信息的请求都只是将我指向了源代码,而该源代码几乎为零文档,因此我开始为Ranger创建该文档:
    //docs.google.com/document/d/1EpMWJo9pP2J_pstzXA-XHK8t00Z70SCZYwZ_Kl7VLuw/

    它基于另一个mbot用户创建的此文档以及其他在线资源(但MakeBlock很少)。希望它会帮助别人。

发表回覆 流行伊曼纽尔 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *