File: RaspberryPiSetup.m

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,796 kB
  • sloc: ansic: 176,245; cpp: 20,103; objc: 5,393; sh: 2,753; python: 1,397; php: 384; makefile: 193; java: 113
file content (235 lines) | stat: -rw-r--r-- 13,275 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
% 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 OS), 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 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'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:
%
%   1. Update your RPi OS to the latest version "sudo apt update" and "sudo apt upgrade".
%
%   2. 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.
%
%   3. 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=2
%
%      It 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.
%
%   4. 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 xcompmgr
%
%      This 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.
%
%   5. 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.
%
%   6. 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.
%