Skip to content

Commit 40eebb7

Browse files
Update Trim Tab Angle (#488)
* Added parameters, modified publisher callback * Added inverse exponential, updated yaml file * Fixed Flake8 error * Specified parameter datatypes, updated ROS parameter README * README syntax fixes * Updated scaling function and README
1 parent 6879fff commit 40eebb7

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

src/controller/controller/wingsail/wingsail_ctrl_node.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from controller.common.lut import LUT
1616
from controller.wingsail.controllers import WingsailController
1717

18+
SCALING_INTERCEPT = 1
19+
1820

1921
def main(args=None):
2022
rclpy.init(args=args)
@@ -76,6 +78,8 @@ def __declare_ros_parameters(self):
7678
("pub_period_sec", rclpy.Parameter.Type.DOUBLE),
7779
("reynolds_number", rclpy.Parameter.Type.DOUBLE_ARRAY),
7880
("angle_of_attack", rclpy.Parameter.Type.DOUBLE_ARRAY),
81+
("apparent_wind_threshold", rclpy.Parameter.Type.DOUBLE),
82+
("scaling_coef", rclpy.Parameter.Type.DOUBLE),
7983
],
8084
)
8185

@@ -140,9 +144,22 @@ def __publish(self):
140144
It also logs information about the publication to the logger."""
141145
msg = SailCmd()
142146

147+
apparent_speed = self.__filtered_wind_sensor.speed.speed
148+
apparent_direction = self.__filtered_wind_sensor.direction
149+
apparent_threshold = (
150+
self.get_parameter("apparent_wind_threshold").get_parameter_value().double_value
151+
)
152+
153+
# Sets trim tab angle, scales if apparent wind speed is above threshold
143154
self.__trim_tab_angle = self.__wingsailController.get_trim_tab_angle(
144-
self.__filtered_wind_sensor.speed.speed, self.__filtered_wind_sensor.direction
155+
apparent_speed, apparent_direction
145156
)
157+
if apparent_speed > apparent_threshold:
158+
coef = self.get_parameter("scaling_coef").get_parameter_value().double_value
159+
speed_difference = apparent_threshold - apparent_speed
160+
self.__trim_tab_angle = (
161+
self.__trim_tab_angle * coef * speed_difference + SCALING_INTERCEPT
162+
)
146163

147164
msg.trim_tab_angle_degrees = self.__trim_tab_angle
148165

src/global_launch/config/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ ROS parameters specific to the nodes in the Controller.
9191
- _Datatype_: `double`
9292
- _Range_: `(-180.0, 180.0]`
9393

94+
**`apparent_wind_threshold`**
95+
96+
- _Description_: The high wind threshold value for apparent wind.
97+
- _Datatype_: 'double'
98+
- _Range_: '[0.0, MAX_DOUBLE)'
99+
100+
**`scaling_coef`**
101+
102+
- _Description_: The coefficient used to scale trim tab angle.
103+
- _Datatype_: 'double'
104+
- _Range_: '[0.0, MAX_DOUBLE)'
105+
94106
## Boat Simulator Parameters
95107

96108
ROS parameters specific to the nodes in the boat simulator.

src/global_launch/config/globals.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ wingsail_ctrl_node:
2121
ros__parameters:
2222
reynolds_number: [0.0, 1.0, 2.0]
2323
angle_of_attack: [0.0, 1.0, 2.0]
24+
apparent_wind_threshold: 10.0
25+
scaling_coef: 1.0
2426

2527
# boat_simulator parameters
2628
low_level_control_node:

0 commit comments

Comments
 (0)