HITL System Setup¶
Hostname: hitlserver
Ubuntu settings¶
# extend the volume + ext4 file system
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
# motd config
sudo touch /var/lib/ubuntu-advantage/hide-esm-in-motd
sudo touch /var/lib/update-notifier/hide-esm-in-motd
sudo rm -rf /var/lib/update-notifier/updates-available
cd /etc/update-motd.d/
sudo mkdir archive
sudo mv 95-hwe-eol archive/
sudo mv 50-motd-news archive/
sudo mv 91-contract-ua-esm-status archive/
# unattended upgrades
sudo apt install unattended-upgrades sendmail-bin mailutils
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# set of corresponding settings (only security updates, send email on error - to be configured?!)
# package install
sudo apt install cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file make gcc libsdl2-dev libmagic1 python3-venv
sudo apt install gcc-multilib g++-multilib lcov
sudo apt install docker.io direnv
curl -LsSf https://astral.sh/uv/install.sh | sh
# zephyr sdk
cd /opt
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.2/zephyr-sdk-0.17.2_linux-x86_64.tar.xz
wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.2/sha256.sum | shasum --check --ignore-missing
sudo tar xvf zephyr-sdk-0.17.2_linux-x86_64.tar.xz
cd zephyr-sdk-0.17.2
./setup.sh
# ... y ... y
sudo cp ./sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.5/zephyr-sdk-0.16.5_linux-x86_64.tar.xz
wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.5/sha256.sum | shasum --check --ignore-missing
sudo tar xvf zephyr-sdk-0.16.5_linux-x86_64.tar.xz
# ufw firewall
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow from 192.168.0.0/16 to any port 22 # ssh
sudo ufw allow 443/tcp # Allow HTTPS (github runner)
sudo ufw allow 80/tcp # Allow HTTP (github runner)
sudo ufw enable
sudo ufw status verbose
# for testing (also used by CI then), venv needed for pyocd?
pyocd pack install stm32g491cetx
pyocd pack update
# device access, copy rules from sirius
sudo scp 192.168.52.12:/etc/udev/rules.d/49-stlink*.rules /etc/udev/rules.d/
sudo scp 192.168.52.12:/etc/udev/rules.d/50-USBtingo.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
# install STM32 Cube Programmer (download via browser, cp to system, unzip, install)
# ...
Github runner¶
# create a dedicated user for the runner
sudo useradd -m github_runner -p starpass
sudo usermod -aG docker github_runner
sudo usermod -aG dialout github_runner
sudo usermod -aG github_runner $USER
# Create a folder + download
sudo mkdir /data
cd /data
sudo mkdir actions-runner && cd actions-runner
sudo curl -o actions-runner-linux-x64-2.325.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.325.0/actions-runner-linux-x64-2.325.0.tar.gz
echo "5020da7139d85c776059f351e0de8fdec753affc9c558e892472d43ebeb518f4 actions-runner-linux-x64-2.325.0.tar.gz" | shasum -a 256 -c
sudo tar xzf ./actions-runner-linux-x64-2.325.0.tar.gz
# own to dedicated user
sudo chown github_runner .
sudo chown -R github_runner *
# configure runner
sudo su github_runner
cd /data/actions-runner
./config.sh --url https://github.com/starcopter/starcopter-firmware --token ADYZHNQFLMHKWNF7A4RQ4OTIMKNI4
# ...
# <enter e.g. name of the runner - and confirm defaults>
# ...
exit
# register runner as a service
sudo ./svc.sh install github_runner
sudo ./svc.sh start
sudo ./svc.sh status
# at the end reboot
sudo reboot now
Test Setup¶
Connect the BMS (3x):
- USB Debugger (STLINK-V3)
- Power via Test Fixture
- CAN via Test Fixture
Create the host configuration file: /data/hardware-map.yaml
How to Debug¶
- login via ssh
- local home folder for local tests
- runner log / working directory:
/data/actions-runner/_work/starcopter-firmware/starcopter-firmware/project - local dev libraries / tools:
/opt/ - hardware map for twister / zephyr:
/data/hardware-map.yaml - github runner user: github_runner (login via
sudo su github_runner)
Setup State (2025-07-25)¶
Hold "Alt" / "Option" to enable pan & zoom
flowchart LR
J[fa:fa-battery-half BMS: Open -- OOS]
B(CAN HUB -- OOS)
A[fa:fa-plug HITL Server]
G[fa:fa-battery-half BMS: Test Fixture D.2]
H[fa:fa-battery-half BMS: Copter 2 D.1]
I[fa:fa-battery-half BMS: Charger D.1]
U(USB-Hub)
U@{ shape: diam}
A --> U
U --> |USB Tingo| G
G --> |CAN| H
H --> |CAN| I
U -->|Debugger: 004800223232511739353236| G
U -->|Debugger: 001D00223232511639353236| H
U -->|Debugger: 0055002C3133510737363734| I
/data/hardware-map.yaml:
- baud: 1000000
connected: true
fixtures:
- bms_test_fixture
flash_timeout: 20
id: 004800223232511739353236
platform: bms@D.2
product: STLINK-V3
runner: stm32cubeprogrammer
runner_params:
- --tool-opt=--quietMode
serial: /dev/serial/by-id/usb-STMicroelectronics_STLINK-V3_004800223232511739353236-if01
- baud: 1000000
connected: true
fixtures:
- bms_copter_vpack_fixture
flash_timeout: 20
id: 001D00223232511639353236
platform: bms@D.1
product: STLINK-V3
runner: stm32cubeprogrammer
runner_params:
- --tool-opt=--quietMode
serial: /dev/serial/by-id/usb-STMicroelectronics_STLINK-V3_001D00223232511639353236-if01
- baud: 1000000
connected: true
fixtures:
- bms_charger_vpack_fixture
flash_timeout: 20
id: 0055002C3133510737363734
platform: bms@D.1
product: STLINK-V3
runner: stm32cubeprogrammer
runner_params:
- --tool-opt=--quietMode
serial: /dev/serial/by-id/usb-STMicroelectronics_STLINK-V3_0055002C3133510737363734-if01
- baud: 1000000
connected: false
fixtures:
- bms_disconnected_fixture
flash_timeout: 20
id: 0abc123
platform: bms@D.1
product: STLINK-V3
runner: stm32cubeprogrammer
runner_params:
- --tool-opt=--quietMode
serial: /dev/serial/by-id/usb-STMicroelectronics_STLINK-V3_abc123-if01
BMS with Test Fixture not for permanent engagement, as the resistors heat up during discharge
- BMS@D.2
- attached to the standard test fixture
- can run the selftest completely
- can run the bms_app (wont engage) or test apps
- Debugger: 004800223232511739353236
BMS in Copter (Slot 2)
- BMS@D.1
- test fixture attached with exchanged resistor to 1k Ohm (encoding BMS slot 2)
- can run the bms_app (copter mode) or test apps
- Debugger: 001D00223232511639353236
- CAN Transceiver permanently powered (VPack supplied)
BMS in Charger
- BMS@D.1
- test fixture attached with exchanged resistor shortcut (0 Ohm) (encoding the Charger)
- can run the bms_app (charger mode) or test apps
- Debugger: 0055002C3133510737363734
- CAN Transceiver permanently powered (VPack supplied)
[TODO] BMS open
- test fixture attached with exchanged resistor removed (infinite Ohm) (encoding the open state)
- can run the selftest completely
- can run the bms_app (open mode) or test apps without CAN (no power)
- Debugger: -