|
15 | 15 | from controller.common.lut import LUT |
16 | 16 | from controller.wingsail.controllers import WingsailController |
17 | 17 |
|
| 18 | +SCALING_INTERCEPT = 1 |
| 19 | + |
18 | 20 |
|
19 | 21 | def main(args=None): |
20 | 22 | rclpy.init(args=args) |
@@ -76,6 +78,8 @@ def __declare_ros_parameters(self): |
76 | 78 | ("pub_period_sec", rclpy.Parameter.Type.DOUBLE), |
77 | 79 | ("reynolds_number", rclpy.Parameter.Type.DOUBLE_ARRAY), |
78 | 80 | ("angle_of_attack", rclpy.Parameter.Type.DOUBLE_ARRAY), |
| 81 | + ("apparent_wind_threshold", rclpy.Parameter.Type.DOUBLE), |
| 82 | + ("scaling_coef", rclpy.Parameter.Type.DOUBLE), |
79 | 83 | ], |
80 | 84 | ) |
81 | 85 |
|
@@ -140,9 +144,22 @@ def __publish(self): |
140 | 144 | It also logs information about the publication to the logger.""" |
141 | 145 | msg = SailCmd() |
142 | 146 |
|
| 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 |
143 | 154 | 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 |
145 | 156 | ) |
| 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 | + ) |
146 | 163 |
|
147 | 164 | msg.trim_tab_angle_degrees = self.__trim_tab_angle |
148 | 165 |
|
|
0 commit comments