Automatic seaweed removal manoeuvre

Hi,
as I am mainly using my ASV for marine research, floating seaweed is always a huge problem for propellers.
Looking at the SolarSurfer code on GitHub, they implemented a seaweed removal manoeuvre in case of sudden speed loss and increased current consumption which could be ported to the ArduBoat core software without adding any other peripherals.
Do you think it could be a feasible addition?

I have a lot of experience with Blue Robotics Thrusters (400 hours or so). Reversing them does not mean they will shed any sea weed or other material they have picked up. It tends to get wrapped up in the shaft or tolerances that it can get into and reverse will not always get rid of it. The ESC will over heat and shut down also. Screens are a better option I think.

Maybe with other types of propeller the manoeuvre they developed could be useful, especially for autonomous systems that must travel for long routes without maintenance.

This is the algorithm btw:

void execute() {
		Helmsman::setHeading(degrees(desiredCourse));
		Helmsman::setPower(desiredPower);
		if ( RemoteControl::isManual() ) {
			Helmsman::executeManual(RemoteControl::getSteering(),RemoteControl::getPower());
		} else if ( forceSeaweedRemoval ) {
			if ( !removalManueverPerformed ) {
		  	uint32_t elapsedTime = (millis() - seaweedRemovalTimer)/1000;
		  	if ( elapsedTime < 10 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 18 ) {
		  		Helmsman::executeManual(0,-350);
		  	} else if ( elapsedTime < 20 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 28 ) {
		  		Helmsman::executeManual(0,350);
		  	} else if ( elapsedTime < 30 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 38 ) {
		  		Helmsman::executeManual(0,-350);
		  	} else if ( elapsedTime < 40 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 48 ) {
		  		Helmsman::executeManual(0,350);
		  	} else if ( elapsedTime < 50 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 58 ) {
		  		Helmsman::executeManual(0,-350);
		  	} else if ( elapsedTime < 60 ) {
		  		Helmsman::executeManual(0,0);
		  	} else if ( elapsedTime < 68 ) {
		  		Helmsman::executeManual(0,350);
		  	} else if ( elapsedTime < 70 ) {
		  		Helmsman::executeManual(0,0);
		  	} else {
		  		removalManueverPerformed = true;
		  	}
		  }
	  } else {
			Helmsman::execute(degrees(DCM::yaw),0); //bldc->getTotalPower());
		}
	}
1 Like

Maybe. But don’t count on it.

It’s an interesting idea. This must have been an effort in the very early days of BlueRobotics (an ArduPilot partner company that is the maintainer of our submarine code).

It looks like it spins the motors full forward, then pauses, then full reverse, then pauses, etc. It’s not very hard to implement and it would probably be integrated into the crash failsafe which can trigger if the vehicle finds that it’s not progressing in Auto mode.

Personally before I’d put the time into developing the feature, I’d want to see a case where the problem occurred for a user and that the maneuver works (i.e. it could be simulated in Manual mode). It seems like a decent idea but we have this sort of “golden rule” that we don’t add stuff unless it’s needed… just trying to keep complexity of the code under control.

Could a single motor with some seaweed in a bucket be a valid test bed?

yes, that’s probably enough. … I wonder, have you hit this problem on a real boat yet? I’m definitely keen that we get AP to the point where it can sail off into the sea for many weeks or months and reliably perform it’s mission.

Yeah that’s my long term goal, for the moment I am using a companion computer to override the ArduPilot when needed.

I experienced motor failure due to seaweed and debris twice actually, but it was a long time ago and with PNP kits, I cannot really compare to a properly build boat.

I’ve created an issue for it as a first step.

1 Like

False positives can be a problem, especially when it comes to getting stuck in an obstacle or facing strong currents.

I wonder if there is a reliable way to detect strong currents and go in a rudder-only (if rudder is available) traveling mode as it would be useless to waste power to run motors. Seaweed presence could then be diagnosed excluding the latter case, so when the boat is moving a bit towards the WP but it is consuming too much power.

The best thing to handle all of this in my opinion would be the capability to detect stalled motors. As mentioned, the blockage removal routine on the thruster can work, but it will depend on the type of entanglement. More often than not, it will not work as @David_Boulanger pointed out.

If you can detect that a thruster is stalled, you can try to remove the blockage, and determine if you were successful in that attempt. The failure to proceed in auto mode with a failsafe seems like an ok workaround in the meantime and nice thing to have in any case.

1 Like

Was there any more progress on this, I am looking to implement a lua that can at least warn a motor is underperforming either by low/no rpm detected or by abnormally high or low current consumption. by using ESC telemetry each motor can be independently monitored and actions could be taken on the faulty motor depending on the fault detected like seaweed removal or shutdown.

There are a number of failure scenarios that I can think of, each would require different actions depending on the capabilities of the boat.

Assuming a single screw boat with a rudder,
If low rpm and high current detected it could be assumed that something is around the propeller, all that could be done is some back and forwards to see if the fault can be cleared. If the motor cannot turn at all then the motor should then be disabled to prevent further damage, it could then activate any auxiliary propulsion motors like air screws or water jets to take over propulsion.

A twin screw boat with a rudder could have some additional monitoring to detect faults sooner by checking if both propellers are within a set rpm range when going straight ahead with no steering input if they are more than a few hundred RPM out then flash a warning or attempt to clear it, if one motor is incapacitated then the remaining one could be reassigned to centre so it isn’t trying to tank steer with a single motor.

A twin screw boat with no rudders with only tank steering would have to use the prop clear routine of back and forwards then disable the motor if it fails as it can’t make forward progress with a single motor. it should then use auxiliary propulsion if available.

If low current high RPM is detected, then it’s probably a propeller failure and the motor is running with no load. It should be treated as a motor stall and disabled and failed mode activated.

1 Like