Skip to content

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: -