Raspberry Pi 5 Trouble with Navigator

Hi everyone! Im running into some issues using my Blue Navigator with my Raspberry Pi 5. Recently made the upgrade after our Pi 4b got fried from a battery malfunction. The Navigator being plugged into the Pi5 seemed completely fine and the LEDs come on as well. I have been trying to get some sort of IMU data out of it today, but nothing has been working and has been giving me this error

Here is the code that I’ve been using as well.

#!/usr/bin/env python

import os
import platform
import bluerobotics_navigator as navigator
from bluerobotics_navigator import AdcChannel, UserLed


def navigator_check():
    print(f"Functions available: {navigator.__all__}")

    if os.environ.get("CI") == "true":
        print("Running in CI")
        print("Not possible to test navigator sensors yet.")
        return

    print("Initializing navigator module.")

    if platform.machine() == "aarch64":
        # It's possible to set the configuration before initializing the navigator, check this example
        from bluerobotics_navigator import NavigatorVersion, Raspberry
        print("Setting up for Navigator V2 on Raspberry Pi 5")
        navigator.set_rgb_led_strip_size(1)
        navigator.set_navigator_version(NavigatorVersion.Version2)
        navigator.set_raspberry_pi_version(Raspberry.Pi5)

    navigator.init()

    print("Setting led on!")
    navigator.set_led(UserLed.Led1, True)

    print(f"Temperature: {navigator.read_temp()}")

    print(f"Pressure: {navigator.read_pressure()}")

    print(f"Leak sensor: {navigator.read_leak()}")

    Data = navigator.read_adc_all()
    print(
        f"Data ADC Channels: 1 = {Data[0]}, 2 = {Data[1]}, 3 = {Data[2]}, 4 = {Data[3]}"
    )

    print(f"Data ADC Channel: 1 = {navigator.read_adc(AdcChannel.Ch1)}")

    Data = navigator.read_mag()
    print(f"Magnetic field: X = {Data.x}, Y = {Data.y}, Z = {Data.z}")

    Data = navigator.read_accel()
    print(f"Acceleration: X = {Data.x}, Y = {Data.y}, Z = {Data.z}")

    Data = navigator.read_gyro()
    print(f"Gyroscope: X = {Data.x}, Y = {Data.y}, Z = {Data.z}")

    print("Setting led off!")
    navigator.set_led(UserLed.Led1, False)


if __name__ == "__main__":
    navigator_check()

Has anyone else been running into this issue or know what I can do to resolve it?

Hi @ryghoul -

The Pi 5 is not officially supported yet! You’d need a different heatsink to use it correctly…

With that said, things should work fine if you flash the correct BlueOS version - can you share what version you’re trying to use, and where you downloaded it from? Here?

Or are you trying to use a different software stack?

Hi @tony-white!

Thanks for the response. I didn’t flash a BlueOS version because I figured I would be able to run using it with just only the bluerobotics_nav library. Im just using the regular 64bit version from Raspbian Imager

Hi @ryghoul -

What are your goals for the hardware? If it is to control an ROV using ArduSub, you should definitely flash BlueOS!

Im using a Ping360 to help with obstacle detection, and then the navigator’s IMU and compass to help with headings and bearings for our ROV. Eventually with the goal to make it autonomous and moving on it’s own. My main issue is that Im just wondering why Im getting a specific error with the ADS1115 chip. Is the only way to fix that if I run BlueOS?

Hi @ryghoul -

The ADS1115 is the analog to digital converter, used on the Navigator to read voltage and current. You’re likely having issues because the OS hasn’t been configured for I2C access? Maybe you can do that with sudo raspi-config, but again running BlueOS would be advisable for your goals! It will handle connecting to the Ping360 and running ArduSub, which is very capable autopilot stack that already has auto mode functionality. Normally this requires a localization source, such as a DVL or some other aoustic positioning system, but you could conceivably develop a BlueOS extension that uses the Ping360 to generate location estimates?

If you specifically don’t want to use BlueOS, I believe this should be the relevant configuration script (which BlueOS normally uses as part of its setup process):

You can likely fetch and run it with the following terminal command:

sudo su -c 'curl -fsSL https://raw.githubusercontent.com/bluerobotics/BlueOS/master/install/boards/bcm_2712.sh | bash'

Hi @EliotBR and @tony-white!

Thank you guys for your suggestions. I remember checking my i2c connections yesterday and it didn’t seem to be an issue. As soon as I went for testing this morning, I just tried re-enabling it as a just in case, and then it started working now!

Thanks again for your guys’ responsiveness, I really appreciate it!