RaspberryPiSetup
>Psychtoolbox>PsychDocumentation
RaspberryPiSetup – How to setup your Pi optimally for Psychtoolbox.
There are two major families of the RaspberryPi with features suitable for
meaningful use for visual and auditory stimulation with Psychtoolbox-3, the
older variants RaspberryPi 2 and 3, and the new RaspberryPi 4/400/5 family.
Psychtoolbox is currently only tested with up to date versions of the
official RaspberryPi Linux operating system distribution known as
“RaspberryPi OS” (RPi, also known under its former name “Raspbian”.
Only the old/legacy 32-Bit RPi OS version 11 is supported by Psychtoolbox
at the moment, as provided directly by us via DownloadPsychtoolbox et
al., even on 64-Bit processors. Currently the most recent stable RPi OS
11 + GNU/Octave is what PTB will support, with some wiggle room, as we do
not keep close track of development and updates to RPi OS. RPi OS itself
also provides versions of Psychtoolbox, installable via “sudo apt install
octave-psychtoolbox-3”, and 64-Bit versions of RPi OS would ship such
packages as 64-Bit packages. Other Linux distributions for RaspberryPi,
like Ubuntu for RaspberryPi, will also ship Psychtoolbox packages as
32-Bit or 64-Bit variants via the sudo apt install octave-psychtoolbox-3
method. While these packages will likely work just fine, these are
currently not tested by the Psychtoolbox developers, or supported in case
of questions or problems. These packages are maintained by the
NeuroDebian maintainers, and they are usually quite a bit out of date
wrt. the current PTB beta releases, as the Linux distributions usually
ship whatever PTB was the most recent version at a time sometime before
the distributions was released. Those packages do not get updates after
initial distribution release, not even bug fixes. E.g., RPi OS at late
2022 ships some Psychtoolbox 3.0.17 variant, whereas PTB betas are now at
version 3.0.19 or later.
The RaspberryPi 2B is tested for compatibility with Psychtoolbox. The test system
is a RaspberryPi 2B with 1 GB of RAM. Other models of RaspberryPi 2 and 3 are
expected to work equally well (or better for the more powerful RaspberryPi 3),
but not tested. It provides:
-
40 pin digital i/o, e.g., for TTL trigger emission or reception, hardware
interfacing etc. See RaspberryPiGPIODemo.m for how to use it. -
Working stereo audio output with ok latency and good timing via the headphone
jack. Tested and verified by use of a VPixx Datapixx. Working audio output or
input via UAC compliant USB audio cards. -
Working video capture with external USB connected web cams.
-
Single display support via HDMI for up to 1920x1080 pixels full HD, with 8 bit
of color precision, for standard 24 bit color depth / 16.8 Millions of colors,
or 256 levels of red, green, blue, grey. No support for floating point framebuffers
or textures, and thereby no support for stimulus drawing or post-processing
which would require such buffers.
The RaspberryPi 4, and its keyboard form-factor variant RaspberryPi 400, apart
from providing more RAM and faster processor and graphics, do support:
-
40 pin digital i/o, e.g., for TTL trigger emission or reception, hardware
interfacing etc. See RaspberryPiGPIODemo.m for how to use it. Untested so far,
but should work the same as on the RaspberryPi 2 and 3. -
Presumably working stereo output like the RPi 2 and 3 on models with headphone
jack. This is untested by us so far, but reasonable to assume it is working. -
Audio output via HDMI audio: This is tested to be working for video playback
with the Chrome webbrowser, and with Psychtoolbox built-in [GStreamer](GStreamer) based
movie/video/audio playback engine. You can play back movies with sound, or
sound files in common formats like .wav or .mp3 or .ogg audio etc., whatever
is supported by [GStreamer](GStreamer’s collection of plugins. It also works with our
PsychPortAudio driver. -
Working audio output or input via UAC compliant USB audio cards.
-
Working video capture with external USB connected web cams.
-
Dual-display support via two micro-HDMI connectors up to 4k UHD resolution,
but 4k 3840x2160 resolution is limited to 30 Hz refresh rate by default. A
2560x1440 resolution works at 60 Hz, something like 1920x1080 should be able
to reach 100 Hz or a bit more. The outputs are in principle 10 bit and 12 bit
deep color capable, assuming enough video bandwidth, but 12 bit output is not
yet that useful, as of December 2023 and Linux 6.1, as gamma tables are not yet
supported, only identity passthrough of framebuffer pixels, and the maximum
resolution of the framebuffer is 10 bpc. Therefore choosing 12 bit output is
not yet of practical measurable benefit, and just a waste of video bandwidth.So far only single-display operation is tested, due to lack of a 2nd
micro-HDMI adapter cable.The new VideoCore-6 gpu has slightly higher performance than the older VideoCore
4 gpu in RPi 2 and 3. More importantly, the gpu supports full 32 bit floating
point framebuffers and textures, with the restriction that framebuffer blending /
alpha-blending is only supported on 16 bit floating point framebuffers. This
opens up many new use cases for more complex visual stimuli, e.g., it makes
AdditiveBlendingForLinearSuperpositionTutorial.m demo work, as well as
MorphDemo and MorphTextureDemo, FDFDemo, GarboriumDemo and ProceduralGarboriumDemo
and various other complex shader-based or alpha-blending based stimuli.
It also allows to take full advantage of high-end visual stimulators
and display devices from VPixx, if you are inclined enough to drive a
multi-thousand dollar stimulator with a 50$ microcomputer. Ofc. while
accuracy is excellent, performance is more limited than with a desktop
or laptop graphics card from Intel, AMD or NVidia.Testing showed that stimuli generated without use of alpha-blending can
be output at the full 16 bit or 14 bit precision of VPixx or CRS visual
stimulators, while stimuli created via alpha blending with 16 bit
floating point framebuffers can achieve up to 11 bit precision,
depending on specific stimulus.Output precision without special stimulators to regular displays is
limited to 8 bpc on current RPi OS 11 and RPi OS 12, as of December 2023.However, on RaspberryPi 4 and later (tested with RaspberryPi 400) you
can achieve 10 bpc output (via the usual XOrgConfCreator setup), if you
manually install Mesa version 23.3.1 or later, e.g., by compiling it
yourself, or by getting it via PiKISS or similar tools from a 3rd party
source.Movie playback of full HD video at 24 fps - 30 fps, and up to 50 fps
stable and almost 60 fps without sound is possible on the RaspberryPi
4/400, and probably at higher stable fps on a RaspberryPi 5, with
suitably encoded movies and proper playback settings. For playback of
H264 encoded movies, the builtin H264 hardware decoder is used by
default, but testing on RPi 400 showed that forcing use of a software
decoder may provide higher performance! See specialFlags1 setting 4 for
that. You must specify an explicit ‘pixelFormat’ of 6 in
Screen(‘OpenMovie’); for this to work at good performance for high
resolution movies. At default settings movie playback would be very
slow, e.g., 1-2 fps for full HD content. Additionally, the H264
hardware decoder is picky wrt. proper content encoding. While footage
e.g., from YouTube or other professionally encoded sources works, badly
encoded footage may not. Many other movie formats play back with
software decoding, at potentially lower performance. To summarize: Good
performance playback of HD content at good framerates works if you do
everything right wrt. playback parameters and encoding. Otherwise your
mileage may vary both wrt. performance and reliability.It is also possible to enable experimental Vulkan display support,
although this is of no meaningful benefit right now (as of December
2023), and just yields you lower performance and broken visual
stimulation timing and timestamps. The way to enable this is to follow
the following instructions on how to use PiKISS to install an up to
date Vulkan driver for the RPi 4+. It is important to install a driver
from Mesa 23.1 or later:
https://qengineering.eu/install-vulkan-on-raspberry-pi.html
After that, you can launch Octave from the command line with the use of
the zink OpenGL driver via the following:
MESA_LOADER_DRIVER_OVERRIDE=zink octave
If you use Psychtoolbox with RPi OS, these setup steps are strongly recommended:
-
Update your RPi OS to the latest version “sudo apt update” and “sudo apt upgrade”.
-
Make sure the Linux kernel is at least of version 6.1 or later. If “uname -a”
reports a lower version, upgrade the kernel via “sudo rpi-update” and some reboot.
This step is generally not needed on RPiOS 12 and later, it ships with a recent
enough kernel already. -
Switch from the firmware kms video driver to the proper fully open-source kms
video driver. For this, edit the file /boot/config.txt - the section at the end,
then reboot. The section should look like this on a RaspberryPi 1 / 2 / 3 / 4 / 400:dtoverlay=vc4-kms-v3d
max_framebuffers=2It is important that the dtoverlay parameter should be vc4-kms-v3d instead
of vc4-fkms-v3d.Note: This step seems to be no longer needed on RPiOS 12, as it is already configured
to these settings. -
On RPi OS 12, when running on a RaspberryPi 4 / 400 or a later model, a Wayland
display server (named “wayfire”) is used by default, instead of a XOrg X-Server.
This is currently incompatible with Psychtoolbox or any other vision science
toolkit. You have to manually switch back to a desktop GUI which uses the native
XOrg X-Server via the following steps:a) In a terminal type: sudo raspi-config
b) Navigate to Advanced Options > “A6 Wayland - Switch between Wayland and X backends”
c) Select “W1 X11 - OpenBox window manager with X11 backend”
d) Confirm with OK.
e) Select Finish to exit the configuration tool.
f) Reboot the Raspberry Pi.You also need to disable use of xcompmgr to avoid tearing and bad visual timing and
Psychtoolbox sync failures with warnings a la “pageflipping not being used for flips”:In a terminal type the following to remove xcompmgr:
killall xcompmgr; sudo apt remove xcompmgrThis will make visual stimulus timing work for fullscreen windows,
and remove tearing. Regular windows on the desktop will tear though,
and transparency for Psychtoolbox windows will not work. If you want
a tear-free desktop and also working transparency for Psychtoolbox
windows, you can install Mutter as a better X11 compositor.To switch to Mutter as a much better desktop compositor:
sudo apt install mutter
Edit the desktop config file via: sudo pico /etc/xdg/lxsession/LXDE-pi/desktop.conf
Change the following line
window_manager=openbox-lxde-pi
into
window_manager=mutter
Save the file via CTRL+o + Return.
logout and login again to make the change to mutter effective. -
Legacy RPi OS 11 setup steps: (Not needed on RPi OS 12 and later)
On the RaspberryPi 1/2/3, you must disable use of xcompmgr to avoid tearing and
bad visual timing (as far as we know not needed for RaspberryPi 4/400):In a terminal type: sudo raspi-config
Navigate to Advanced Options > Compositor > xcompmgr composition manager
Choose No
Reboot the Raspberry Pi. -
If Psychtoolbox complains angrily about “broken timing” and “pageflipping not
being used”, and/or if you observe flicker/tearing artifacts or other display
artifacts, it is a good idea to run XOrgConfCreator and XOrgConfSelector to
install a custom xorg.conf file, which will work around a current limitation
in RPi OS on some hardware, e.g., RaspberryPi 1/2/3. Logout and login again,
or reboot the RaspberryPi, for the changes to take effect.
With all setup steps performed properly, and a reboot for good measure,
visual stimulation should work very well, with robust, trustworthy and
sub-millisecond accurate visual stimulus onset timestamps, as verfied
by us with external measurement equipment.
In general, the RaspberryPi microcomputers are quite capable devices
for neuroscience testing, even for many vision science paradigms. Their
builtin gpio support makes them especially nifty if one needs to
receive or send TTL triggers or other i/o.
Further support for improvements to Psychtoolbox wrt. RaspberryPi
devices, and user support will be contingent on labs financially
supporting our work. Until then, consider this work being done on a low
effort basis.
Psychtoolbox/PsychDocumentation/RaspberryPiSetup.m