Robo4J入门

Robo4J入门

这篇博文将向您展示如何快速开始使用Robo4J并解释一些关键概念。 

Robo4J包含一些关键的核心“模块”。 我们将在这里松散地使用“模块”一词,因为它们还不是JDK 9模块。 这些模块都被定义为它们自己的Gradle项目,并且在Gradle中有自己的编译时依赖性。 

当您构建自己的机器人时,通常会依赖于robo4j-core以及为您的机器人使用的平台定义的单位。 例如,用于Raspberry Pi的robo4j-units-rpi,或用于Lego EV3机器人的robo4j-units-lego。 
 


在这篇博文中,我将使用提供的Raspberry Pi lcd示例来展示如何在Raspberry Pi上设置和运行Robo4J。 米罗稍后将发布一个乐高示例。 
 

描述
robo4j,数学常用的结构如点,扫描(激光范围扫描),特征提取等。 大多数模块都依赖于此模块。
robo4j-HW-*特定于平台的模块,具有易于使用的特定硬件平台抽象。 例如robo4j-hw-rpi,它包含易于使用的抽象,适用于Adafruit和Sparkfun的常见现成硬件。
robo4j核心定义Robo4J框架的核心高级概念,例如RoboContext,RoboUnit和RoboReference。
robo4j-单元 - *一个特定于平台的模块,它定义了可以包含在项目中的高级RoboUnit。 这些模块基本上将硬件特定模块连接到Robo4J核心框架中,提供可以简单配置的即用型单元,可以是XML或代码。



请注意,可以使用robo4j-hw- *模块而无需购买框架的其余部分。 如果您只想引导使用您购买的硬件,而不使用框架的其余部分,那当然是可能的。 希望你会发现框架的其余部分足够有用。 

你要做的第一件事是拉动robo4j核心回购: 

git clone  https://github.com/Robo4J/robo4j.git

一旦完成git拉动源,您将需要将模块安装到本地maven存储库中: 

gradlew安装

现在您已准备好为LCD示例提取源: 

git clone  https://github.com/Robo4J/robo4j-rpi-lcd-example.git

我们最终将它全部构建成一个可运行的胖罐: 

gradlew:fatJar

现在,要运行该示例,只需运行jar: 

java -jar build \ libs \ robo4j-rpi-lcd-example-alpha-0.3.jar

如果您不在Raspberry Pi上,并且连接了Adafruit LCD屏蔽,那么您可以在任何硬件上运行该示例,向LCD工厂询问Adafruit LCD的Swing模型: 

java -Dcom.robo4j.hw.rpi.i2c.adafruitlcd.mock = true -jar build \ libs \ robo4j-rpi-lcd-example-alpha-0.3.jar

(这个特定的例子实际上可以在不使用Robo4J核心的情况下运行;请参阅我之前发布的robo4j-hw-rpi版本的示例 。) 

现在,让我们看看实例是如何设置的。 该项目有两个示例发射器。 一个是使用XML配置文件设置Robo4J, 一个用Java设置所有内容。 两者都是有效的方法,有时您可能想要混合它们 - 这是构建器支持的。 我将在此博客中使用XML版本。 

在此示例中,我们需要配置两个单元。 按钮单元和LCD单元。 它们实际上位于相同的硬件地址上(Adafruit使用MCP23017端口扩展器与按钮和LCD使用相同的I2C地址通信)。 然而,在软件中连接它们时将它们视为两个逻辑单元要好得多,而这正是Robo4J对待它们的方式。 

这是XML文件中最相关的部分: 

请注意,AdafruitLcdUnit和AdafruitButtonUnit是为我们提供的,它们只是为示例配置。 另请注意,它们与预期位于相同的硬件地址上。 没有更改或添加代码来配置这些单元。 然而,控制器单元是我们的,它定义了按下按钮时应该发生的事情。 

以下代码片段显示了如何实例化它(关注代码中最相关的部分): 


我们自己创建了一个RoboBuilder,我们将配置文件作为输入流添加到构建器中,就配置而言。 构建器将用于在总体RoboContext的上下文中实例化单个RoboUnits。 RoboContext可以被认为是对“机器人”(具有(通常)共享生命周期的RoboUnits的集合)的引用。 它目前是本地引用(仅在本地Java运行时),但是一旦我们获得网络服务,您还可以查找远程RoboContexts。 

一旦我们设置了RoboContext,我们就启动它,然后启动单个RoboUnits。 完成之后,我们还通过获取名为“lcd”的RoboUnit的引用向LCD提供一点启动消息,并向其发送初始LcdMessage。 
控制器(不是现成的单元)在LCD上运行很少的演示,并允许用户使用向上和向下按钮在演示之间导航。 只需到这里寻找消息来源。 

我将简单地指出,构建自定义单元最重要的部分是覆盖onMessage方法,并且该单元与大多数单元有些不同,因为它实际上是在内部状态上同步,并且将跳过所有按下的按钮。 demo正在运行。 

概要

这是robo4j框架目前的简要介绍。 请注意,我们当前对核心进行了更改,这些更改当前未实现,例如使用注释更改单个RoboUnits的线程模型/行为。 在达到1.0之前,预计会发生变化。 另请注意,我们目前实施的单位数量非常有限。 在我们发布1.0之前,这也将发生变化。 在我们在框架中实现更多机器人之前,我们不会发布第一版API。 

其中一个正在迁移到Robo4J的机器人是Coff-E 。 

希望这会有所帮助,请注意这一天都在变化。 事情将继续发生变化,至少在今年夏天之后。 如果您想添加自己的单位,硬件抽象或类似,请随时通过info@robo4j.io与我们联系。 我们很乐意得到更多帮助! 

:) 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值