Pololu 是一个教学&DIY电路硬件器材供应商,类似国内的矽递科技。他们把一些常用的开发板和教学电路等组件产品化,提供给业余开发者和学生。也算是创客教育的一类。
Romi 是 Pololu 的产品。Pololu 作为 FIRST 竞赛中的第三方,其产品 Romi 也只是部分还原了 FIRST 竞赛套件的开发流。因此在下文中学习和理解 Romi 的时候,建议把它当做一个机器人开发套件而不是 FIRST 机器人开发套件,以提醒这两者间的独立性。
Romi 作为一个简易版的机器人,可以帮助小白快速掌握硬件编程和开发。
Romi 和 FIRST 机器人在代码层面存在可复用性,但都在基础层面。这就类似于,学习了伪代码后,会发现各编程语言的基本逻辑是相同的。因此 Romi 确实适合从未接触过硬件编程的人用来入门 FIRST 竞赛的软件开发。但对于已经有过 Arduino 等单片机开发经验的人来说,学习 Romi 对 FIRST 竞赛帮助有限。
哪怕是不同的 FIRST 竞赛之间,其技术流程也存在较大的差异。这注定了 Romi 套件和 FIRST 竞赛间仍存在较大的独立性。
就像 1.2.1
中说的,如果你已经入门了单片机和编程,或者你希望专注于 FIRST 竞赛的硬件部分,Romi 并不能教会你什么。由于 Romi 是一个来自第三方的开发套件,其自由度远大于 FIRST 竞赛,后者需要的更多是对官方指定硬件的熟悉。更何况,FIRST 竞赛在机械工程方面的难度和发挥空间更是 Romi 所不具备的。
本文将着重于明晰 Romi 开发平台本身的概念,而不是侧重于 FIRST 竞赛相关的模拟。如果仅为使 Romi 模拟FRC机器人,可以参看官方文档,按步骤操作即可,并不需要过度学习该平台的技术细节。
因此,综合 1.2.1
和 1.2.2
所述,如果你的目标是参加 FIRST 竞赛,请自行考虑是否应该学习本文。
在继续阅读本文之前,有一些硬件开发的基础知识需要了解。此处将罗列必要的相关概念,以及推荐的学习资料。请在进入下一步之前了解相关概念。
此项非必须,但可以大大降低后续学习时的抽象度。
时间充裕的话,建议先了解计算机结构以及基本的编程原理。建议可以先从基础的软件编程入手。或者动手组装一台电脑,了解CPU、内存等结构的作用。
*注: 如果你是万科梅沙书院VMA的学生,可以选择 CSE202 / CSE302 / CSE304 (2022) 的课程学习 2.1.1
的相关概念
Arduino 是目前最流行的单片机开发平台,其中包含 Arduino 开发板、Arduino 固件、Arduino 编译器等。
*注: 如果你是万科梅沙书院VMA的学生,可以选择 EGR309 (2022) 的课程学习 2.1.2
的相关概念
树莓派是目前最流行的 Linux on ARM 开发平台。其级别从微波炉都在用的单片机,升级到了手机级别的ARM处理器。从运行 Arduino 固件,升级到了 Linux 系统。但其本质都是运行程序。此处不用过多的学习,但至少需要会给树莓派安装操作系统,并且配置开发环境。
Romi Robot Kit for FIRST 小车可以被拆分为车底盘部分以及树莓派开发板。其中,不带树莓派的底盘本身就是一块 Arduino 主板,熟悉 Arduino 的人看到 Romi 32U4 时 就能马上想到 Arduino UNO R3 使用的单片机 ATMEGA328PU4。而树莓派在 Romi 的运行中并不是必需品,但是是作为上位机,通过 I²C 提供更复杂的控制。
因此,不需要树莓派做上位机,Romi 也能作为一个 Arduino 机器人正常的运行。而安装树莓派后则可以进行更复杂的控制,甚至模拟 FIRST 的开发环境。
如果仅为模拟 FIRST 竞赛的环境,可以直接参看下方的开发文档。而本文会提供非FRC版,更全面的配置介绍。
直接参看官方文档:
安装 Arduino IDE:
直接参看官方文档:
Pololu A-Star Boards
测试代码:
x/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
直接参看官方文档:
Romi32U4
测试代码:
xxxxxxxxxx
/*
2022.5.14 new file
This example code is written by:
https://github.com/SynthesisDu
*/
Romi32U4Motors motors;
Romi32U4ButtonA buttonA;
void setup()
{
// Wait for the user to press button A.
buttonA.waitForButton();
// Delay so that the robot does not move away while the user is
// still touching it.
delay(1000);
}
void loop()
{
// Run forward.
ledYellow(1);
for (int speed = 0; speed <= 400; speed++)
{
motors.setLeftSpeed(speed);
motors.setRightSpeed(speed);
delay(2);
}
for (int speed = 400; speed >= 0; speed--)
{
motors.setLeftSpeed(speed);
motors.setRightSpeed(speed);
delay(2);
}
// Run backward.
ledYellow(0);
for (int speed = 0; speed >= -400; speed--)
{
motors.setLeftSpeed(speed);
motors.setRightSpeed(speed);
delay(2);
}
for (int speed = -400; speed <= 0; speed++)
{
motors.setLeftSpeed(speed);
motors.setRightSpeed(speed);
delay(2);
}
delay(500);
}
使用树莓派控制 Arduino 下位机时使用 I²C 信号传输,此时 Arduino 需要烧录专门的程序用以接收上位机的控制。
FRC版不需要此步骤,其定制版树莓派系统会自行烧录程序,跟随FRC版文档即可。
直接参看官方文档:
FRC版系统安装教程:
普通系统安装教程:
系统盘烧录不成功
如果教程中使用的软件无法排故,可以尝试 Rufus,我目前用过最强大的系统烧录软件。市面上有和没有的系统,家用主板到服务器我基本都试过,没遇到过 Rufus 造成的问题。
如果 Rufus 无法解决,接下来考虑下载的系统镜像不完整,尝试重新下载或更换镜像。
如果还有问题,基本可以怀疑是硬件的问题,可以尝试更换读卡器、更换SD/TF卡。因为这类存储卡转接USB也依靠一个桥主控芯片,便宜货确实容易有兼容性问题。
系统盘不引导
此处多提一嘴,如果使用树莓派4B等有无线网卡的型号,是可以直接连接树莓派的 WiFi 的。不同版本的操作系统可能有不同的 WiFi 密码,可以在 GitHub 下载的位置查看。
通电红灯常亮,绿灯不亮 按理说刚通电时,红灯常亮,绿灯会闪烁。红灯表示通电,绿灯表示读盘。绿灯闪烁说明树莓派开始加载操作系统了。而我本人就遇到通电后绿灯完全不亮的情况。
安装 WPILib 模组版 VSCode,之后便可和其他 FIRST 机器人一样在 VSCode 中开发。
Windows 版本的安装包以 .iso 文件的形式打包。安装的部分可以参考这个视频:
Linux 版本的安装包以 .tar.gz 文件的形式打包。
MacOS 版本的安装包以 .dmg 文件的形式打包。
直接参看官方文档:
直接参看官方文档: