Ardusub and CAN bus

Hi,does anyone have experience with Blue robotics / ardusub and CAN bus operation?

I have to build a sub and am forced to use ESC with CAN communication for the thrusters.
My time is running out and I am looking for someone who can help programming the ardusub environment and integrate sensors such as DVL and USBL to the system.

Will pay, no prob. please send an email to rov@elekuhn.de if you can help.

Thanks a lot, Martin

Hi @Elwis -
ArduSub supports DVL and USBLs already, if you’re using in conjunction with a Raspberry Pi running BlueOS?

Since Ardupilot has CAN bus support, it may be fairly easy to get ArduSub talking to your ESCs, and once that’s achieved everything else should work normally! Can you share more information, like what model ESC? They would need to support bidirectional motor operation …

Hi Tony,

I read a bit about DVL and USBL integration but am still in the learning
process. With my hardware I am free to choose whatever I want. I have a
Raspberry here and a Navigator board (which will be a bit useless since
I need CAN to operate the ESCs but for the serial connections I may need
it). I also have bought a CAN bus adaptor for Raspberry Pi. Not sure if
I can operate both simutaneously.

With Ardusub and a companion Raspberry maybe it will work better. Not sure.

The ESC is a NX-W90 . They are very new and I dont expect a lot of
people work with these. We are stuck with these since they came with our
thrusters and with them they work very well. Very smooth operation from
100rpm to whatever is maximum. Bidirectional is also working.

I have a .dbc file with the signals for the ESC. Still working on
communication with the ESCs. In debug mode with a special program I can
control everything but this is no option for the final product.

There is still a lot of work with the electronics and mechnics and it
would be cool to find someone to take over for the programming tasks.
Or at lest help somehow :slight_smile:

Assuming you want the autopilot to make use of the CAN bus adaptor, you’ll need a suitable driver - either compiled into the firmware via a library in the HAL (Hardware Abstraction Layer), or implemented via a Lua script that the autopilot can run.

If you don’t need the autopilot to have access to it, and you’re able to find unused pins to connect it to, you can disable whatever autopilot functionality those pins are intended for[1] and set up your CAN bus driver via a BlueOS Extension.

There’s an old thread about Navigator CAN Bus support - it may be worth asking if those there have ended up working on it at all, or are willing to work with you to enable the functionality.

We (Blue Robotics) may be able to help with specific questions / blocking points, and you may also get some help via the broader ArduPilot community (e.g. asking on their forum, or their developer discord).


  1. There are some notes on doing this with an unused serial port. ↩︎

Hi Eliot,

I think connecting the CAN bus driver may be the easier part. A bit of a
problem may be my lack of experience with anything linux based. I have
experience in programming arduino and different PLC but thats about it.
The Blue OS Extension may be a good shot if I can somehow find out how
to make OS and ECS talk to each other.

The other - in my opinion a bit ugly solution - would be to take the
normal pwm output of the Navigator board and translate it via some
arduino board to a CAN bus signal. I would loose performance but it
would work.
Good thing is my sub is at least a ton in weight and doesnt need to be
positioned as delicately as a small rov.

If you can share which CAN bus adaptor you’ve got, someone may be able to look into how it operates and estimate how difficult it would be to integrate. If it’s designed for the Raspberry Pi then there’s likely at least one existing open source library for it, which could be used as a reference for an ArduPilot integration, or wrapped up in an Extension.

Indeed, this kind of option is also a potential solution. Agreed that it doesn’t feel particularly clean or efficient, but sometimes that’s less important than getting something working :person_shrugging:

Water-based vehicles in general aren’t as sensitive as aerial vehicles (especially drones and helicopters), so there is thankfully a relatively significant amount of wiggle room in what constitutes viable control latency for subs and boats :slight_smile:

Its a Waveshare 2-CH CAN HAT and actually there is a quite good documentation https://www.waveshare.com/wiki/2-CH_CAN_HAT

Hi Martin,

I can help with the ArduSub setup and CAN integration as well as getting your sensors working properly.
Sounds like a solid project. Let me know what timeline you are working with and we can go from there.
Best way to reach me is by email

You can reach out to me on my email here

Colin

Thanks for bringing this topic up. I have similar issue. I’m using DRONECAN servos (Hitec ones) and the lack of support from the NAVIGATOR board is peculiar.

My current solution is adding an RS232 or PWM interface between the navigator and the CAN device. This is done via a Adafruit RP2040 feather w/CAN. Code is not done but I got the messages that move the servo working. Let me know if you are interested.

1 Like

I am surely interested. Need to make it work somehow. Even if its only for testing. Later I try to do my own design, specially for these ESCs. There is a lot of information I can read back from the drives.