Git Product home page Git Product logo

aws-solutions-library-samples / guidance-for-aws-deepracer-event-management Goto Github PK

View Code? Open in Web Editor NEW
13.0 13.0 9.0 348.78 MB

The AWS DeepRacer Event Manager (DREM) is used to run and manage all aspects of in-person events for AWS DeepRacer, an autonomous 1/18th scale race car designed to test reinforcement learning (RL) models by racing on a physical track.

License: MIT No Attribution

JavaScript 37.32% Makefile 0.49% TypeScript 18.10% Python 12.76% Shell 1.34% HTML 28.49% CSS 1.15% Dockerfile 0.36%
aws deepracer

guidance-for-aws-deepracer-event-management's People

Contributors

daniellindner avatar davidfsmith avatar dependabot[bot] avatar esbjj avatar franky920920 avatar larsll avatar marcobuss avatar stevenaskwith avatar yasaws avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

guidance-for-aws-deepracer-event-management's Issues

Unable to access the /admin/events/create page

When trying to access the page /admin/events/create I get a blank page with an error in the console.

This was tested on Firefox 124.0 / Edge 122.0.2365.92 + Ubuntu 22.04.4 and on Windows 10 + Chrome 122.0.6261.112

The error is :

TypeError: t.match is not a function
    G utils.ts:9
    d1 index.tsx:116
    React 10
        Ea
        xs
        El
        wc
        bc
        vc
        ac
        cc
        Vo
        oc
react-dom.production.min.js:189:29
    React 11
        fs
        callback
        Ui
        _l
        wl
        yl
        xc
        xc
        cc
        Vo
        oc

The error seems to be from here :

export function isValidFullDate({ date, granularity }: { date: string; granularity: CalendarProps.Granularity }) {
  const regex = granularity === 'month' ? /^\d{4}-\d{2}(-\d{2})?$/ : /^\d{4}-\d{2}-\d{2}$/;
  return !!date.match(regex);
}

Here is also the full content of the console :

InstallTrigger est obsolète et sera supprimé prochainement. constants.js:50:15
i18next::backendConnector: loaded namespace translation for language en 
Object { "app.signup.signin": "Sign in", "app.signup.create-account": "Create account", "app.signup.username": "Username", "app.signup.enter-your-username": "Enter your username", "app.signup.password": "Password", "app.signup.enter-your-password": "Enter your password", "app.signup.forgot-your-password": "Forgot your password?", "app.signup.acknowledgement-label": "I agree with the Terms & Conditions", "app.signup.terms-and-conditions": "Terms and Conditions", "app.signup.acknowledgement": "You must agree to the Terms & Conditions", … }
i18next.js:13:48
i18next: languageChanged en i18next.js:13:48
i18next: initialized 
Object { debug: true, initImmediate: true, ns: (2) […], defaultNS: (1) […], fallbackLng: (1) […], fallbackNS: false, supportedLngs: false, nonExplicitSupportedLngs: false, load: "all", preload: false, … }
i18next.js:13:48
i18next::translator: missingKey en translation home.header DeepRacer Event Manager i18next.js:13:48
Object { countryCode: null, createdAt: "2024-03-14T01:07:00.746Z", createdBy: "0d103d6e-19c4-4aea-945f-997a64dd4890", eventDate: null, eventId: "db164003-d629-4b3b-abdf-55908dc1a0a1", eventName: "AwsInnovationDay", landingPageConfig: null, raceConfig: {…}, sponsor: null, tracks: (1) […], … }
eventSelectorModal.jsx:145:12
ON UPDATE RACE SUBSCRIPTION SETUP db164003-d629-4b3b-abdf-55908dc1a0a1 false useRacesApi.js:72:12
MODELS_IS_LOADING DISPATCH FUNCTION true modelsStore.js:44:14
register onUserCreated subscription useUsersApi.js:61:14
db164003-d629-4b3b-abdf-55908dc1a0a1 useRacesApi.js:14:14
ON UPDATE RACE SUBSCRIPTION SETUP db164003-d629-4b3b-abdf-55908dc1a0a1 true useRacesApi.js:72:12
CARS_IS_LOADING DISPATCH FUNCTION true 2 carsStore.js:25:14
GET FLEETS useFleetsApi.js:14:14
FLEETS_IS_LOADING DISPATCH FUNCTION true fleetsStore.js:33:14
EVENTS_IS_LOADING DISPATCH FUNCTION true eventsStore.js:33:14
SIDE_NAV_IS_OPEN DISPATCH FUNCTION true sideNavStore.js:6:14
ADD_EVENTS DISPATCH FUNCTION eventsStore.js:6:14
EVENTS_IS_LOADING DISPATCH FUNCTION false eventsStore.js:33:14
Object { countryCode: null, createdAt: "2024-03-14T01:07:00.746Z", createdBy: "0d103d6e-19c4-4aea-945f-997a64dd4890", eventDate: null, eventId: "db164003-d629-4b3b-abdf-55908dc1a0a1", eventName: "AwsInnovationDay", landingPageConfig: null, raceConfig: {…}, sponsor: null, tracks: (1) […], … }
eventSelectorModal.jsx:145:12
Object { countryCode: null, createdAt: "2024-03-14T01:07:00.746Z", createdBy: "0d103d6e-19c4-4aea-945f-997a64dd4890", eventDate: null, eventId: "db164003-d629-4b3b-abdf-55908dc1a0a1", eventName: "AwsInnovationDay", landingPageConfig: null, raceConfig: {…}, sponsor: null, tracks: (1) […], … }
eventSelectorModal.jsx:148:14
ADD_CARS DISPATCH FUNCTION carsStore.js:6:14
CARS_IS_LOADING DISPATCH FUNCTION false carsStore.js:25:14
ADD_FLEETS DISPATCH FUNCTION fleetsStore.js:6:14
FLEETS_IS_LOADING DISPATCH FUNCTION false fleetsStore.js:33:14
getRaces useRacesApi.js:17:16
RACES_IS_LOADING DISPATCH FUNCTION false racesStore.js:52:14
ADD_CARS DISPATCH FUNCTION carsStore.js:6:14
CARS_IS_LOADING DISPATCH FUNCTION false carsStore.js:25:14
ADD_MODELS DISPATCH FUNCTION 
Array(39) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, … ]
modelsStore.js:6:14
MODELS_IS_LOADING DISPATCH FUNCTION false 2 modelsStore.js:44:14
i18next::backendConnector: loaded namespace help-admin-events for language en 
Object { header: "## Events administration", content: "On this page, you can create, edit, and delete AWS DeepRacer events. When you create a new event, you add the following details:\n* **Ranking method** – Choose a method for ranking participating racers. Currently, DREM offers **Best lap time**.\n* **Track** – Choose the track you’ll be using for the event.\n* **Race time** – Race time is generally 2 minutes.\n* **Allowed resets per lap** – This is how many times a car can be reset on the track after it has gone off track with all 4 wheels leaving the track.\n\n* **Sponsor** – If there is a sponsor for the event, enter the sponsor name.", footer: "" }
i18next.js:13:48
defaultSortingColumn undefined pageTable.jsx:41:12
defaultSortingIsDescending undefined pageTable.jsx:47:12
UPDATE_HELP_PANEL DISPATCH FUNCTION 
Object { isHidden: false, content: {…} }
helpPanelStore.js:19:14
show split panel adminEvents.jsx:69:12
UPDATE_SPLIT_PANEL DISPATCH FUNCTION splitPanelStore.js:17:14
defaultSortingColumn undefined pageTable.jsx:41:12
defaultSortingIsDescending undefined pageTable.jsx:47:12
TypeError: t.match is not a function
    G utils.ts:9
    d1 index.tsx:116
    React 10
react-dom.production.min.js:189:29
    React 11
Uncaught TypeError: t.match is not a function
    G utils.ts:9
    d1 index.tsx:116
    React 10
utils.ts:9:16
deregister onUserCreated subscription useUsersApi.js:80:16
deregister onUserCreated subscription useUsersApi.js:109:16
RESET_SPLIT_PANEL DISPATCH FUNCTION splitPanelStore.js:21:14
RESET_HELP_PANEL DISPATCH FUNCTION helpPanelStore.js:23:14

Download models from DREM

There have been a couple of requests to allow for models to be downloaded from DREM for manual uploading to the car via the car console. This would be especially useful at events where network performance is an issue, all models for the event can be downloaded prior to running (or during) rather than trying to send the models to the car ahead of racing.

(Thought: Could storage on the timer RPi (if present) be used to sync models)

Remove cars from SSM that haven't been "seen" in X months

The current live version of DREM shows over 1K cars as offline, some of these will be duplicate activations when cars have been flashed and re-DREM'd multiple times.

We should track the cars original hostname when creating a new activation so we can start to create a full car history (longer term) and also so we can remove outdated instances of the car from SSM.

Using the original hostname of the car also allows us to start tracking usage per physical car (rather than usage per hostname) over time so we can add in the concept of a car history / maintenance log

Remove car from DREM

Need to be able to remove a car from DREM, either just remove it from the managed devices in AWS Systems Manager, or also provide the commands on the car to de-activate SSM (or suggest flashing the car)

Streaming Overlay Font Issues

Several font issues in website-stream-overlays/public/assets/svg/

  • LeaderboardWithBackdrop,svg and LeaderboardWithBackdrop-Wide.svg:
    • AmazonEmber-Medium is used, but not defined in the CSS.
    • AmazonEmber-Italic is used, but not defined in the CSS
    • Instead AmazonEmber-Regular and AmazonEmber-HeavyItalic is defined in the CSS but not used.
    • Arial-Black is used but not defined in the CSS.
  • RacerAndLapInfo-Localized.svg and RacerAndLapInfo-BestAvg.svg:
    • Double-quotes around font-names, example : <text id="EVENT-NAME-TEXT" transform="matrix(0.9458 0 0 1 274.6509 96.9823)" font-family="'AmazonEmber-Heavy'" font-size="25.4626px" letter-spacing="2.11">RACE NAME</text>
  • DidYouKnowWithBackdrop.svg:
    • Uses 'random fonts' like Arial-Black, Arial-BoldMT, MyriadPro-Regular, without embedding.

image

RPi5 not supported for timing

Due to changes with the way the GPIO is connected on the latest version of the Raspberry Pi (5) the existing timer code leaderboard-timer/timer.js doesn't work with the timing board.

There are a couple of options

  1. Do nothing and hope that the library rpi-gpio or its dependency epoll are updated to support the RPi5
  2. Look to change the code to use GIPO Zero

Example code detecting "laps" from a timing board that works on both an RPi4 and an RPi5

#!/usr/bin/python3

from gpiozero import Button
from signal import pause

def logLap():
    print('lap')

pin1 = Button(17)
pin2 = Button(27)

pin1.when_pressed = logLap
pin2.when_pressed = logLap

pause()

[Feature Request] Enable cloud-based Model Optimization

To improve the speed of loading models on the car it would be an idea to perform the Tensorflow -> OpenVINO model optimization in a lambda function, rather than on the car. This should save 15-20 seconds when loading a model on the car.

Initial concept (Docker file + conversion code) is here: #9

Design decisions needed:

  • Where in the upload-pipeline should it happen? Two options
    • Instead of clamscan_post; trigger on virus scan complete, then optimize and upload to target location
    • After clamscan_post; when the model is Available (maybe trigger on the change in DynamoDB?)
  • Is another status in the DynamoDB desired (Available -> Optimized?)
  • If processing after clamscan_post: shall initial file be kept and new file in a new location, or shall it be edited in place?

Documentation feedback from initial install

Docker with ARM build support could be expanded to include a useful link command to try if it's not working 'docker run --privileged --rm tonistiigi/binfmt --install all'

As part of the deployment, the email address provided will become the admin user for DREM. - It is worth stating this link won't work until the CodePipeline completes, and it's worth stating the username is admin, not the email address provided to the makefile

Raspberry Pi timer setup readme references a link to a zip file that isn't in the repo, as well as a missing pi-update.sh file. Installation via script in DREM portal works though.

Links to STL files don't work, there are no stl files in the repo: -

There is an .stl file to print out the sensor box choose the right .stl file for the sensors you have.

Timerbox Youmile sensors
Timerbox WaveShare sensors - slightly larger sensors

Upload to car updates

Remove "Legacy" upload model to car mechanism and add "Cancel in progress" to "Modern" upload to car

Car activation - extra field

As part of device management when creating a car activation the user should be prompted to optionally enter the device original host name (found on the sticker on the underside of the car) this can used for tracking laps / races / events completed by a car to build car history irrespective of the fleet / host name it is given. It will also mean that duplicate entries for the same device can be avoided in SSM

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.