Control Strategies

The robots of this simulator have a build in movement control that we use to test some scenarios. The main purpose of this control strategy is to get the vehicle from point A to point B, point A being the current position and point B being the desired or target position. The control strategy implemented is one of the simplest found in the literature, called heading control.

This heading control strategy consists of performing consecutive corrections of the robots heading by choosing appropriate actuators position/velocity. The idea of this control is as follows: if at each step the robot is pointing to the target position and if there’s some forward velocity (in the robots frame) then it will eventually reach the desired position. Thus, what the controller does is receive the information necessary to adjust the robots heading, namely the current and desired position, then calculates the proper position of the actuator to reduce the error generated by subtracting the current and desired heading. The behavior generated by only using this raw erro to adjust the heading is pretty slow. To reduce this problem and set a desired behavior we use a PI strategy on the error. Another part of the control must be responsible for activating the thrusters power (or at least the actuator responsible for propulsion) properly.

A version of the control strategy describe above is currently running in all platforms of usv_sim. We chose this strategy due to its simplicity which makes it quick and easy to implement. The main difference between the implemented control strategies on the platforms is how the actuation is done. For example, in the Airboat the robots heading is changed according to the orientation of the fan. The Rudder Boat and Sailboat use the rudder to change their heading. The Differential Boat set different thruster power on the left and right thrusters to achieve heading change. The details of each control are shown below.

All of the controllers bellow use the same strategy to find the heading to be followed (pre-processing). First the controller gets information about odometry (current position) and target position, then uses these information to find the heading to be followed. After that, finds the error between the current heading and the desired heading and uses information of this error (sign and absolute value) to find the appropriate action to correct it and bring the platform to the desired heading. For each platform:

Heading control of the Airboat: Uses the heading error to find suitable fan orientation. Publishes the fan angle to /airboat/jointSetpoint.

Forward propulsion control of the Airboat: We implemented this behavior as a set of conditions. If the distance to target is greater than 10 meters the propulsion (fan power) is 100%. If the distance is between 2 and 10 meters then the propulsion is 50%. If the distance is less than 2 meters then the propulsion is set to 0%.

Heading control of the Rudder Boat and Sailboat: These platforms use the same rudder control, which consists of using the heading error to find suitable rudder angles. The rudder angle is published in /boat_rudder/jointSetpoint for the Rudder Boat and /sailboat/jointSetpoint for the Sailboat.

Forward propulsion control of the Rudder Boat: Similar to the Airboat.

Forward propulsion control of the Sailboat: Open and closes the sail according to the wind direction on the sailboats frame: head to wind (in irons) -> close sail (0 degrees). rear to wind (running) -> open sail (90 degrees). wind betweens these positions -> sail position chosen linearly between 0 and 90 degrees.

Heading control of the Differential Boat: Uses the heading error to find suitable velocities for both thrusters (left and right). The differential boat rotates according to the power of both thrusters. So, for example, to rotate clockwise (on its axis) a differential boat must use opposite power values on each thruster, for example, 10% on the right and -10% on the left thruster. So the controller check the error sign, choose a suitable direction of rotation and, according to the absolute value of the error, chose the thruster velocity.

Forward propulsion control of the Differential Boat: Uses a similar set of condition describe on the Airboat forward control. To get forward velocity in the Differential Boat it must set the same power in both thrusters.

Heading Control File
Airboat usv_sim_lsa/src/usv_base_ctrl/scripts/airboat_control_heading.py
Differential Boat usv_sim_lsa/src/usv_base_ctrl/scripts/diff_control_heading.py
Rudder Boat usv_sim_lsa/src/usv_base_ctrl/scripts/rudder_control_heading.py
Sailboat usv_sim_lsa/src/usv_base_ctrl/scripts/sailboat_control_heading.py

The videos below show the control strategies described above woking at different levels of disturbance (water current and wind).