我目前正在研究一个自主机器人。开始时,我们使用 Raspberry Pi 从 GPIO 引脚上的旋转编码器收集数据。我们编写了一个 python 文件,当我们将轮子旋转 1 次时,它可以完美地读出 73.736 个脉冲。我们使用轮与编码器的比率和编码器旋转 1 圈的脉冲量来计算这个脉冲量。号码是正确的。
后来,我们注意到我们的相机丢失帧是由于 SDK 在 Raspbian 上不能很好地工作。就在那时,我们决定加入 UP Squared 董事会。我们安装了 Ubuntu 18.04,因为我们使用的是 ROS Melodic,并且 SDK 更适用于这个操作系统。UP Squared 板现在可以完美地与相机配合使用,并且可以很好地接管 Pi 的其他任务。
我们尝试了我们的脚本来读出我们在 UP Squared 上的编码器。起初我们没有得到任何结果,因为内核不支持 GPIO 和不是为 Ubuntu 18.04 制作的 RPi.GPIO 包。我们将内核降级到 5.0.0 通用版本,并制作了三个版本的脚本:原始版本,一个使用 mraa 包,一个使用外围包。我们还设法为 Ubuntu 18.04 安装了一个 RPi.GPIO 包。
我们让他们三个都读出了我们的编码器数据!但不是正确的方式......当我们驱动我们的机器人真的很慢时,它们都倾向于每转 73.736 个脉冲,但是当我们驱动全功率时,它们只能读取 17-24K 脉冲。我们开得越慢,我们通过的脉冲就越多。此外,当我们开得快时,脚本认为我们向前行驶,当我们开得慢时,它认为我们向后行驶。当我们倒车时,情况正好相反。
我们已经进行了一段时间的故障排除......这是我们注意到并试图抓住的一些事情:
- 电流可能太低,无法为连接到上平方的所有设备供电(它从电源模块获得电源)。所以我们把它连接到它原来的充电器上,但没有区别。
- 我们尝试了 GPIO 的不同引脚,所有通用 GPIO 引脚,没有区别。
- 我们在某处读到 UP Squared 没有上拉/下拉电阻,所以我们在机器人中放入了自己的硬件电阻,没有区别。
- 我们尝试使用 Linux GPIO pinout、RPi pinout 和 normal Pin numbers,只有普通 pin numbers 可以通过,其余的会出现 pin 不存在的错误。
- 我们一直在寻找 BIOS 设置也许能够改变一些东西,但没有找到。
我提供了我们的 mraa 脚本来读出带有这个问题的编码器。外围和 RPi.GPIO 变体使用相同的方法。
我们认为这可能是由于脉冲来得太快,但我认为如果 Raspberry 可以处理它,那么 UP Squared 也应该能够做到这一点。也许处理器计数器/时钟或中断有问题影响我们的脚本?有谁知道为什么不是所有的脉冲都通过?
提前非常感谢!净连