yaboPP电子
项目

C-饼干:系统集成和测试

2016年11月28日通过罗伯特Keim

最后,我们拥有功能机器人所需的一切。让我们把这些作品放在一起,看看C-Biscuit Demo Bot可以做些什么。

最后,我们拥有功能机器人所需的一切。让我们把这些作品放在一起,看看C-Biscuit Demo Bot可以做些什么。

C-饼干系列

  1. C-Biscuit:黑客和爱好者的机器人平台
  2. C-Biscuit:设计选择和理由
  3. C型饼干功率:用于羽鹬的5V 3A降压稳压器
  4. C-饼干动力:5V稳压器的撬棍保护电路
  5. C-饼干:操作的大脑
  6. C-饼干动力:调节器和撬棍电路的装配和测试
  7. C-Biscuit:监控机器人的健康状况
  8. C-BISCUIT:机器人系统架构
  9. C-饼干:RCB微控制器,电机控制器的原理图设计
  10. C-饼干:RCB功率,步进的原理图设计
  11. C-饼干:机器人控制板的布局和装配
  12. C-饼干:系统集成和测试

支持信息

  • stackexchange螺纹关于如何成功使用覆盆子PI 3上的UART(它不像您认为的那么简单)

魔杖出来了,派进来了

yabosports官网电子项目,就像生活中的许多其他事情一样,并不总是以我们期望的方式制定。C-Biscuit Demo Bot绝对是这种情况,这已经采取了一些曲折,然后转向成为一个功能系统。当我们决定消除羽阳板并用覆盆子PI 3替换时,最终发生的最大扭曲/转弯。

这个改变的主要原因很简单——Wandboard已经成为我们首要设计目标的一个障碍,即通过Wi-Fi将机器人的实时视频传输到电脑上。在我们最初的尝试失败后,C-BISCUIT团队中没有人确切地知道如何完成这个任务。这是我们希望第三方软件环境来处理视频传输的细节的情况之一,但当情况变得明显不是这样时,我们只能说,Wandboard很快就不受欢迎了。

幸运的是,帕特里克想出了一个绝妙的主意,把魔杖板放在一边,用一个覆盆子PI.代替。这也意味着使用the覆盆子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?

树莓派拥有比Wandboard更完善的软件支持,它让我们获得了更多的经验(来自AAC贡献者和更广泛的RPi社区)。它也比魔杖板更小更便宜。对于我们希望C-BISCUIT支持的一些图像处理任务,Pi可能不够强大,但我们可以稍后再考虑这个问题。现在,我们只需要无线视频传输和一些基本的串行通信,而RPi 3当然可以提供这些功能。

我们当然不后悔使用Pi Camera(版本2)。这个模块确实可以毫不费力地与RPi接口,它提供了高分辨率(800万像素)以及各种有用的功能(可定制的输出分辨率和帧率,图像旋转,亮度和对比度调整,等等)。

所以现在你知道为什么C型饼干最终用PI而不是魔杖结束;以下是更新的框图:

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

硬件

让我们看看机器人是如何组装的,然后我们将介绍一些关于视频和通信接口的细节。

因此,电池和RCB位于上层,RPI下面关闭。将相机插入到RCB前边缘附近的双行标题中;我在后排销钉周围缠绕了一些电气胶带,使得它们在相机PCB的背面上没有清除任何内容(胶带也确保贴合贴合)。

这种安排并不适合崎岖的地形,但对于最初的测试和演示来说应该没问题。这里有一些更多的装配细节:

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

  • RPI通过其USB连接器供电。我只切掉了标准微USB电缆的一端,然后将电源和接地线连接到RCB上的5 V和GND螺钉端子。事实证明,红线是电源,黑线是地面,我可能敢于假设所有电缆制造商都遵循这种相当良好的彩色码定制;尽管如此,始终突破您的万用表,并找到一种方法可以在插入所有内容并翻转交换机之前仔细检查引脚。
  • 通过从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界面,您可以阅读所有信息这里

我将跳过细节,因为很广泛Wiki.有你需要知道的一切。整个过程如下:通过电缆或Wi-Fi将RPI连接到您的网络。在RPI上安装软件并运行它。然后,您只需打开您喜欢的浏览器并通过将“http:// rpi_ip_address:port / subfolder”键入地址栏(有关详细信息,请通过键入“http:// rpi_ip_address:port / subfolder”来连接到视频流。你所看到的就是这样:

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

这不是一个自主机器人

如果一切可以做的话,机器人将非常有用,在圆圈或向前移动,直到它击中墙壁。因此,我们需要一种方便的方法来控制其移动,这正是以下Python脚本提供的:

Import serial ser = serial。port='/dev/ttyS0',波特率= 9600,奇偶校验= Serial。PARITY_NONE stopbits =系列。STOPBITS_ONE bytesize =系列。EIGHTBITS超时= 1),而事实:响应= raw_input(“输入命令:”)如果响应= =“转发”:ser.write(“转发\ r”.encode ()) elif响应= =“反向”:ser.write(“反向\ r”.encode ()) elif响应= =“走”:ser.write(“\ r”.encode ()) elif响应= =“停止”:ser.write(“停止\ r”.encode ()) elif响应= =“s”:err .write("stop\r".encode()) elif not response: err .write("stop\r".encode()) elif response == "rotate r": err . "return ("rotate r\r".encode()) == "rotate l";if ("rotate l\r".encode()) response == "low speed": ser。写入("low speed\r".encode()) elif response == "high speed": ser。写入("high speed\r".encode()) elif response == "very high speed": ser。Write ("very high speed\r".encode()) elif response == "电池电压?":爵士。Write ("battery voltage?\r".encode()) print(ser.read(23)) elif response == "disable battery protection": ser. encode());elif response == "启用电池保护":ser。if ("enable battery protection\r".encode()) == "退出":中断

cbiscuit_robotcontrolscript.zip.zip.

脚本本身是不言自明的。它要求输入,然后查看用户输入的字符串,以便在UART上确定应传输哪些(如果有的话)ASCII消息。RCB上的EFM8微控制器然后接收消息并相应地控制电机。

但是,如果我们不能直接访问RPi,我们如何使用脚本呢?这就是SSH的由来。(点击这里有关通过SSH控制Raspberry PI的更多信息。)我们已经拥有Wi-Fi网络连接,因此我们只是将SSH放入RPI,然后通过控制台运行脚本。

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

假设你分心了一分钟,接下来你知道的是,你的机器人可能会从楼梯上滚下来,或者高速撞到门上,或者撞倒你最喜欢的室内植物。你可能没有时间输入“停止”,这就是为什么脚本被设计成“s”为“停止”——当然你有时间点击一个字母,然后输入回车键。

但是,有最糟糕的情况:你的机器人处于严重的危险和恐慌。也许你不记得停止命令,或者也许你在试图发送“s”命令时,你会在错误的钥匙上击中错误的钥匙。好吧,你也在这里覆盖,因为你必须做的就是停止机器人是按ENTER键!如果您只按了输入的内容,RAW_INPUT()函数的返回字符串将为空,并且脚本将空字符串解释为stop命令。

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

固件

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

CBISCUIT_RobotControlFirmware.zip

您将注意到的一件事是USB通信的其他文件和代码。您可以忽略此目前,因为在演示机器固件中未实现USB功能。

结论

我们现在拥有一个全功能的C型饼干演示机器人,这意味着这一系列物品是完整的。但是,请记住,C-Biscuit不是一个机器人,而是用于机器人项目的平台。换句话说,这个演示机器人只是开始!