GithubHelp home page GithubHelp logo

openftc / openrc-turbo Goto Github PK

View Code? Open in Web Editor NEW
37.0 5.0 100.0 75.66 MB

HTML 0.91% JavaScript 46.27% CSS 0.18% Java 43.35% XSLT 0.03% GLSL 0.01% Less 0.11% CMake 0.03% C++ 5.74% C 3.38% Shell 0.01%

openrc-turbo's Introduction

OpenRC-Turbo

OpenRC is a modified version of the official FTC SDK in which all of the source code that is normally tucked away inside the AAR files has been extracted into modules. This makes it easy to see and modify almost the entirety of the Robot Controller app's source code. In addition, the history in Git shows all changes that have been made to the core code since OpenRC's inception. This complements the changelogs that FIRST provides, allowing teams to see exactly what code has been changed.

Legality for competition use

According to the 2021-2022 Game Manual Part 1, teams are not allowed to replace or modify the portions of the SDK which are distributed as AAR files, per <RS08>. This means that in its default configuration, OpenRC is not legal for competition.

HOWEVER, in order to address this, OpenRC has a stock build variant which will compile the TeamCode and FtcRobotController modules against the official, unmodified AAR files, rather than against the extracted modules.

Device Compatibility

Compatible with all legal FTC Robot Controller devices for the 2021-2022 season, including the Control Hub.

Build variants

Variant Descriptions

Normal SDK 7.0 APK size: 63MB

  • Stock - 52.1MB APK (1.2x smaller)

    • Competition legal
    • 64-bit libs removed
  • Turbo - 11.6MB APK (5.4x smaller)

    Note: If you would like to use Blocks, you will need to copy your private Vuforia key into the Blocks/src/main/assets/CzechWolf file

    • Vuforia native library loaded dynamically
    • Vuforia/TF datasets loaded dynamically
    • OnBotJava removed
  • Extreme Turbo - 7.1MB APK (8.9x smaller)

    • Vuforia native library loaded dynamically
    • Vuforia/TF datasets loaded dynamically
    • OnBotJava removed
    • Blocks removed
    • Sound files removed

Setup Process

  1. Fork this repository
  2. Clone your fork
  3. Do git remote add upstream https://github.com/OpenFTC/OpenRC-Turbo.git
  4. Copy all of the files found in the filesForDynamicLoad folder of this repo into the FIRST/vision folder on the RC's internal storage
  5. Also copy the Freight Frenzy game assets from the AAR into that same folder (you can also find them attached on the 7.0 release tag)
  6. Select your desired build variant (see the Switching Build Variants section)

Update Process

Assuming you followed the above setup process, all that you need to do to update your fork when a new OpenRC release is available is:

  1. git pull upstream master
  2. Perform a Gradle Sync
  3. If the project fails to build, try Clean Project, Rebuild Project, and Invalidate Caches / Restart

Switching Build Variants

IMPORTANT: make sure to test that your project compiles correctly with the stock variant at least a week before your competition!

Note: you may get a "variant conflict" when switching variants. You can fix this by changing the conflicting module's variant to match the variant you want.

  1. Open the Build Variants tab in the lower left hand corner of Android Studio
  2. In the dropdown for the TeamCode module, select your desired variant
  3. Perform a Gradle sync

image-here

Versioning Scheme

To prevent confusion, OpenRC does not have its own version number. The version number will directly reflect the SDK version that the release is based on. However, the version number will have a letter appended to the end of it, which will be incremented (A-Z) for each release of OpenRC which is based on the same SDK version. When OpenRC is updated to be based on a new SDK version, the letter will reset to A.

For instance, the 3rd release of OpenRC based on SDK v5.0 would be 5.0C, whereas the first release of OpenRC based on SDK v5.1 would be 5.1A.

Dynamic Loading of TensorFlow and Vuforia Datasets

In order to reduce APK size, the Turbo and Extreme Turbo variants do not bundle the Vuforia and TensorFlow datasets in the APK. However, once copied onto the internal storage (see step #4 in the Setup Process section), you can still use them in your OpMode by making a very minor change.

NOTE: The samples in this repo have already been adjusted with this change.

/*
 * For Vuforia
 */
// Find a line similar to this in the program
vuforia.loadTrackablesFromAsset("DatasetName");
// And replace it with this (obviously adjusting the DatasetName)
vuforia.loadTrackablesFromFile("/sdcard/FIRST/vision/DatasetName");

/*
 * For TensorFlow
 */
// Find a line similar to this in the program
tfod.loadModelFromAsset("DatasetName.tflite");
// And replace it with this (obviously adjusting the DatasetName)
tfod.loadModelFromFile("/sdcard/FIRST/vision/DatasetName.tflite");

Release Notes:

8.0A

Released on 14 October 2022

  • Updates to SDK v8.0

7.2A

Released on 5 September 2022

  • Updates to SDK v7.2

7.1A

Released on 8 February 2022

  • Updates to SDK v7.1

7.0A

Released on 27 September 2021

  • Updates to SDK v7.0
  • Requires NDK for building
  • Now looks for libVuforiaReal.so in the FIRST/vision folder
  • Also requires new TF / Vuforia datasets to be downloaded from the releases page

6.2A

Released on 27 February 2021

  • Updates to SDK v6.2

6.1A

Released on 18 December 2020

  • Updates to SDK v6.1
  • Fixes issue #9

6.0A

Released on 25 September 2020

  • Updates to SDK v6.0
  • Changes vision datasets to be loaded from vision subfolder of FIRST folder to prevent the Vuforia XML files from appearing in the configuration editor

5.5B

Released on 30 August 2020

  • Shrinks Turbo/ExtremeTurbo APK size by a few hundred KB since 5.5A release
  • Adds core web management to Extreme Turbo variant, increasing compatibility with Control Hub
  • Logs build variant to RobotLog

5.5A

Released on 28 August 2020

  • Update to SDK v5.5

5.4B

Released on 11 August 2020

  • Improve compatibility with Control Hub

5.4A

Released on 15 January 2020

  • Update to SDK v5.4

5.3B

Released on 22 November 2019

  • Fix TFOD crash on stock due to incorrect version of TFOD library being used (which conflicted with pre-compiled official FTC SDK AARs)

5.3A

Released on 19 October 2019

  • Update to SDK v5.3

5.2B

Released on 19 September 2019

  • Remove universal Blocks Vuforia key per request of FIRST. If you would like to use Blocks, you will need to copy your private Vuforia key into the Blocks/src/main/assets/CzechWolf file.

5.2A

Released on 11 September 2019

  • Update to SDK v5.2
  • NOTE: You will need to copy some additional files to the FIRST folder of the internal storage after you update. See step #4 in the Setup Process section
  • NOTE: The TensorFlow and Vuforia sample OpModes for SKYSTONE have been modified slightly to load the datasets from internal storage. Use the samples in this repo; the stock samples will fail on variants other than stock. Please also see the Dynamic Loading of TensorFlow and Vuforia Datasets section of this readme.

5.1A

Released on 26 August 2019

  • Update to SDK v5.1
  • Updated dynamic Vuforia loader to enforce being run on Android 6.0 or higher

5.0A

Released on 21 August 2019

  • Initial release.

openrc-turbo's People

Contributors

9p4 avatar frogbots4634 avatar noahandrews avatar windwoes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

openrc-turbo's Issues

Expansion Hub Not Recognized

Our expansion hub wasn't found when we used OpenRC, but when we switched to the bare SDK it worked just fine.

FTCDashboard

When installing FTCDashoard on extreme turbo mode, app crashes on launch. It doesn't crash on stock or turbo mode.

Assets visible in configuration screen

XML files from the FIRST folder are all visible in the phone's robot configuration screen. The consequence is that the asset files are all mixed in with the actual config files on the configuration screen.

Might it be possible to prevent this by putting the assets into a sub-folder?

libVuforia.so could not be found

It seems that libVuforia was removed from filesforDynamicLoad in a recent commit. I'm running a Control Hub and it could not longer boot up the app without the file present in root directory (not FIRST/vision)

App crashes in ConceptTensorFlowObjectDetection.java when in stock mode

I have copied ConceptTensorFlowObjectDetection from the repository and tried to run it in extreme turbo mode, and it worked perfectly. However, when I switched back to stock, the app kept crashing on init. The error that caused the crash is shown below:

2019-11-19 17:03:33.896 18853-19189/com.qualcomm.ftcrobotcontroller E/AndroidRuntime: FATAL EXCEPTION: LinearOpMode main
    Process: com.qualcomm.ftcrobotcontroller, PID: 18853
    java.lang.NoSuchMethodError: No direct method <init>(Ljava/nio/MappedByteBuffer;I)V in class Lorg/tensorflow/lite/Interpreter; or its super classes (declaration of 'org.tensorflow.lite.Interpreter' appears in /data/app/com.qualcomm.ftcrobotcontroller-2/base.apk)
        at org.firstinspires.ftc.robotcore.internal.tfod.TFObjectDetectorImpl.initialize(TFObjectDetectorImpl.java:267)
        at org.firstinspires.ftc.robotcore.internal.tfod.TFObjectDetectorImpl.loadModelFromFile(TFObjectDetectorImpl.java:247)
        at org.firstinspires.ftc.teamcode.ASDF.initTfod(ASDF.java:165)
        at org.firstinspires.ftc.teamcode.ASDF.runOpMode(ASDF.java:91)
        at com.qualcomm.robotcore.eventloop.opmode.LinearOpMode$LinearOpModeHelper$1.run(LinearOpMode.java:305)
        at com.qualcomm.robotcore.util.ThreadPool.logThreadLifeCycle(ThreadPool.java:737)
        at com.qualcomm.robotcore.eventloop.opmode.LinearOpMode$LinearOpModeHelper.run(LinearOpMode.java:300)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at com.qualcomm.robotcore.util.ThreadPool$ThreadFactoryImpl$1.run(ThreadPool.java:793)
        at java.lang.Thread.run(Thread.java:761)

I tried rebuilding it, invalidating caches, and nothing worked.

From what I can decipher from the error, it's probably that the tensorflow lite library changed in between the build variant, but I do not know how to fix it.

My android studio version is 3.5.2, and OS is macOS Mojave.

Compilation error on Linux

I have tested this on several of my colleagues computers who also have Linux (Ubuntu/Arch/Manjaro) and we all have the same error in the RobotCore module. This is what I get when I compile a fresh clone of the repo using --stacktrace:

Execution failed for task ':RobotCore:compileDebugRenderscript'.
> com.android.ide.common.process.ProcessException: Error while executing process android-sdk/build-tools/30.0.2/llvm-rs-cc with arguments {-I android-sdk/build-tools/30.0.2/renderscript/include/ -I android-sdk/build-tools/30.0.2/renderscript/clang-include/ -rs-package-name=androidx.renderscript -p OpenRC-Turbo/RobotCore/build/generated/renderscript_source_output_dir/debug/out -target-api 28 Android/OpenRC-Turbo/RobotCore/src/main/rs/format_convert.rs -O 3 -o OpenRC-Turbo/RobotCore/build/generated/res/rs/debug/raw}

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':RobotCore:compileDebugRenderscript'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:187)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:185)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.internal.UncheckedException: com.android.ide.common.process.ProcessException: Error while executing process android-sdk/build-tools/30.0.2/llvm-rs-cc with arguments {-I android-sdk/build-tools/30.0.2/renderscript/include/ -I android-sdk/build-tools/30.0.2/renderscript/clang-include/ -rs-package-name=androidx.renderscript -p Android/OpenRC-Turbo/RobotCore/build/generated/renderscript_source_output_dir/debug/out -target-api 28 OpenRC-Turbo/RobotCore/src/main/rs/format_convert.rs -O 3 -o OpenRC-Turbo/RobotCore/build/generated/res/rs/debug/raw}
	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:67)
	at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:107)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:498)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:483)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:466)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:105)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:270)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:248)
	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83)
	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:47)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:84)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:41)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:78)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:49)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:105)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:50)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:283)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:49)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: com.android.ide.common.process.ProcessException: Error while executing process android-sdk/build-tools/30.0.2/llvm-rs-cc with arguments {-I android-sdk/build-tools/30.0.2/renderscript/include/ -I android-sdk/build-tools/30.0.2/renderscript/clang-include/ -rs-package-name=androidx.renderscript -p OpenRC-Turbo/RobotCore/build/generated/renderscript_source_output_dir/debug/out -target-api 28 OpenRC-Turbo/RobotCore/src/main/rs/format_convert.rs -O 3 -o OpenRC-Turbo/RobotCore/build/generated/res/rs/debug/raw}
	at com.android.build.gradle.internal.process.GradleProcessResult.buildProcessException(GradleProcessResult.java:73)
	at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:48)
	at com.android.builder.internal.compiler.RenderScriptProcessor.compileBCFiles(RenderScriptProcessor.kt:281)
	at com.android.builder.internal.compiler.RenderScriptProcessor.compileBCFiles$default(RenderScriptProcessor.kt:211)
	at com.android.builder.internal.compiler.RenderScriptProcessor.doMainCompilation(RenderScriptProcessor.kt:202)
	at com.android.builder.internal.compiler.RenderScriptProcessor.build(RenderScriptProcessor.kt:164)
	at com.android.build.gradle.tasks.RenderscriptCompile.compileAllRenderscriptFiles(RenderscriptCompile.kt:255)
	at com.android.build.gradle.tasks.RenderscriptCompile.doTaskAction(RenderscriptCompile.kt:172)
	at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:63)
	at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
	at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:94)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
	... 118 more
Caused by: org.gradle.process.internal.ExecException: Process 'command 'android-sdk/build-tools/30.0.2/llvm-rs-cc'' finished with non-zero exit value 127
	at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
	at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:46)
	... 131 more

We were all using the latest stable version of Android Studio: Arctic Fox Patch 3

Hardware Map Appcontext outside of TeleOp/Autonomous Class, and gradle build versions.

Hello, I am writing this issue due to the fact that the OpenRC could potentially be having problems with EasyOpenCV and other vision systems calling of appContext when passed as a parameter.

The code used to replicate this issue is shown below:

Class Auto:

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;

@Autonomous
public class Auto extends LinearOpMode {

Test test = new Test(telemetry, hardwareMap);

@Override
public void runOpMode() throws InterruptedException {


    waitForStart();

    while (opModeIsActive()) {
        telemetry.addData("ID", test.getCameraMonitorViewId());
        telemetry.update();
    }
}

}

class Test:

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.hardware.HardwareMap;

import org.firstinspires.ftc.robotcore.external.Telemetry;

public class Test {

private int cameraMonitorViewId;

public Test (Telemetry telemetry, HardwareMap hardwareMap)
{
    cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
}

public int getCameraMonitorViewId() {
    return cameraMonitorViewId;
}

}

And this leads to the issue of the screenshot as shown below:
Screenshot_20210302-113140

Additionally, this is being built with the android gradle plugin 4.1.2, and Gradle 6.5. this is due to the gradle daemon refusing to start when using the regular gradle versions copied from the git repository. Caches were invalidated, and also this was repeatable on another friend's computer.

Steps to Repeat:
Change gradle-wrapper.properties distritbutionUrl to https://services.gradle.org/distributions/gradle-6.5-bin.zip
Add the lines
android.useAndroidX=true
android.enableJetifier=true
to gradle.properties
Change top level build.gradle classpath to 'com.android.tools.build:gradle:4.1.2'
Follow EasyOpenCv install instructions:
Add jcenter() to build.common.gradle and remove arm64-v8a
Add implementation 'org.openftc:easyopencv:1.4.4' to build.gradle for TeamCode
and Copy libOpenCvNative.so to FIRST
Copy Code from above, and build with extremeTurboDebug
Run the code.

If anyone could tell me how to proceed and whether this is reproducible. Note: this also is a problem with stock and turbo modes.

Update SDK to 8.1.1

The original 8.1 release had a few regressions, but 8.1.1 fixed them, so it seems like a good time to package the new release.

OnBotJava not working on Stock Build Variant

Hello FROGBots!

I have been running into an error where Blocks does work, but when I switch to stock build variant, then the Gradle build gives me the following error. Is there something wrong?

To get to this, I had to add this to the settings.gradle:

include ':RobotCore', ':Blocks', ':RobotServer', ':FtcRobotController', ':FtcCommon', ':Hardware', ':Inspection', ':TeamCode', ':OpenRC', ':OnBotJava'

Cannot choose between the following variants of project :Blocks:
  - extremeTurboDebugApiElements
  - stockDebugApiElements
  - turboDebugApiElements
All of them match the consumer attributes:
  - Variant 'extremeTurboDebugApiElements':
      - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
      - Found com.android.build.api.attributes.VariantAttr 'extremeTurboDebug' but wasn't required.
      - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
      - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
      - Found type 'extremeTurbo' but wasn't required.
  - Variant 'stockDebugApiElements':
      - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
      - Found com.android.build.api.attributes.VariantAttr 'stockDebug' but wasn't required.
      - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
      - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
      - Found type 'stock' but wasn't required.
  - Variant 'turboDebugApiElements':
      - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
      - Found com.android.build.api.attributes.VariantAttr 'turboDebug' but wasn't required.
      - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
      - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
      - Found type 'turbo' but wasn't required.

Thanks!

Update to SDK v8.0

Is there a timeline on when this will be updated to SDK v8.0?

I am willing to do this if someone can give me directions on how to

Error when building with gradle

I tried to clone the project and build with gradle, and it kept saying that

package org.firstinspires.ftc.robotserver.internal.webserver does not exist

I think the problem is in FtcCommon/build.gradle, where the turboimplementation for :RobotServer did not work

I tried to change it to normal implementation, but there was another error

Do you have any idea of what to do to fix this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.