Home        Store        Learn        Blog

ROS support for BlueROV2

I was wondering if there was a supported ROS package for BlueROV2.

We are looking into buying a small AUV for the department. However, as the use would be mainly for path planning and manoeuvring research, we would like an extensible platform. In particular, we would be keen to use the on-board camera to estimate position, merge the data from multiple sensors and store it, test different control strategies, etc. These would be possible under a ROS framework, but I have never tried ArduSub before.

Has anyone in a similar position managed to build a ROS package or created similar tools within ArduSub? Any tips?

Thank you!

Hi Enrico, we made a ros package for the bluerov quite some time ago, and it is out of date and unmaintained at this point. There has been some interest/work recently by a few folks who have picked up where we left off and started using ROS with ArduSub.

I recommend reaching out on gitter, and trying out this patch of our ros package that is waiting on a review.

It is our goal to have excellent ROS integration in the future, but it has not been regarded as a priority. We have been getting more and more interest recently though, so that may change soon.


I’m experimenting with a ROS-only version here: https://github.com/clydemcqueen/orca. There are several other folks working on something similar, I believe. It would be interesting to explore collaboration.

Thank you very much for the replies!

It looks like work is being done in that area. I will keep you posted on our progress.

Hello Clyde, I’ve tried to use your driver since I’m also interested in using the BlueROV with ROS Kinetic.

However, it seems like it is not connecting with the ROV. Could it be because of the OS? I’m using the default software that comes with the robot. Maybe it needs to have ubuntu 16 and ROS also in the ROV’s RPi?


You should be able to connect with the ROV without changing the software running in the companion board.

In ArduSub website, you can check this image:

The topside computer will communicate with the ROV using UDP port 14550, if you want to check the topside computer communication is working with the ROV, try QGC.

1 Like

Hi, Olaya – the orca driver doesn’t use the Pixhawk at all, so it requires a different motor controller. I’m currently experimenting with the Pololu Maestro. I’m happy to discuss this on gitter or github.

If you’re looking for a less invasive way to connect ROS to the BlueROV2 I recommend looking at http://wiki.ros.org/mavros, which provides a bridge between the MAV (ArduSub) message bus and ROS message bus.




If you want to try, we have a WIP ROS package, it includes a gazebo simulation with/without ROS integration and a bridge to control the ROV via ROS topics.

That looks great, thank you!

I’ll try to use it, and I will give you any feedback in the usage! :smile:

@olaya, did you already test it?

@patrickelectric I’am testing your package, but i have a problem, i cannot override in every channel just in 3 and 5. Did you know what is the problem?

Are you sending rc values like this ?
rostopic pub -r 10 /BlueRov2/rc_channel2/set_pwm std_msgs/UInt16 1100
Can you say exactly what are you performing and how ?

Yes, it’s strange. Now when i send PWM to RC 5 channel, i have two motors spinning. :smile:

I have the configuration with Pixhawk, RPI3 with the original image in ArduSub website, connected by Ethernet to a Top side PC (like as in above image). In the top side PC i’am running the just the ROS core and the node of BlueRov2. In this moment i’am just testing and try to control motors individual.

I see now what are you trying to do :thinking:
The rc_channel topic follows rc-input-and-output documentation.

Take a look in the BlueRov2 frame:

RC Inputs
These are the default channel mappings for RC input:
Channel	Meaning
1	    Pitch
2       Roll
3	    Throttle
4	    Yaw
5	    Forward
6	    Lateral
7	    Reserved
8	    Camera Tilt
9	    Lights 1 Level
10	    Lights 2 Level

Each /BlueRov2/rc_channelX/set_pwm, where X is the channel number, send a RC value like the joystick.

  • /BlueRov2/rc_channel1: Will not work because the frame doesn’t have pitch control.
  • /BlueRov2/rc_channel2: Will spin 6 and 5
  • /BlueRov2/rc_channel3: Will spin 6 and 5
  • /BlueRov2/rc_channel4: Will spin 1,2,3 and 4 to perform yaw movement
  • /BlueRov2/rc_channel5: Will spin 1,2,3 and 4 to perform forward movement
  • /BlueRov2/rc_channel6: Will spin 1,2,3 and 4 to perform lateral movement
  • /BlueRov2/rc_channel8: Will move the camera servo
  • /BlueRov2/rc_channel9-10: Will change the light state

How the motors spin will depend of the BlueRov mode (guided, stabilize, etc…)

1 Like

Oh, now i understand! Grateful :smiley: It will help me for my propose. My misunderstanding was when i “override” to a RC channel i was thinking that this action is a Digital Pin Write function (Arduino). But, if i understand, ArduSub works in some high level abstraction (in a concept of radio modelism), channels controls the “movement” not a digital pin, right?

But, with curiosity, I have already try with mavros without success too:

roslaunch bluerov_ros_playground user_mav.launch
rostopic pub /mavros/rc/override mavros_msgs/OverrideRCIn "channels: [1600, 1500, 1500, 1500, 1500, 1500, 1500, 1500]" -r 10

Why not work? :thinking:

Yes, exactly, take a look in ArduSub documentation about RC params list.

Like I said before:
/BlueRov2/rc_channel1: Will not work because the frame doesn’t have pitch control.

Probably It’ll do something if you ARM the vehicle and use something like channels: [1500, 1600, 1500, 1500, 1500, 1500, 1500, 1500]

Ok, i will!

Sorry, i’m :sleeping: Thanks a lot for your help :smiley:

Hello Patrick,
Regarding this channel configuration, I’ve consulted this link where it says that:

there are 8 main outputs and 6 auxiliary outputs. It is important not to connect analog servos to the main outputs, because the very fast update rate can cause the servo to burn itself out.

However, it is not clear to me which are the “main” and which the “auxiliar”.
I added an additional thruster to my bluerov2, and I want to run it when pressing the directional pad up and down. I decided to connect it to the light level channels, and modify the ROS node user_mav in order to run it.

However, I found that mavros/rc/override only publishes in 8 channels. How is the correspondence with the channels you mentioned above? Is there any other way that the light level channels should be accessed?

Thank you!:smiley:

Hi Olaya,

This is related to the pixhawk servo array.
AUX OUT: Auxiliar output, MAIN OUT: Main output.

In the exactly same way as in my last post :slight_smile:

Yes, that’s correct. But you can connect a ESC in the auxiliary port, the frequency will not be so high, but it’s not a problem for the ESC.

Oh sorry, I didn’t realize that rc_channel9-10 referred to the 8th field of the mavros override topic!

About the values, do all of them need to be between 1100 and 1900?

I have the camera servo connected to MAIN8 in the pixhawk, and it presents a very strange behavior, very different to when it is commanded through the QGroundControl.

On the other hand, the lights should be in MAIN7, so I connected the additional thruster there, but nothing happens! maybe I have the connections wrong? I did them according to this page.

Additionally, is there a way to send commands to the aux ports through ROS? I didn’t find any documentation on this!

Thank you very much for your help :blush:

Hi Olaya,

Sorry for taking this long to reply. I’ll need to update my ROS system here to do further test and help you with that. It can take some time.

Rc_override is to write over the joystick signals and not the pixhawk output, you can check my previous post.

Are you using mavros or bluerov bridge ?

That’s to maintain compatibility with legacy code, a result of RC radios.

Directly no, you’ll need to modify ArduSub to use rc_override to bypass the values for the aux ports.