c6d02bbe43
The ros controller will timeout if it doesn't receive a cmd_vel message in a given period, stopping the wheels. webui sends messages at 100ms intervals, so the update rate needs to be 10Hz This may need to be reviewed when using other input systems.
65 lines
1.8 KiB
YAML
65 lines
1.8 KiB
YAML
---
|
|
- 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
|