--- - name: Setup robot hosts: raspbot become: true vars: docker_users: - "{{ robot_user }}" pre_tasks: - name: Enable SPI via raspi-config command: raspi-config nonint do_spi 0 changed_when: false # Real-time scheduling setup per # https://control.ros.org/kilted/doc/ros2_control/controller_manager/doc/userdoc.html#determinism - name: Create realtime group group: name: realtime state: present - name: Add robot user to realtime group user: name: "{{ robot_user }}" groups: realtime append: true - name: Configure real-time scheduling limits copy: dest: /etc/security/limits.d/99-realtime.conf content: | @realtime soft rtprio 99 @realtime soft priority 99 @realtime soft memlock unlimited @realtime hard rtprio 99 @realtime hard priority 99 @realtime hard memlock unlimited owner: root group: root mode: '0644' # - name: Install low-latency kernel for improved RT performance # apt: # name: linux-lowlatency # state: present # update_cache: true # I2C Fast Mode (400 kHz) reduces SSD1306 OLED frame transfers from ~95 ms # to ~24 ms, shrinking the window in which the kernel I2C adapter lock blocks # motor writes on the shared /dev/i2c-1 bus. - name: Set I2C bus speed to 400 kHz lineinfile: path: /boot/firmware/config.txt regexp: '^dtparam=i2c_arm_baudrate=' line: 'dtparam=i2c_arm_baudrate=400000' notify: Reboot required handlers: - name: Reboot required debug: msg: "config.txt updated — reboot the Pi to apply I2C speed change" roles: - geerlingguy.docker