pwnagerobotics / scoutingpass Goto Github PK
View Code? Open in Web Editor NEWA FRC Competition Scouting Application
Home Page: https://pwnagerobotics.github.io/ScoutingPASS/
A FRC Competition Scouting Application
Home Page: https://pwnagerobotics.github.io/ScoutingPASS/
My team is using ScoutingPASS, and linked our google sheet to record data. However, whenever I set "enable_google_sheets" to true (either in the config file or in scoutingPASS.js), many value errors pop up in the chrome console, and you are not able to go to the next screen in ScoutingPASS. Blue Alliance also stops populating event/match/team data, and you are not able to move to the next ScoutingPASS screen.
I've attached a screenshot of the error from google chrome below, as well as our GS_config file and scoutingPASS.js.
QR parsing macro slows down after lots of data has been input.
Code pulls field labels from dictionary keys right now and ignores the title entry. Fix the code to pull field labels from the title entry.
Create videos:
For example, for auto start, a robot starting in the lower left corner of the Blue Alliance Community will result in a click in box 62 in a non-flipped image. I you flip the image 180 degrees, clicking the same place in the Blue Alliance Community will result in a click in box 11.
This will result in a starting position in the Loading Zone when box 11 data is applied to a non-flipped image.
This worked in previous years because the field was symmetrical when rotated 180 degrees. The field for 2023 will not allow for this.
While trying to set up the google sheet support and following the instructions I attempted to make the new deployment and ran into this issue.
I don't know if this has been seen before by anyone else. This may be a bug and explain why it worked for the creator of this project as they have an account from the same domain or such. Just some ideas. Not one hundred percent sure, but thought I would point it out in this issue to see if anyone has run into this issue.
First of all, thanks for providing this resource to FRC teams. We used an early version of your code in our competition last weekend. Not all the time, but sometimes, the QR code would be "big" and trying to zoom out didn't work. We were using firefox as the browser on a Lenovo M8 tablet. The bigger QR code is a little harder to scan but we were able to do it. Did anyone have any experience with this? I attached a picture of what the larger QR code looks like. I tested rotating the tablet between portrait and landscape mode and that didn't make it re-occur.
Dan Domen
FRC 1807
This allows entry into an Excel (or any?) spreadsheet without need for a VBA script to parse the input.
It will not automatically set up the table or columns, but will make input easier once they are set up.
Caution, the cursor needs to be in the first field of the spreadsheet for it to work correctly.
Will help to have a "Copy Column Names" button, to start the table with column names.
Thanks to Team 2713 - iRaiders for this awesome alternative to VBA parsing.
Display is optimized for phone/portrait layout.
If a display supports it should we display all pages?
Hi, after updating the config json for 2022, the changes that I made aren't propagating. I've checked to make sure that I've updated the right file, of course.
I'm updating /2022/RR_config.js
Is there anything that I'm doing wrong? I've checked to make sure that the json is valid, and no errors are being thrown. The app just looks the same as before.
Thanks for the help,
Team 6560, Charging Champions
This is the updated file:
var config_data = `
{
"title": "Scouting PASS 2022",
"page_title": "Rapid React",
"elements": {
"prematch": {
"Scouter Initials": {
"code": "s",
"type": "scouter",
"size": 5,
"maxSize": 5,
"required": "true"
},
"Event": {
"code": "e",
"type": "event",
"defaultValue": "2022flwp",
"required": "true",
"disabled": "true"
},
"Match Level": {
"code": "l",
"type": "level",
"choices": {
"qm": "Quals<br>",
"ef": "Eighth-Final<br>",
"qf": "Quarter-Final<br>",
"sf": "Semi-Final<br>",
"f": "Final"
},
"defaultValue": "qm",
"required": "true"
},
"Match #": {
"code": "m",
"type": "match",
"min": 1,
"max": 100,
"required": "true"
},
"Robot": {
"code": "r",
"type": "robot",
"choices": {
"r1": "Red-1",
"b1": "Blue-1<br>",
"r2": "Red-2",
"b2": "Blue-2<br>",
"r3": "Red-3",
"b3": "Blue-3"
},
"required": "true"
},
"Team #": {
"code": "t",
"type": "team",
"min": 1,
"max": 99999
},
"Auto Start Position": {
"code": "as",
"title": "Auto Start Position",
"type": "field_image",
"required": "false",
"filename": "2022/field_image.png"
}
},
"auton": {
"Taxi": {
"code": "at",
"title": "Taxied?",
"type": "bool"
},
"Upper Cargo Scored": {
"code": "au",
"title": "Uppoer Cargo Scored",
"type": "counter"
},
"Lower Cargo Scored": {
"code": "al",
"title": "Lower Cargo Scored",
"type": "counter"
},
"Auto Aquired Cargo": {
"code": "ac",
"title": "Picked up more cargo?",
"type": "bool"
}
},
"teleop": {
"Upper Cargo Scored": {
"code": "tu",
"title": "Uppoer Cargo Scored",
"type": "counter"
},
"Lower Cargo Scored": {
"code": "tl",
"title": "Lower Cargo Scored",
"type": "counter"
},
"Was Defended": {
"code": "wd",
"title": "Was Defended",
"type": "bool"
},
"Wallbot?": {
"code": "wbt",
"title": "Wallbot?",
"type": "bool"
},
"Cargo Intake From": {
"code": "cif",
"title": "Cargo Intake From",
"type": "radio",
"choices": {
"t": "Terminal<br>",
"g": "Ground<br>",
"b": "Both<br>",
"x": "Not Attempted"
},
"defaultValue": "x"
},
"Shooting Spot": {
"code": "ss",
"title": "Shooting Spot",
"type": "field_image",
"filename": "2022/field_image.png"
}
},
"endgame": {
"Climb": {
"code": "c",
"title": "Climb",
"type": "radio",
"choices": {
"1": "Low<br>",
"2": "Mid<br>",
"3": "High<br>",
"4": "Traversal<br>",
"a": "Attempted but failed<br>",
"x": "Not attempted"
},
"defaultValue": "x"
},
"If climb failed,<br>Last successful rung,<br>if any": {
"code": "lsr",
"title": "If climb failed,<br>last attempted rung,<br>if any",
"type": "radio",
"choices": {
"1": "Low<br>",
"2": "Mid<br>",
"3": "High<br>",
"4": "Traversal<br>",
"n": "No successful rung<br>",
"x": "n/a"
},
"defaultValue": "x"
},
"Started Climb before Endgame": {
"code": "be",
"title": "Started climb before EndGame",
"type": "bool"
},
"Num of Robots Climbed": {
"code": "cn",
"title": "# of alliance bots climbed",
"type": "counter"
}
},
"postmatch": {
"Alliance Won?": {
"code": "wl",
"title": "Alliance Won?",
"type": "boolean"
},
"Climb Ranking Point": {
"code": "crp",
"title": "Climb Ranking Point",
"type": "boolean"
},
"Shooter Ranking Point": {
"code": "srp",
"title": "Shooter Ranking Point",
"type": "boolean"
},
"Driver Skill": {
"code": "ds",
"title": "Driver Skill",
"type": "radio",
"choices": {
"n": "Not Effective<br>",
"a": "Average<br>",
"v": "Very Effective<br>",
"x": "Not Observed"
},
"defaultValue": "x"
},
"Defense Rating": {
"code": "dr",
"title": "Defense Rating",
"type": "radio",
"choices": {
"n": "Not Effective<br>",
"a": "Average<br>",
"v": "Very Effective<br>",
"x": "Not Observed"
},
"defaultValue": "x"
},
"Shot enemy balls away?": {
"code": "ba",
"title": "Shot enemy balls away?",
"type": "bool"
},
"Died/Tipped": {
"code": "d",
"title": "Died/Tipped",
"type": "bool"
},
"Card Foul": {
"code": "cf",
"title": "Yellow/Red Card",
"type": "bool"
},
"Make good alliance partner?": {
"code": "all",
"title": "Make good alliance partner?",
"type": "bool"
},
"Comments": {
"code": "co",
"title": "Comments",
"type": "text",
"size": 15,
"maxSize": 50
},
"Confidence Rating": {
"code": "cnf",
"title": "Confidence Rating",
"type": "radio",
"choices": {
"v": "Very Confident<br>",
"a": "Average<br>",
"n": "Not Confident"
},
"defaultValue": "a"
}
}
}
}`;
Add and undo button to the field_image element which removes the last entry in the field element array.
In order to allow longer comment field inputs there needs to be a way to increase the amount of characters allowed in the Excel input.
Look into creating a TextBox. https://www.mrexcel.com/board/threads/inputbox-limit-of-255-characters.102368/
Use a slider to move through values. At least two labels need to be specified for left side and right side.
input type="range" will create a slider
In scoutingPASS.js, there is the following line of code that removes any user entered semicolons so it does not interfere with the parsing of the data after reading the QR code.
str=str+code+'='+e.value.replace(";", "-")
However, it only removes the 1st occurrence. Perhaps replace the above line of code with the following line:
str=str+code+'='+e.value.split(';').join('-')
Error message now displays only the codes required. Modify to use the field titles so that the error message is more understandable.
Some required fields are hardcoded. Modify to grab required codes from configuration file.
Limit where the user can click on in the field image. For example, a robot can only start in the community for 2023. So we would be limited to boxes 26, 27, 38, 50, 62, 63, 34, 35, 47, 59, 70 and 71. (or something close...)
When a radio button does not have a default value and is not manually checked, its code will not show up in the QR code.
The code goes through each element and adds the code only if checked. It should probably add the code anyway and leave it blank if nothing is checked.
It also breaks the "clear form" function.
Define version 2.0 for parsing
On a PC the input boxes had white backgrounds regardless of page background color. On an android tablet the black background pages would also have black input boxes (maybe they are transparent?). Changing tablet color themes, desktop mode, etc still left it black on black. CSS fix worked for us. I fixed on our fork with this:
line 222-ish
input {
font-size: 16px;
font: roboto;
color: black;
background-color: white;
}
When clicking the Display Data button on the QR screen the message "unsupported dataFormat" is displayed.
Fix the feature to correctly display the data in tsv format
pirate_raider on Chief Delphi suggested that we create a configurable field image where the number of boxes could be configurable. This would be useful in 2023 where the grid could be represented using a field image, but limiting the boxes to a 9(columns) by 3 (rows) grid. Then each "node" would be a box. A specialized image of the grid would have to be captured or created for this use.
Another way to use this would be to a 9 (column) by 7 (row) grid. Then you could have 2 boxes for the bottom "hybrid" row where either game piece could be scored.
Make it configurable so that any column/row combination can be used. Extra credit if it can limit to one click per box.
After playing with your demo, a clear/cancel button to timer could be helpful (e.g., in case the robot dropped its game piece and went to do something else).
It is much easier for our team to scan barcodes as we already have a barcode scanner that won't work for QR codes.
Adding the option to do this would make this the go-to scouting program for our team.
Using the default 2023 config and entering ["5.6","10.1","17.9","19.1","2.5","0"] into the cycle times (just clicked the button a bunch for fun) the following was the QR output:
s=JK;e=2023ilch;l=qm;m=1;r=r1;t=;as=[26];am=1;auh=1;aum=0;aul=0;aoh=1;aom=0;aol=0;ad=e;tct=0;tuh=2;tum=0;tul=0;toh=0;tom=1;tol=0;tfc=0;wd=0;lnk=1;cif=g;dt=0;fs=e;cn=1;ds=x;ls=0;dr=x;sd=1;sr=3;d=0;coo=0;all=0;co=;cnf=a
tct=0 should probably include some/all of the values from the cycle times - I'm unsure of the format that I was expecting but I was expecting something.
How do you convert the value from the grid inputs into something that you can use? For example Column 3 Top.
From kabir (Team 1071) on Chief Delphi:
Hey ScoutingPASS team! In an effort to increase interoperability between scouting apps, we recently announced The Purple Standard (TPS), a unified, community-driven standard for FRC scouting data (see https://chiefdelphi.com/t/the-purple-standard-a-unified-and-community-driven-standard-for-frc-scouting-data/449394 5 and https://thepurplestandard.com/), paving the way for collaborative scouting across apps (which benefits smaller teams and rookies). TPS is modular and completely customizable based on the data you want to collect in your scouting app. Would you be interested in integrating TPS into your app to benefit teams using ScoutingPASS and join the wider network of collaborative scouting data?
Is anyone interested in this implementation in ScoutingPASS? Or better yet volunteer to implement it?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.