FTC Team 16750 Progress Update #300
Replies: 20 comments 119 replies
Installation on Mac Feedback(I'm starting on Mac, cuz that's what's on my lap right now.) As a preface to all this, I understand that this is an alpha program. I've run alpha software before (i've worked on very large pieces of Alpha software, like, um, Visual Studio). My experience tells me that installers don't typically get much attention, so I'm going to be pretty blunt, because this process is quite bad, particularly in comparison to the very straight forward Android Studio experience for ControlHub coding. It's also bad considering that you're doing this on machines that people might want to do other things on. We're FTC: We don't run budgets where purchasing as extra couple laptops for team members is a rounding error. (Mac-only) First of all, it's an installation app, and not just a 'drag to install' kind of thing on Mac. Okay, there are a few apps that have installers. But I sincerely worry about how this is screwing up my machine. I don't like needing to clean up messes from bad installers. This ain't windows. Lose 3 points. Second: It's an installation process, but it CREATED A NEW TOP LEVEL FOLDER IN MY PERSONAL FOLDER NAMED Third: the "Drag the VSCode app" to dock is really quite frustrating guidance as I already have a full copy of VSCode installed (because I write non-FIRST code on this machine: See first paragraph feedback), and it's named the same, and it's got the same icon, so if I do what is asked, I'll have no idea which version of VSCode I'm running. This is an unacceptable final outcome. If this is only for Alpha, that's fine, but if the plan is to have a separate copy of VSCode being the expected setup for release, change its name and icon. I know it can be done. If you don't want to do it, make wpilib 'stuff' a normal VSCode extension with some configuration like god intended. Lose 15 more points because I can't tell if which VSCode I'm using, and that's crazy-making. Final Grade: 72% - a low CSure you're passing, but just barely. |
Installation on Windows FeedbackOh, look. An .ISO. Why? Windows people don't do that much with ISO's. You know what Windows people are accustomed to? ZIP files. Yes, Windows 11 let's you just double-click the .ISO, but you get a security warning, then you get another security warning when you run the installer. Just package it as a ZIP file. Minus a tenth of a point, cuz this is just a weird choice, but it's fine. Actually, ISO's aren't compressed so you'd have a 180MB smaller package if you compressed it. Actually, if you delete those PDB's, you're getting most of the wins. Do that. I mean, I don't notice, but I have wicked fast internet. Most folks don't, so 180MB smaller for no real effort seems like a win. One more tenth of a point demerit. It's not in a top level directory like on Mac! Hurray! The fact that it's named the same isn't as big of a deal on Windows, because you're tabbing through open windows, not open applications, so I can see which thing I'm headed to pretty easily. That probably means it might make sense as a workaround for the truly infuriating Mac issue to install one of 10 or 15 different cmd-tab replacements. It's not great, but I know there are Mac apps that make tabbing more like Windows (and you can generally bind them to different keys: I'll dig one out after I've dealt with Linux...) I'll remove another tenth of a point, since I'm still frustrated by needing two full VSCode's installed. Stupid AI-induced storage demand. The whole collection of stuff appears to live in \Users\Public\wpilib. This is a weird location, and annoying because it's "per user" but kinda not really. I don't yet know if I'm going to need to go to that directory on a regular basis from the command line, so I'll leave this one at full points for now. I'll try something before more feedback on this location. The installer is ugly as sin. Lose 1 point. I probably should have ding'ed Mac for this, too. I'll just take points off Windows. Overall grade: 98.7%.Pretty solid, as far as basic usability and app install experience goes. |
Installation on Linux - nevermind...Oh, it's only supported on Ubuntu. Ubuntu 26.04? Wait, wut? I didn't even realize that was out yet. And I've stopped using Ubuntu, cuz it's kinda fat, and kinda annoying, so I've switched to Debian 13 when I don't care about Ubuntu being kinda fat, and Linux Mint when I don't care about Ubuntu being kinda annoying. I don't feel like installing Ubuntu right now. I might try it on Debian tomorrow, but I think I'll try to make progress on SystemCore usage first, since Debian isn't officially supported (and Linux users are likely just going to deal with whatever, anyway, cuz...Linux...) |
Installation on Linux, for realzOkay, since folks say my distro-of-choice should be fine, I'm doing this. The instructions for Linux talk about Sandboxing. I know what a sandbox is. I just don't know if I do or do not need to use WPILib from a sandbox. It's odd to provide guidance like that without some sort of "Here's why you'd need this sandboxed" or "Here's why you should/shouldn't generally do this". Everything else "feels" about right except my All that said, Linux isn't a letter grade. It's a Pass-Fail class. Thus far, things look like they work, so you get a big fat P for Pass. |
Done installing, time for a quick comparisonOkay, I've got software installed on a Mac, a Win11 box, and a Debian 13 box (same as the Win11 box, because I'm a glutton for dual-booting punishment) This processes feels much clunkier than the FTC process, but at the same time, it's really just different because I'm only dealing with a single installer. For FTC today on Windows, you have to install the Rev Hardware Client, plus Android Studio, and maybe you even have to manage a different JDK installation. On Mac and Linux, you have to get Android Studio installed (pretty easy) and then deal with a JDK probably (messier) and then you have to know enough to use But you know what I really want? I want to be able to use a command line package installer, so I can trivially automate installation of this stuff on a student's machine. I already have a single script to install this stuff on all three platforms for FTC today. And with that, it's on to greener fields: It's "get the new hardware to spin a motor" day! (Hopefully it's only a day, and not a week 🤣 ) |
From Flashing firmware to a simple code snippet running in Hybrid ModeJust a log of what I'm doing todayTL;DR: For as bad as my feedback was for the Mac installation experience for WPILib, this is that good. It's such a major improvement over the current Android FTC Robot SDK & hardware interaction experience.I'm trying to channel the dad of the girl scout group I helped with some issues before their very first competition, here. The 'config' button is actually labeled "CONF" and it's a very subtle think you have to push with a toothpick or a paper clip. It would probably help to mention that there will be no indication on the SystemCore screen that it's in a mode. You'll only see the PWR light and nothing else. A handful of USB drives show up, so that was helpful. Some exposition about what this experience is actually like would help. For people who know what Flashing a device can do, but have never done it before, there's a fair bit of fear involved. Layer that fear on top of "This device costs my team $400, and it's out of stock for the next 3 months, cuz FTC & REV & supply chains" and you really can't "over explain" this process. Nice job on the progress bar instead of a spinner. I'd probably indicate "All Data, including your Blocks and OnBot Java programs, will be erased!" in big flashing bold letters, if that's what happens (I assume that's what will happen...) (Urge to disassemble this device is rising: RP2350? Neat! I want to run RISC V code on a little co-processor, just for fun! No, Kevin, stay on task, man!) Okay, Flashed (pretty slow: would it be faster if I'd used a USB-3 USB-C cable? Cuz 32MB/second smells like the USB-2 bus is fully saturated...) What's the SYSTEMCORE wifi password? Whatever: I just connected it over USB again for now. Hey, look! There's the WiFi settings. I should have just tried PASSWORD in the first place! Anyway, let's connect over WiFi instead of USB! (My laptop is docked, so I've got WiFi to the robot and a wire to the interwebs, like god intended. I think an RPi5 can bridge, which would be amazing, but probably super duper complicated. FTC teams are accustomed to this particular annoyance, so unless it's not super-duper complicated, I wouldn't worry about it too much: Get a USB-wifi adapter for your laptop. No decent solution for Macs, though 😞) That back is getting toasty. 56 degrees? Sweet, I'm annealing any PLA parts nearby while using my SystemCore!
OMG, I'm in a bash shell on the RPi compute devices. Glorious! So glad to have a future that doesn't involve Android 😃 Can I just SSH into this thing. Yeah, this has to be doable. Stay on task. Motor isn't spinning yet... Drivers station installer: seems like a Windows installer. Controller recognized immediately. Handy! SDL FTW! (Our stilly steering wheel drivable bot thing will probably be way easier to setup, and involve far fewer "illegal" things!) Back to VSCode: Mixing of forward & backward slashes in the path. Meh. Looks gross, but windows devs are pretty accustomed to it... This is a breath of fresh air after being stuck with Android Studio for years. VSCode is just so pleasant. I only connected 1 motor and 1 servo, so let's comment out a few lines of code. VSCode comments code out well. Ctrl-/ doesn't leave hideous spacing 🥹. No more 5 layers of folders for Java, either. Nice job on Okay, deployed, but the RioLog window says "Robot connection lost". I think this is maybe a vestige of the FRC RoboRio control thing. The code is trying to run from the Driver's Station, but nothing is happening. I bet good money that this poor 6" USB-A to USB-MiniB cable is only power, and no data. Time to dig for another USB-mini cable. Expansion Hub turned green: Good sign!
Motor and Servo both respond to input! HURRAY! Oh man, deploying from a PC-hosted VSCode took well less than 20 seconds. So much better than the android experience. Okay, before calling it a day, there's stuff sitting the home directory on the RPi 5 now. This looks so easy to poke around and diagnose stuff. OMG, the code is running vanilla OpenJDK 25. No more stupid Google/Oracle lawsuit avoidance shenanigans! I know there's a lot of concerns from the hardware students (mostly around the A301's and the whole "no more servos" [personally, I don't think the no-more-servos thing will stick: They're cheap and useful, and forbidding them will lobotomize FTC, but focus, Kevin: stop getting distracted!!!]) From a software perspective, however, this is SUCH a win over the current state of the world. I don't think I'll bother maintaining (or porting) TechnoLib, since it was basically an implementation of the 'heart' of WPILib, anyway. We switched to PedroPathing this last year from RoadRunner. I'll have to see what that looks like, but honestly, porting stuff from the current SDK to the new one might be a fun project, even if PP doesn't offer any wins over whatever WPILib includes. |
|
As a Linux user for about as long as I've been involved in highschool FIRST, I really like Need to run WPILib's bundled copy of Java? For all intents and purposes, the
To be honest, and I understand why this isn't more obvious in the docs, but I just don't actually run the bundled WPILib vscode, I just use my system vscode install and actually directly install the current year's vsix from the
For over 10 years I've had to live with an Personally, I don't really care that there's a
WPILib is ultimately installed differently compared to traditional Linux package management, and I really think that's fine because it ends up being a useful common denominator with its own well-defined bundled toolchains and system as a result. I don't wanna deal with XDG-slop. I just want to be able to easily access a given year's context. I really don't see why this is such a huge issue. |
RHC2/A301 issues & confusionI don't think this may be the right forum for this feedback, but man, the REV docs for the A301's are, uh, lacking. The Mac REV Hardware Client alpha insta-crashes on my M4 MBA15 unless the computer doesn't have an active connection to the internet. Even then, it never finds anything. I gave up and moved to Windows. On Windows, the Alpha RHC2 app doesn't appear to see...anything at all with SystemCore attached over USB or WiFi. I gave up and installed the IPK through the Drivers Station App, which was quite straight forward. But then the directions say something about putting a file in "the downloads" tab, which (after much digging) seemed to be the Downloads tab of RHC.ipk, but you can't do what they describe. You can only "add a channel". So I plugged in a motor, and it popped up in RHC.ipk), at which point me poking around for 5 minutes resulted in figuring out that I could upload the .dfu file to update the motor. And then I did that for each of the 8 motors I have, which I look forward to doing on a regular basis. Firmware updates are a wonderful pass-time of this modern world. I think it's my new hobby🤣. I like cycling, mountain biking, playing guitar, and update firmware. Summary: Directions for A301 gets a big 👎double thumbs-down👎. Honestly, I'd be comfortable writing up exactly how I did what I did with screen shots & whatnot, if folks would find it useful. Maybe to update the woefully inadequate A301.md file (or the REV.md file?) in this repo? |
Starting with MotionCore/A301's and WPILib for-realzI just got an A301 motor to spin, using a really dumb little tele opmode that increases or decreases the 'throttle'. Is there some documentation about the A301's API anywhere that I'm not seeing, cuz I've got a Throttle, Velocity, and Current controls. Coming from a world of duty cycle and nothing else (Okay, run-to-position, but we always just did that ourselves, because we always needed a PIDF FF function...) are there docs that explain what these different things mean/do? Cuz Oh yeah, and now I get to swap between the V21 JDK and the V26 JDK, because our Android stuff won't work with anything later than 21, and SystemCore requires at least 25. Hurray. (I'm using the command line, like our ancestors intended) I'm also starting to look at what it would take to get to basic feature-parity with A301's. I'll probably havfe to port the PinPoint driver to WPILib. I hear some students have vibe coded drivers around, but I'd rather migrate the Arduino driver to SystemCore, personally. Vibe-code is terrible for a starting effort, because it looks right (because that's literally how LLM's work), which makes catching errors at code-review time much more difficult. I also feel like I need to read some good WPILib tutorials. I've been in "command-based" land for several years, so that's not really a new concept, but WPILib's structure feels different in some fundamental ways, from the FTC SDK and the variety of command scheduling systems that live over there (we've been using something an alum built since 2020). What's different? One thing I stumbled upon is that a teleop's periodic function seems to be getting called (with no hardware side-effects...) even with the opmode isn't selected? I'm seeing some weird behaviors, and I'd rather learn the "right" way to do things before I write up feedback just to save everyone time & turmoil. Any suggestions for something that provides a better guided tour than me clicking "next" through the official docs? |
|
Question and/or Feedback: When an exception occurs upon robot launch, there no real indication of the problem, except that "enable" is disabled. So, I wind up running Very related: Because I'm sometimes running stuff directly from the shell, I think there are situations where I wind up running 2 copies of my app, and things behave...strangely. I have a little auto that switches through 4 motors, spinning each one up and down. And sometimes (again, when I think I have 2 app running) the motors are super stuttery, and just generally not behaving as the code indicates they should. I should probably get a wake-up error telling me I'm doing something bad, rather than just being able to do something bad... |
|
Question for software 'stuff': What's the 'best practice' for having multiple robots, or multiple robot configurations in a single source repo? I'd really like to be able to have a single repo for trying all sorts of different stuff (in FTC, I typically have 3-5 completely separate robots, plus each bot tends to have a few different configurations) |
|
Got a full, dedicated A301 drive base going. It's insane to drive, because the mech student doubled up all the A301's so each wheel has 2 motors attached to the drive axle. With the 500 RPM gearbox, and a 3:2 timing belt speed up, it's spinning wheels at 750RPM. I haven't really run into any issues that haven't already been reported (Periodic functions appear to be running all the time...) Next up: get the PedroPathing library port working and try running autonomous paths with goBilda odopods attached to this little speed demon... 6-tiles.mp4FirstDrive.mp4 |
|
One more small collection of feedback: The First Driver Station app.
It's an order of magnitude better than the miserable FTC driver's station 🤣 (I have an Amazon Kindle Fire tablet that I've side-loaded that thing on for non-competition stuff, because it was $40, but it still doesn't let me use a bluetooth controller) |
LL3A SystemCore library somewhere?Given that there's "Limelight" on a variety of pieces of this tech, is there any ETA on getting the actual Limelight camera interface working on SystemCore? The current WPILib integration doesn't look compatible. Is there something somewhere I should be grabbing for this? (I've got a little bot I'm trying to convert to hybrid mode that has a LL3a on a gimbal, and I'd love to get the whole thing working if possible...) |
SystemCore & Encoders?How can I connect encoders to SystemCore? The API indicates that I provide 2 ports, so is it just a power/signal/gnd to the first one, and just signal to the second port? (I'd rather use the SystemCore for odo than have to connect a second expansion hub to get odo working on my current FTC demo bot, until I can get PinPoint drivers up & going...) I think the higher level question might be: Are there docs somewhere I'm missing? (follow-up question: Would you like me to start writing some of these missing docs?) |
STL/STEP/OnShape for battery mount?Students driving around the dual-A301 bot slammed into the wall at full speed and (naturally...) broke the attachment points completely off the battery mount. It's obviously 3D printed. Any chance the file's publicly available, so I can reprint one? |
Universal (and more advanced) telemetry & editable static values?@ThadHouse (or anyone else) what's the easiest and most universal way to get some sort of telemetry? I'm in the process of porting PedroPathing over to SystemCore, and I've hit a set of open questions around the "correct" replacement for the built-in FTC telemetry (and expansions on it). Basically everyone uses it because it's built in, trivial, and obvious. You don't have to open something else, and the interface is simple enough that it's accessible from Blocks. Most advanced teams were using FTC Dashboard, and some of us switched over to Panels for a much more robust telemetry experience. (Both have the ability to draw paths & robots on a field, which is super handy). I think that's AdvantageScope? I'd love a pointer to some examples... I'm also very much missing the |
Deployed code sometimes just...doesn't work?I've had this recurring issue where I get failures that look like this: whenever I try to enable the opmode. I don't change any code, I just redploy, and it works. Am I doing something weird? The reflection-based invocation of the user code is delightfully obfuscating, as usual. I added some System.out.println lines and it started working. I'll see if I can get a repro with more detail, but this has been a recurring "waaaat?" problem that I'd love any insight into. |
AdvantageScope log viewer: What am I missing?Everyone seems to love this thing. How can I select lines and copy them to the clipboard? You know: the single most basic feature that anyone who's ever had to use logs to debug a problem will want to do? Seriously: This is the most basic, simple thing that anyone looking at a log would want to do, and this log viewer...just doesn't? (Just in case you thought my opinionated anger was only for WPILib stuff 🤣 ) |
Feedback from other folks at WCIOur team attended the West Coast Invitational in Bonney Lake, WA over the weekend. I took the A301/SystemCore drivebase and let anyone who wanted to drive it around on the practice field, and talked to a number of coaches, mentors, and students. General feedback was excitement around seeing the new hardware. Ignoring the general excitement, I saw two recurring pieces of feedback:
I'm probably going to be poking around more with SystemCore this week. I've got a couple clips to let me move SystemCore between the A301 bot and a bot that should be switchable between hybrid mode and a control hub. |


Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
We are a high school affliated team, and the hardware box arrived the day after our final normal team meeting prior to summer break. A few of us are going to try to meet over the summer to do a few silly things with this fancy new hardware. One of the mech students is going to CAD up a drive base, and I (Kevin Frei, lead mentor) will be going through initial setups on a Mac, Windows, and maybe even a Linux machine just for the lol's.
My plan while students aren't available is to move my silly little demo robot (aka Mouse) over from a control hub to the Hybrid control system initially. In the mean time, one of our students is going to CAD me an A301-based drivebase, and I'd like to build that up, too. He says "8 motor powered Mecanum will be fun" 🤣
One final note: Our team will be working in Java. That said, I'll be trying C++ if I get bored, cuz I like it more.
All reactions