Request for Help: Unable to Flash Firmware to Rover - Stuck at Board Identification


I’m currently experiencing an issue where I’m unable to flash any firmware onto my rover. Specifically, the flashing script stalls indefinitely during the board identification phase.

The issue appeared after I flashed a custom firmware, which was a modified version of the script from GitHub - LeoRover/core2_firmware_ros2: Micro-ROS-based firmware for the Husarion CORE2 controller running inside Leo Rover.. The modification was relatively minor - I just added a ROS topic to publish encoder values and I am certain that I didn’t interfere with any other major areas of the code. The first flash of this customized firmware was successful, but every subsequent attempt with any firmware results in an infinite loop during the board identification stage. Even attempts to revert to the default core2 firmware using rosrun leo_fw update were unsuccessful, as the script still stalls at the same point.

I’ve tried to resolve this issue by reflashing the SD card on the Raspberry Pi, but it appears the problem is likely due to the custom firmware currently installed on the CORE2 board. Is there a procedure to reset the firmware or a workaround to bypass the board check?

As an additional note, I’ve successfully flashed multiple firmwares onto CORE2 boards pre-version 1.8 in the past without any issues.

Any guidance would be greatly appreciated.

Hi @thevesh97,
We are currently looking into the problem of flashing custom firmware.
We have tried to reproduce your situation, but in our case after flashing custom firmware (one added topic publishing some number), reverting the changes with leo_fw update script was successful.

Could you provide us with some additional information on the method of flashing custom firmware (did you use our script or the ST-Link)?
I’d like to ask you also about one detail. You said that you tried to get the default firmware with rosrun leo_fw update - that’s a command for ROS1 and the firmware that you have modified is for ROS2. Was that a typo, or do you have some special setup with both frameworks?

Also for the workaround, the leo_fw flash script has a way to omit the stage of the board identification - you need to provide the type of the board by hand. It’s a command line argument -b and the board type is one of leocore,core2. So you can try something like ros2 run leo_fw flash -b core2