WPILibPi on Raspberry pi 5

Is there a WPILibPi image that runs on the Raspberry Pi 5?

Not yet. Iā€™m hoping to get to it this weekend.

9 Likes

Wow, thatā€™s what I call service! Thank you.

2 Likes

is there an any update about the new version? if so we would appreciate a link to download the image.

Iā€™m working on a PR (Update to bookworm by PeterJohnson Ā· Pull Request #233 Ā· wpilibsuite/WPILibPi Ā· GitHub). It builds an image that mostly works, but the network settings page in the webpage is broken because the new OS version switched to NetworkManager.

1 Like

Thanks for working on this Peter! We canā€™t wait to try out our new Pi5s for this yearā€™s tag and game piece recognition.

Weā€™re hoping for fewer false positives with the new tags, and faster frame rates with the new Pis and libraries.

We really appreciate your efforts!

Is there a new wpilibpi image for 2024? I canā€™t see any updates on the git. The 2023 version does not seem to have the robotpy with wpimathā€™s objectToRobotPose, so what weā€™ve been testing on windows updating the pose from tags canā€™t easily be transfered to the pi.
Thanks!

I stalled out on making the webserver changes, but I can release a ā€œbetaā€ 2024 image (with the latest 2024 released libraries) on Friday.

2 Likes

I just released a 2024.1.1-beta-1 release. This bookworm-based image has WPILib and RobotPy 2024.3.1, as well as Raspberry Pi 5 support. The main thing that I know is broken is the ability to change network settings via the webdash.

2 Likes

Thanks!
I downloaded and put on our code. So far it works great. No problem configuring cameras despite messages about
mount: /boot: mount point not mounted or bad option. dmesg(1) may have more information after failed mount system call.
Still trying to figure out how to assign a static IP on bookworm . It didnā€™t allow me to save changes with sudo nmtui, so I just made a /etc/network/interfaces.d/eth0 with the following contents (Weā€™re 2429, and I like having the pis at 12, 13, etc):

allow-hotplug eth0
iface eth0 inet static
address 10.24.29.12/24
netmask 255.255.255.0
gateway 10.24.29.1

I hope Iā€™m missing something obvious here but when I attach local Module 3 Standard 12MP cameras to either/both camera connectors I receive the following error

CS: ERROR: ioctl VIDIOC_QBUF failed at UsbCameraImpl.cpp:723: Invalid argument (UsbUtil.cpp:156)
CS: WARNING: rPi Camera 0: could not queue buffer 0 (UsbCameraImpl.cpp:724)

Thanks for any pointers that can lead me down the proper path.

Has anyone tested cscore with the new libcamera stack? You might be stuck using libcamera directly

Iirc we had a quick fix for photon at some point for an issue like this before we just did full libcam.

1 Like

Maybe the WPILib Apriltag detector and pose estimator are out of scope of the WPILibPi. It looks like it would be close to working but I have a few jar files missing on the example project. Maybe the native files donā€™t exist and the detector and estimator will never be part of WPILibPi. They are too slow on the roboRIO and I thought the RPi might be workable.

The intent is for them to be there. Iā€™ll look into it. Itā€™s probably just a miss from the build script to get them copied over.

1 Like

To get the example Java to show well in VSCode ā€œprecompileā€ on my Windows 10 PC and to build I added
build.gradle implementation files('jackson-annotations.jar') implementation files('wpiunits.jar') (stolen from a roboRIO project)

Opencv version was 460 in build.gradle so I changed to 480.

Then I ran the build on the RPi and got this error

Starting camera ā€˜rPi Camera 0ā€™ on /dev/video0

CS: rPi Camera 0: Attempting to connect to USB camera on /dev/video0

CS: rPi Camera 0: Connected to USB camera on /dev/video0

CS: rPi Camera 0: SetConfigJson: setting video mode to pixelFormat 1, width 160, height 120, fps 30

could not load class edu/wpi/first/math/geometry/Quaternion

Exception in thread ā€œmainā€ java.lang.NoClassDefFoundError: us/hebi/quickbuf/ProtoMessage

at edu.wpi.first.math.geometry.Quaternion.(Quaternion.java:411)

at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)

at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)

at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)

at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)

at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:315)

at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:287)

at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2427)

at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)

at java.base/java.lang.System.loadLibrary(System.java:1993)

at edu.wpi.first.util.RuntimeLoader.loadLibrary(RuntimeLoader.java:91)

at edu.wpi.first.apriltag.jni.AprilTagJNI.(AprilTagJNI.java:54)

at edu.wpi.first.apriltag.AprilTagDetector.(AprilTagDetector.java:213)

at AcquireApriltagThread.(AcquireApriltagThread.java:21)

at Main.main(Main.java:345)

Caused by: java.lang.ClassNotFoundException: us.hebi.quickbuf.ProtoMessage

at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)

at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)

at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)

ā€¦ 15 more

Without the two added implementations I get this build error:

Task :compileJava
warning: unknown enum constant Visibility.NONE
reason: class file for com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility not found
warning: unknown enum constant Visibility.NONE
warning: unknown enum constant Visibility.NONE
warning: unknown enum constant Visibility.NONE
warning: unknown enum constant Visibility.NONE
C:\Users\RKT\frc\FRC2024\Code\java-multiCameraServer\src\main\java\AcquireRobotPoseThread.java:317: error: cannot access Measure
new Translation3d(
^
class file for edu.wpi.first.units.Measure not found
1 error
5 warnings

Task :compileJava FAILED

FAILURE: Build failed with an exception.

Does it also work on Orange Pi?

Iā€™ve never tested it, but I doubt it, although I know aarch64 is more standardized than armv7.

@Peter_Johnson I also attempted to build the Java example on my RPi 4 hopeful that the error if using the laptop VSCode would go away. The RPi will not resolve Internet names but URL and *.local works. Thus the ./gradlew build failed because it wants to download a zip from services.gradle.org. The RPi can access that gradle address 104.16.73.101 which doesnā€™t help me, of course.

Using the same Ethernet port on my WI-Fi extender my laptop can resolve names. The WPILibPi was configured to use DHCP. The laptop has two options that must be selected - Obtain an IP address automatically and Obtain DNS server address automatically.
Thanks for your help.