Romi Robot Kit (for FIRST) 快速入门指南

本文首发于GitHub,原地址:
https://github.com/VMAxCoding/RomiDevDoc
https://vmaxcoding.github.io/RomiDevDoc/

1 简介

1.1 Pololu

Pololu 是一个教学&DIY电路硬件器材供应商,类似国内的矽递科技。他们把一些常用的开发板和教学电路等组件产品化,提供给业余开发者和学生。也算是创客教育的一类。

1.2 Romi

Romi 是 Pololu 的产品。Pololu 作为 FIRST 竞赛中的第三方,其产品 Romi 也只是部分还原了 FIRST 竞赛套件的开发流。因此在下文中学习和理解 Romi 的时候,建议把它当做一个机器人开发套件而不是 FIRST 机器人开发套件,以提醒这两者间的独立性。

1.2.1 学Romi的理由

Romi 作为一个简易版的机器人,可以帮助小白快速掌握硬件编程和开发。

Romi 和 FIRST 机器人在代码层面存在可复用性,但都在基础层面。这就类似于,学习了伪代码后,会发现各编程语言的基本逻辑是相同的。因此 Romi 确实适合从未接触过硬件编程的人用来入门 FIRST 竞赛的软件开发。但对于已经有过 Arduino 等单片机开发经验的人来说,学习 Romi 对 FIRST 竞赛帮助有限。

1.2.2 不学Romi的理由

哪怕是不同的 FIRST 竞赛之间,其技术流程也存在较大的差异。这注定了 Romi 套件和 FIRST 竞赛间仍存在较大的独立性。

就像 1.2.1 中说的,如果你已经入门了单片机和编程,或者你希望专注于 FIRST 竞赛的硬件部分,Romi 并不能教会你什么。由于 Romi 是一个来自第三方的开发套件,其自由度远大于 FIRST 竞赛,后者需要的更多是对官方指定硬件的熟悉。更何况,FIRST 竞赛在机械工程方面的难度和发挥空间更是 Romi 所不具备的。

1.2.3 本文立场

本文将着重于明晰 Romi 开发平台本身的概念,而不是侧重于 FIRST 竞赛相关的模拟。如果仅为使 Romi 模拟FRC机器人,可以参看官方文档,按步骤操作即可,并不需要过度学习该平台的技术细节。

因此,综合 1.2.11.2.2 所述,如果你的目标是参加 FIRST 竞赛,请自行考虑是否应该学习本文。

2 上手

2.1 知识储备

在继续阅读本文之前,有一些硬件开发的基础知识需要了解。此处将罗列必要的相关概念,以及推荐的学习资料。请在进入下一步之前了解相关概念。

2.1.1 基本的计算机知识

此项非必须,但可以大大降低后续学习时的抽象度。

时间充裕的话,建议先了解计算机结构以及基本的编程原理。建议可以先从基础的软件编程入手。或者动手组装一台电脑,了解CPU、内存等结构的作用。

2.1.2 Arduino / 单片机开发板

Arduino 是目前最流行的单片机开发平台,其中包含 Arduino 开发板Arduino 固件、**Arduino 编译器**等。

2.1.3 树莓派 / Linux 开发板

**树莓派**是目前最流行的 Linux on ARM 开发平台。其级别从微波炉都在用的单片机,升级到了手机级别的ARM处理器。从运行 Arduino 固件,升级到了 Linux 系统。但其本质都是运行程序。此处不用过多的学习,但至少需要会给树莓派安装操作系统,并且配置开发环境。

2.2 准备 Romi

Romi Robot Kit for FIRST 小车可以被拆分为车底盘部分以及树莓派开发板。其中,不带树莓派的底盘本身就是一块 Arduino 主板,熟悉 Arduino 的人看到 Romi 32U4 时 就能马上想到 Arduino UNO R3 使用的单片机 ATMEGA328PU4。而树莓派在 Romi 的运行中并不是必需品,但是是作为上位机,通过 I²C 提供更复杂的控制。

因此,不需要树莓派做上位机,Romi 也能作为一个 Arduino 机器人正常的运行。而安装树莓派后则可以进行更复杂的控制,甚至模拟 FIRST 的开发环境。

如果仅为模拟 FIRST 竞赛的环境,可以直接参看下方的开发文档。而本文会提供非FRC版,更全面的配置介绍。

2.2.1 硬件组装

直接参看官方文档:

2.2.2 Romi 32U4 Control Board 底盘 (主板) Arduino 部分
2.2.2.1 Arduino IDE 配置

安装 Arduino IDE:

直接参看官方文档:

  • 开发文档-ArduinoIDE: https://www.pololu.com/docs/0J69/5.2
  • 库管理器安装 Pololu A-Star Boards

测试代码:

/*
  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
}
2.2.2.1.1 Arduino IDE 安装错误和不识别问题排查
2.2.2.2 Arduino IDE 使用 Romi 32U4 包库

直接参看官方文档:

  • 开发文档-ArduinoIDE 使用 Romi 库: https://www.pololu.com/docs/0J69/6
  • 库管理器安装 Romi32U4
  • Romi包库开发文档: https://pololu.github.io/romi-32u4-arduino-library/

测试代码:

/*
  2022.5.14 new file
  This example code is written by:
  https://github.com/SynthesisDu
*/

#include <Romi32U4.h>

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);
}
2.2.2.3 Romi 32U4 Control Board 底盘配置为下位机

使用树莓派控制 Arduino 下位机时使用 I²C 信号传输,此时 Arduino 需要烧录专门的程序用以接收上位机的控制。

FRC版不需要此步骤,其定制版树莓派系统会自行烧录程序,跟随FRC版文档即可。

直接参看官方文档:

2.2.3 树莓派上位机部分
2.2.3.1 树莓派系统安装

FRC版系统安装教程:

普通系统安装教程:

2.2.3.1.1 系统安装的错误排查
  • 系统盘烧录不成功
  1. 如果教程中使用的软件无法排故,可以尝试 Rufus,我目前用过最强大的系统烧录软件。市面上有和没有的系统,家用主板到服务器我基本都试过,没遇到过 Rufus 造成的问题。
    · Rufus 发布页: https://rufus.ie/zh/
    · Rufus 微软商城版: https://apps.microsoft.com/store/detail/rufus/9PC3H3V7Q9CH
    · Rufus GitHub: https://github.com/pbatard/rufus
  2. 如果 Rufus 无法解决,接下来考虑下载的系统镜像不完整,尝试重新下载或更换镜像。
  3. 如果还有问题,基本可以怀疑是硬件的问题,可以尝试更换读卡器、更换SD/TF卡。因为这类存储卡转接USB也依靠一个桥主控芯片,便宜货确实容易有兼容性问题。
  • 系统盘不引导
  1. 如果新烧录的系统盘无法运行树莓派系统,直接重试一遍烧录系统的步骤。
  2. 上一步无效的话尝试以其他文件格式格式化存储介质。例如切换 GPT/MBR 分区表,修改 NTFS/FAT32 文件系统。
  3. 如果依然不行,换个系统镜像试试,否则为硬件问题。其实第二步和第三步概率相近,基本不分先后。
  4. 此处硬件问题就比较杂了,如果缺乏经验,也没什么好的建议了。
2.2.3.2 连接树莓派

此处多提一嘴,如果使用树莓派4B等有无线网卡的型号,是可以直接连接树莓派的 WiFi 的。不同版本的操作系统可能有不同的 WiFi 密码,可以在 GitHub 下载的位置查看。

2.2.3.2.1 首次启动故障排查
  • 通电红灯常亮,绿灯不亮
    按理说刚通电时,红灯常亮,绿灯会闪烁。红灯表示通电,绿灯表示读盘。绿灯闪烁说明树莓派开始加载操作系统了。而我本人就遇到通电后绿灯完全不亮的情况。
    • 我的排查结果是 Romi 提供的供电不足,树莓派无法开机。在更换电池前我直接给树莓派外接了 TypeC 的充电器,直接正常开机。
    • 后续扒掉外接线,更换电池,同样正常开机。
    • 此故障的原因大概是化学电池的电压波动超限,其电压依然能够点亮 Romi 的 LED 但无法让树莓派开机。

3 使用

3.1 FIRST 开发模式

3.1.1 安装软件开发环境

安装 WPILib 模组版 VSCode,之后便可和其他 FIRST 机器人一样在 VSCode 中开发。

3.1.1.1 Windows 系统

Windows 版本的安装包以 .iso 文件的形式打包。安装的部分可以参考这个视频:

3.1.1.1.1 Windows 安装注意事项
  • 直接用压缩软件解压此 .iso 文件可能会提示文件损坏,其实无需解压,只需要右键文件 --> 打开方式 --> 文件资源管理器,直接运行安装程序即可。
  • 运行安装程序后,偶尔会有命令行窗口弹出。
  • 建议在能访问外网的网络环境下安装。
  • 有 VPN 的情况下,包含在线下载,总安装时常一般不超过10分钟。
3.1.1.2 Linux 系统

Linux 版本的安装包以 .tar.gz 文件的形式打包。

3.1.1.3 MacOS 系统

MacOS 版本的安装包以 .dmg 文件的形式打包。

3.2 Arduino 开发模式

直接参看官方文档:

3.3 树莓派 – I²C -> Arduino 开发模式

直接参看官方文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值