Romo iOS SDK
Romo SDK 为您提供编写 Romo 机器人软件的能力。下载 SDK 后,本指南将帮助您入门,以便您可以开始为 Romo 开发应用程序。
本项目是 Romo SDK 的延续,旨在为可爱的但不幸停止生产的 iPhone 机器人 Romo 注入新的活力。目标是支持一个与 Romo 平台和智能手机机器人积极互动的制造者、导师和研究人员社区。
SDK 分为 3 个主要框架,因此您可以选择在应用程序中使用什么。当前框架列表如下
RMCore
使用您自己的应用程序控制 Romo 的硬件!通过 RMCore,您可以驱动所有三个电机,闪烁 LED,并访问 Romo 基底的状态信息。
RMCharacter
RMCharacter 允许您为应用程序添加 Romo 令人喜爱的个性。当有人提及您的用户名时,Romo 激动起来!现在他能做到了!
RMVision
RMVision 允许您使用 iPhone 的相机,通过计算机视觉让 Romo 看见并理解世界。
设置项目
您有多种选择
使用 CocoaPods
在您的应用程序中包含 Romo SDK 的最简单方法是使用 CocoaPods
pod 'Romo'
请注意,这将使您获得 RMCore
。
如果您还需要 RMCharacter
,请添加
pod 'Romo/RMCharacter'
确保将 use_frameworks!
注释掉,否则您可能会遇到缺少资源的问题。
如果您还需要 RMVision
,请添加
pod 'Romo/RMVision'
确保将 use_frameworks!
注释掉,否则您可能会遇到缺少资源的问题。
完整的带有所有框架的 PodFile
应该像这样
# Uncomment the next line to define a global platform for your project
platform :ios, '7.0'
target 'My Cool Romo App' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for My Cool Romo App
pod 'Romo'
pod 'Romo/RMCharacter'
pod 'Romo/RMVision'
end
Carthage
尽管尚未测试,但 Carthage 的基本文件夹结构已经到位,所以理论上它应该已经可以工作了。
手动
- 您可以将来自要使用的框架的文件拖放到您的项目内。所有源文件都在
Classes
文件夹中,而且可能在RMCharacter
的情况下有额外的Assets
文件夹。
启用配件
注意:仅当您使用 RMCore 来与机器人接口时。
-
在 XCode 中导航到应用程序的
Info.plist
文件,该文件默认位于 Supporting Files 文件夹中。 -
点击列表顶部行(“Information Property List”),然后点击加号按钮添加新条目。
-
XCode 将会提示您输入此新条目的密钥。使用
支持的外部附件协议
。展开新创建的元素,将 "项目0" 的值更改为com.romotive.romo
。 -
就这些!保存文件,您的应用程序就可以开始与硬件附件进行通信了。
开始使用
现在我们已经有一个使用 Romo SDK 的项目,是时候开始编写一些代码了!
如果您正在使用 RMCore 和 ObjC,以下是要做的一些操作...
- 引入 RMCore 框架
#import <Romo/RMCore.h>
- 实现 RMCoreDelegate 接口
@interface YourVC : UIViewController <RMCoreDelegate>
- 为机器人添加一个属性,其中包含您希望使用的协议(在这里,我们指定机器人可以倾斜头部、驾驶和使用 LED)
@property (nonatomic, strong) RMCoreRobot<HeadTiltProtocol, DriveProtocol, LEDProtocol> *robot;
- 将代理初始化为机器人(通常在 viewDidLoad 中)
[RMCore setDelegate:self];
- 实现连接代理(在机器人连接时触发)
- (void)robotDidConnect:(nonnull RMCoreRobot *)robot
{
// Currently the only kind of robot is Romo3, so this is just future-proofing
if (robot.isDrivable && robot.isHeadTiltable && robot.isLEDEquipped) {
self.robot = (RMCoreRobot<HeadTiltProtocol, DriveProtocol, LEDProtocol> *) robot;
}
}
- 实现断开连接代理(在机器人断开连接时触发)
- (void)robotDidDisconnect:(nonnull RMCoreRobot *)robot
{
if (robot == self.robot) {
self.robot = nil;
}
}
现在,您可以为机器人发送命令。以下是一些示例:
- 告诉 LED 每 1 秒闪烁一次(LED 将在每个秒的 40% 时间内是亮的)。
[self.robot.LEDs blinkWithPeriod:1.0 dutyCycle:.4];
- 告诉基座倾斜手机到特定角度(这里,是 110 度)。
[self.robot tiltToAngle:110 completion:^(BOOL success)
{
if (success) {
NSLog(@"Successfully tilted");
} else {
NSLog(@"Couldn't tilt to the desired angle");
}
}];
- 告诉基座以大约 1 米/秒的速度向前移动。
[self.robot driveWithRadius:RM_DRIVE_RADIUS_STRAIGHT speed:1.0];
- 告诉机器人逆时针转 90 度。
[self.robot turnByAngle:90.0
withRadius:RM_DRIVE_RADIUS_TURN_IN_PLACE
completion:^(float heading) {
NSLog(@"Finished! Ended up at heading: %f", heading);
}
];
- 告诉所有电机停止。
[self.robot stopAllMotion];
- 当应用进入后台时,允许机器人保持连接。
[RMCore allowBackground:YES];
在您应用的 Info.plist
中,新增一个键,选项文本为 Required background modes
,并为第一个项目选择 App communicates with an accessory
的值。
如果您正在使用 RMCore 和 Swift,以下是要做的一些操作...
- 引入 RMCore 框架
import Romo
如果您不使用 CocoaPods,您需要手动使用桥接头文件 MyCoolRomoApp-Bridging-Header.h
引入 RMCore 框架
#import <Romo/RMCore.h>
- 实现 RMCoreDelegate 协议
class ViewController: UIViewController, RMCoreDelegate {
- 为机器人添加一个属性,其中包含您希望使用的协议(在这里,我们指定机器人可以倾斜头部、驾驶和使用 LED)
var robot: RMCoreRobotRomo3?
- 将代理初始化为机器人(通常在 viewDidLoad 中)
RMCore.setDelegate(self)
- 实现连接代理(在机器人连接时触发)
func robotDidConnect(_ robot: RMCoreRobot)
{
// Currently the only kind of robot is Romo3, so this is just future-proofing
if robot.isDrivable && robot.isHeadTiltable && robot.isLEDEquipped {
self.robot = robot as? RMCoreRobotRomo3
}
}
- 实现断开连接代理(在机器人断开连接时触发)
func robotDidDisconnect(_ robot: RMCoreRobot) {
print("Disconnected")
if robot == self.robot {
self.robot = nil
}
}
现在,您可以为机器人发送命令。以下是一些示例:
- 告诉 LED 每 1 秒闪烁一次(LED 将在每个秒的 40% 时间内是亮的)。
robot?.leds.blink(withPeriod: 1.0, dutyCycle: 0.4)
- 告诉基座倾斜手机到特定角度(这里,是 110 度)。
robot?.tilt(toAngle: 110, completion: { success in
if (success) {
print("Successfully tilted")
} else {
print("Couldn't tilt to the desired angle")
}
})
- 告诉基座以大约 1 米/秒的速度向前移动。
let RM_DRIVE_RADIUS_STRAIGHT: Float = 9999
robot?.drive(withRadius: RM_DRIVE_RADIUS_STRAIGHT, speed: 1.0)
- 告诉机器人逆时针转 90 度。
let RM_DRIVE_RADIUS_TURN_IN_PLACE: Float = 9999
robot?.turn(byAngle: 90.0, withRadius: RM_DRIVE_RADIUS_TURN_IN_PLACE, completion: { (success, heading) in
print("Finished! Ended up at heading: %f", heading)
})
- 告诉所有电机停止。
robot?.stopAllMotion()
- 允许机器人在应用进入后台时保持连接。
RMCore.allowBackground(true)
在您应用的 Info.plist
中,新增一个键,选项文本为 Required background modes
,并为第一个项目选择 App communicates with an accessory
的值。
使用 RMCharacter 与 ObjC,一个好的起点就是...
- 为角色添加一个属性
@property (nonatomic, strong) RMCharacter *romo;
- 初始化你的角色(通常在 viewDidLoad 中进行)。
- (void)viewDidLoad
{
[super viewDidLoad];
// Grab a shared instance of the Romo character
self.romo = [RMCharacter Romo];
}
- 将角色添加到父视图中(通常在 viewWillAppear 中进行)。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Add Romo's face to self.view whenever the view will appear
[self.romo addToSuperview:self.view];
}
- 确保在完成角色使用后解除角色的视图(通常在 viewDidDisappear 中进行)。
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
// Removing Romo from the superview stops animations and sounds
[self.romo removeFromSuperview];
}
现在你已经准备好向角色发送命令了。你可以做像以下这样的事情:
- 告诉 Romo 改变他的面部表情
self.romo.expression = RMCharacterExpressionCurious;
- 告诉 Romo 改变他的情绪
self.romo.emotion = RMCharacterEmotionScared;
- 告诉 Romo 看向上方和左方
[self.romo lookAtPoint:RMPoint3DMake(-1.0, -1.0, 0.5)
animated:YES];
示例项目 / 示例
我们已经编写了一些示例应用程序,帮助你开始使用 Romotive SDK。每个框架都有一个 Examples
子文件夹,其中包含一个或多个示例项目。一些你可以找到的项目包括
HelloRMCore
通过驱动其马达和 LED 控制你的 Romo 的硬件。
当 iDevice 连接到机器人时,该简单应用程序在屏幕上显示三个按钮。其中两个按钮在被点击时将机器人的头部上下倾斜。第三个按钮告诉机器人绕着圈行走并闪烁其 LED。
HelloRMCoreSwift
与 HelloRMCore 相同,但使用 Swift
HelloRMCharacter
循环Romo的表情和情绪,看看他可以环顾四周。
要开始与RMCharacter对象交互,我们将向您展示如何在您的iDevice上显示Romo的面部。在Romo的面部上轻扫您的手指,让他四处张望。当您的手指离开屏幕时,Romo将执行一个随机表情(短暂的动作)并过渡到随机情绪(持续的形态)。
HelloRomo
使用RMCore和RMCharacter驱动Romo四处走动并做表情。
在Romo的面部左右滑动,他就会开始按您滑动方向转圈走。您可以戳Romo的脸,使他停止动作。最后,向上滑动可以改变Romo的情绪状况。
文档
文档可以在与SDK捆绑的“docs”文件夹中找到。
常见问题(FAQ)
Romo应用在App Store上有吗?
在App Store上找到Romo应用。
Romo应用开源吗?
在这里找到Romo应用的源代码
固件源代码是否可用?
在这里找到Romo的固件源代码 这里
在哪里可以购买Romo机器人?
在线商店似乎有充足的库存。
哪个Romo能与SDK配合使用?
任何具有30脚或闪电端口的Romo。这包括Romo 3A、3B、3L型号。
哪个iPhone能与Romo一起使用?
3GS及更高版本的iPhone。iPhone SE(第一代)与iPhone 12 mini非常搭配。iPhone 6、7和8需要稍微挤压,但搭配得恰到好处。iPhone X和iPhone 12(非mini)过大。
哪些iOS版本与SDK兼容?
最新版SDK从iOS 9.0支持到iOS 14!旧版SDK也兼容iOS 6、7和8。使用CocoaPods自动获取与您的iOS目标兼容的最新版。
这是怎么开始的?
作为Romo项目的开发公司,Romotive在关闭后慷慨地将代码开源,并表示:“我们决定将Romo的所有智能部分全部开源。我们所有的项目都存放在这个仓库中,您可以自由地按照您喜欢的任何方式进行使用。”
问题和pull请求总是受欢迎的!
赞助者
- Miraenda
- Suschman
- Matt Duston
通过成为赞助者来支持我们!