关于电路
项目

C-Biscuit:系统集成和测试

2016年11月28日经过罗伯特·基姆(Robert Keim)

最后,我们拥有功能性机器人所需的一切。让我们将零件放在一起,看看C-Biscuit演示机器人可以做什么。

最后,我们拥有功能性机器人所需的一切。让我们将零件放在一起,看看C-Biscuit演示机器人可以做什么。

C-Biscuit系列

  1. C-Biscuit:黑客和业余爱好者的机器人平台
  2. C-Biscuit:设计选择和理由
  3. C-Biscuit功率:5V 3A弹板调节器
  4. C-Biscuit功率:5V调节器的撬棍保护电路
  5. C-Biscuit:手术的大脑
  6. C-Biscuit功率:调节器和撬棍电路的组装和测试
  7. C-Biscuit:监视机器人的健康
  8. C-Biscuit:机器人系统体系结构
  9. C-Biscuit:RCB的示意图 - 微控制器,电机控制器
  10. C-Biscuit:RCB的示意图 - 功率,步进
  11. C-Biscuit:机器人控制板的布局和组装
  12. C-Biscuit:系统集成和测试

支持信息

  • stackexchange线程关于如何在Raspberry Pi 3上成功使用UART(这并不像您想象的那么简单)

用魔杖出去,与pi一起

电子项目与生活中的许多其他事情一样,并不总是按照我们的期望来解决。C-Biscuit演示机器人绝对是这种情况,该机器人已经发生了几次曲折,成为了一个功能系统。最后,最大的扭曲/转弯发生在最后,当我们决定消除魔杖并用覆盆子Pi 3代替它时。

进行这种变化的主要原因非常简单 - 魔杖已成为我们主要设计目标的障碍,即通过Wi-Fi将实时视频从机器人传输到计算机。在我们最初的尝试失败后,C-Biscuit团队中没有人知道如何实现这一目标。It was one of those situations where we expected the third-party software environment to handle the details of the video transmission and, when it became clear that this was not exactly the case—well, let’s just say that the Wandboard quickly fell out of favor.

幸运的是,帕特里克提出了搁置魔术板并使用一个的好主意覆盆子皮反而。这也意味着使用覆盆子Pi摄像头instead of the WandCam, because of course we cannot expect a Wandboard camera to seamlessly interface to a Raspberry Pi (and seamless is what we want here—maybe there’s some way to make a WandCam talk to a Pi, but we’d much rather pay another $30 for a camera that只是起作用)。

为什么是PI?

Raspberry Pi比Wandboard具有更完整的软件支持,它使我们可以访问更大的体验(来自AAC贡献者和更广泛的RPI社区)。它也比弹簧板小且价格便宜。对于我们希望C-Biscuit支持的某些图像处理任务,PI可能不够强大,但是我们稍后可以担心。目前,我们只需要无线视频供稿和一些基本的串行通信,RPI 3当然可以提供该功能。

我们当然对使用PI摄像机(版本2)并不后悔。该模块确实确实轻松地与RPI接口,并且提供了高分辨率(8兆像素)以及各种有用的功能(可自定义的输出分辨率和帧速率,图像旋转,亮度和对比度调整等)。

因此,现在您知道了为什么C-Biscuit最终以Pi而不是魔杖而结束。这是更新的框图:

幸运的是,RPI可以使用最初用于弹簧板的相同的5 V电源和UART连接,因此我们无需对机器人控制板(RCB)进行任何修改。哇!

硬件

让我们看一下机器人的组装方式,然后我们将介绍有关视频和通信接口的一些详细信息。

因此电池和RCB在上层,RPI下方。简单地将相机插入RCB前边缘附近的双行标头中。我将一些电胶带包裹在后排销钉上,以免它们在摄像头PCB背面的任何东西(该胶带还可以确保贴合)。

这种安排对于粗糙的地形不足,但对于初始测试和演示应该是可以的。这里还有一些组装详细信息:

  • 每当将12 V传递到RCB时,启用了机器人,并且每当两个电源连接器配合并关闭电源开关时,将12 V输送到RCB。

  • RPI通过其USB连接器供电。我只是切碎了标准微型USB电缆的一端,然后将电源和接地线连接到RCB上的5 V和GND螺丝端子。事实证明,红色的电线是电源,黑线是地面的,我可能敢假设所有电缆制造商都遵循这种相当完善的颜色代码的定制。但是,在插入所有内容并翻转开关之前,请务必打破万用表,并找到一种仔细检查PINOUT的方法。
  • 串行通信是通过RPI的UART TX和RX引脚到RCB的UART RX和TX信号的两条电线启用的。无需接地线,因为供电连接可确保RCB和RPI处于相同的地面电位。It would be good to include a ground specifically for the UART interface if we were worried about signal integrity, but in this case we’re not pushing any limits—we’re using 3.3 V logic at the astonishing rate of 9600 baud, and the UART lines have decent physical separation from the noisy motors.
  • 请注意,我如何将机器人放在一本书上,以使坦克胎面与表面没有接触。这是一种简单而非常有效的方法,可以防止在遇到固件故障或不小心敲开电源开关或没有意外的情况下,机器人在工作台上脱离工作台的噩梦。

世界上最好的RPI视频软件

好吧,好吧,我只尝试了两种技术。第一个不起作用,第二个不起作用。但是,在第一次RPI尝试产生的弹簧板和曲折的故障之后,看到第二个解决方案的表现如何,这真是令人印象深刻。该软件包称为RPI CAM Web界面,您可以阅读所有有关它的信息这里

我要跳过细节,因为广泛维基有您需要知道的一切才能开始。总体过程如下:通过电缆或Wi-Fi将RPI连接到网络。在RPI上安装软件并运行它。然后,您只需打开自己喜欢的浏览器,然后通过键入“ http:// rpi_ip_address:port/subfolder”来连接视频流(请参阅Wiki)。您看到的是:

低延迟视频出现在浏览器窗口中,您还可以捕获图像或视频并修改相机设置:

这不是自动机器人

如果机器人所能做的就是四处走动或向前移动,直到撞墙。因此,我们需要一种方便的方式来控制其运动,这正是以下Python脚本提供的:

导入序列ser = serial.serial(port ='/dev/ttys0',baudrate = 9600,parity = serial.parity_none,stopbits = serial.stopbits_one,bytesize = serial.eight.eight.eight.eight.eight.eight.eightbits,timeout = 1),而true:repsshts = rawd_input(respons = raw_input(raw_input(raw_input(raw_input)“ enter命令:”)如果响应==“ forffers”:ser.write(“ forward \ r” .encode())elif响应==“反向”:ser.write(“ recters \ r” .encode())elif响应==“ go”:ser.write(“ go \ r” .encode())elif响应==“ stop”:ser.write(“ stop \ r” .encode())elif响应==“ s“:ser.write(“ stop \ r” .encode())elif不响应:ser.write(“ stop \ r” .encode())elif响应==“ rotate r”:ser.write(“ rotate r rotate r r rot r r rot r r rotate r r rotate r r rotate r r rotate r r rotate r r rotate r”\ r“ .encode())elif响应==“旋转l”:ser.write(“旋转l \ r” .encode())elif响应==“低速”:ser.write(“低速\ r \ r)“ .encode())elif响应==“高速”:ser.write(“高速\ r” .encode())elif响应==“非常高速”:ser.write(“非常高速\ r)“ .encode())elif响应==“电池电压?”:ser.write(“电池电压?\ r” .encode())print(ser.read(23))elif响应==“禁用电池保护”:ser.write(“禁用电池保护\ r” .encode())elif响应==“启用电池保护”:ser.write(“启用电池保护\ r” .encode())elif响应==“出口”:休息

cbiscuit_robotcontrolscript.zip

脚本本身是自我解释的。它要求输入,然后查看用户输入的字符串,以确定应在UART上传输哪个ASCII消息。然后,RCB上的EFM8微控制器接收消息并相应地控制电动机。

但是,如果我们无法直接访问RPI,我们如何使用脚本?那就是SSH的来源。(单击这里有关通过SSH控制Raspberry Pi的更多信息。)我们已经具有Wi-Fi网络连接,因此我们只需进入RPI,然后通过控制台运行脚本。

您可能会在Python脚本中注意到的一件事是,有三个命令要停止。除了“停止”之外,我们还拥有“ S”和一个空字符串。这是一个重要的功能,因为它可以确保您即使在压力下也能够快速停止机器人。

假设您会分散一分钟的注意力,接下来您知道的是,您的机器人即将跌落楼梯,或者以高速撞到门,或者撞上您喜欢的室内植物。您可能没有时间键入“停止”,这就是为什么脚本被设计为将“ s”解释为“停止”的原因 - 您有时间击中一个字母然后输入键。

但是,还有最糟糕的情况:您的机器人处于严重的危险之中,您感到恐慌。也许您不记得停止命令,或者也许您在尝试发送“ S”命令时碰到了错误的钥匙。好吧,您也在这里覆盖,因为停止机器人所需要做的就是按Enter键!如果您只按Enter不过是按ENTER,则来自RAW_INPUT()函数的返回字符串将是空的,并且脚本将一个空字符串解释为停止命令。

此屏幕截图为您提供了以下视频中显示的机器人动作的命令序列:

固件

固件非常简单。有一个简单的UART接口用于与RPI通信,可编程计数器阵列(PCA)用于生成PWM电动机驱动信号。您可以使用以下链接下载所有源文件和项目文件。该代码使用描述性标识符并进行了彻底的评论,因此您不应遇到太多麻烦理解细节。

cbiscuit_robotcontroffirmware.zip

您会注意到的一件事是用于USB通信的其他文件和代码。您可以暂时忽略这一点,因为演示机器人固件中未实现USB功能。

结论

现在,我们拥有功能齐全的C-Biscuit演示机器人,这意味着这一系列文章已经完成。但是,请记住,C-Biscuit不是一个机器人,而是机器人项目的平台。换句话说,这个演示机器人只是开始!