|
| 1 | +<?xml version='1.0' encoding='UTF-8'?> |
| 2 | +<root> |
| 3 | + <tabbed_widget parent="main_window" name="Main Window"> |
| 4 | + <Tab tab_name="Lateral Controller" containers="1"> |
| 5 | + <Container> |
| 6 | + <DockSplitter sizes="0.50214;0.49786" count="2" orientation="-"> |
| 7 | + <DockSplitter sizes="0.333487;0.333025;0.333487" count="3" orientation="|"> |
| 8 | + <DockArea name="Lateral Controller Info"> |
| 9 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 10 | + <range right="698.352475" top="0.186116" bottom="-0.195346" left="612.164064"/> |
| 11 | + <limitY/> |
| 12 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[5]" color="#1f77b4"> |
| 13 | + <transform alias="lateral error" name="Scale/Offset"> |
| 14 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 15 | + </transform> |
| 16 | + </curve> |
| 17 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[8]" color="#d62728"> |
| 18 | + <transform alias="yaw error" name="Scale/Offset"> |
| 19 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 20 | + </transform> |
| 21 | + </curve> |
| 22 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[0]" color="#1ac938"> |
| 23 | + <transform alias="steer cmd (final)" name="Scale/Offset"> |
| 24 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 25 | + </transform> |
| 26 | + </curve> |
| 27 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[2]" color="#ff7f0e"> |
| 28 | + <transform alias="steer cmd (FF-filtered)" name="Scale/Offset"> |
| 29 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 30 | + </transform> |
| 31 | + </curve> |
| 32 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[3]" color="#f14cc1"> |
| 33 | + <transform alias="steer cmd (FF-raw)" name="Scale/Offset"> |
| 34 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 35 | + </transform> |
| 36 | + </curve> |
| 37 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[4]" color="#9467bd"> |
| 38 | + <transform alias="steer measured" name="Scale/Offset"> |
| 39 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 40 | + </transform> |
| 41 | + </curve> |
| 42 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[1]" color="#17becf"> |
| 43 | + <transform alias="steer cmd (mpc-raw)" name="Scale/Offset"> |
| 44 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 45 | + </transform> |
| 46 | + </curve> |
| 47 | + </plot> |
| 48 | + </DockArea> |
| 49 | + <DockArea name="Velocity"> |
| 50 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 51 | + <range right="698.352475" top="4.394836" bottom="-0.304341" left="612.164064"/> |
| 52 | + <limitY/> |
| 53 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[9]" color="#1f77b4"> |
| 54 | + <transform alias="trajectory velocity" name="Scale/Offset"> |
| 55 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 56 | + </transform> |
| 57 | + </curve> |
| 58 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[10]" color="#d62728"> |
| 59 | + <transform alias="current velocity" name="Scale/Offset"> |
| 60 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 61 | + </transform> |
| 62 | + </curve> |
| 63 | + </plot> |
| 64 | + </DockArea> |
| 65 | + <DockArea name="path curvature"> |
| 66 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 67 | + <range right="698.352475" top="0.038695" bottom="-0.007898" left="612.164064"/> |
| 68 | + <limitY/> |
| 69 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[14]" color="#d62728"> |
| 70 | + <transform alias="smoothed" name="Scale/Offset"> |
| 71 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 72 | + </transform> |
| 73 | + </curve> |
| 74 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[15]" color="#1f77b4"> |
| 75 | + <transform alias="raw" name="Scale/Offset"> |
| 76 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 77 | + </transform> |
| 78 | + </curve> |
| 79 | + </plot> |
| 80 | + </DockArea> |
| 81 | + </DockSplitter> |
| 82 | + <DockSplitter sizes="0.332102;0.335797;0.332102" count="3" orientation="|"> |
| 83 | + <DockArea name="angular-velocity converted from"> |
| 84 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 85 | + <range right="698.352475" top="0.044071" bottom="-0.025022" left="612.164064"/> |
| 86 | + <limitY/> |
| 87 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[11]" color="#1ac938"> |
| 88 | + <transform alias="steering cmd" name="Scale/Offset"> |
| 89 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 90 | + </transform> |
| 91 | + </curve> |
| 92 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[12]" color="#ff7f0e"> |
| 93 | + <transform alias="steering measured " name="Scale/Offset"> |
| 94 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 95 | + </transform> |
| 96 | + </curve> |
| 97 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[13]" color="#d62728"> |
| 98 | + <transform alias="path curvature (smoothed)" name="Scale/Offset"> |
| 99 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 100 | + </transform> |
| 101 | + </curve> |
| 102 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[17]" color="#1f77b4"> |
| 103 | + <transform alias="steering predicted" name="Scale/Offset"> |
| 104 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 105 | + </transform> |
| 106 | + </curve> |
| 107 | + </plot> |
| 108 | + </DockArea> |
| 109 | + <DockArea name="yaw"> |
| 110 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 111 | + <range right="698.352475" top="2.871953" bottom="2.734902" left="612.164064"/> |
| 112 | + <limitY/> |
| 113 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[7]" color="#1ac938"> |
| 114 | + <transform alias="desired yaw" name="Scale/Offset"> |
| 115 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 116 | + </transform> |
| 117 | + </curve> |
| 118 | + <curve name="/control/trajectory_follower/lateral/diagnostic/data[6]" color="#ff7f0e"> |
| 119 | + <transform alias="current yaw" name="Scale/Offset"> |
| 120 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 121 | + </transform> |
| 122 | + </curve> |
| 123 | + </plot> |
| 124 | + </DockArea> |
| 125 | + <DockArea name="control mode (1: Auto, 2: Manual, 3: Disengaged, 4: Not Ready)"> |
| 126 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 127 | + <range right="698.352475" top="1.100000" bottom="0.900000" left="612.164064"/> |
| 128 | + <limitY/> |
| 129 | + <curve name="/vehicle/status/control_mode/mode" color="#1f77b4"/> |
| 130 | + </plot> |
| 131 | + </DockArea> |
| 132 | + </DockSplitter> |
| 133 | + </DockSplitter> |
| 134 | + </Container> |
| 135 | + </Tab> |
| 136 | + <Tab tab_name="Longitudinal Controller" containers="1"> |
| 137 | + <Container> |
| 138 | + <DockSplitter sizes="0.3015;0.29045;0.278611;0.12944" count="4" orientation="-"> |
| 139 | + <DockArea name="Velocity"> |
| 140 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 141 | + <range right="698.352475" top="4.401672" bottom="-0.413450" left="612.164064"/> |
| 142 | + <limitY/> |
| 143 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[2]" color="#17becf"> |
| 144 | + <transform alias="target" name="Scale/Offset"> |
| 145 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 146 | + </transform> |
| 147 | + </curve> |
| 148 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[1]" color="#9467bd"> |
| 149 | + <transform alias="current" name="Scale/Offset"> |
| 150 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 151 | + </transform> |
| 152 | + </curve> |
| 153 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[4]" color="#bcbd22"> |
| 154 | + <transform alias="closest" name="Scale/Offset"> |
| 155 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 156 | + </transform> |
| 157 | + </curve> |
| 158 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[24]" color="#1f77b4"> |
| 159 | + <transform alias="predicted" name="Scale/Offset"> |
| 160 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 161 | + </transform> |
| 162 | + </curve> |
| 163 | + </plot> |
| 164 | + </DockArea> |
| 165 | + <DockArea name="Longitudinal Controller Info"> |
| 166 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 167 | + <range right="698.352475" top="1.211409" bottom="-3.512473" left="612.164064"/> |
| 168 | + <limitY/> |
| 169 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[3]" color="#1ac938"> |
| 170 | + <transform alias="FF" name="Scale/Offset"> |
| 171 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 172 | + </transform> |
| 173 | + </curve> |
| 174 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[14]" color="#ff7f0e"> |
| 175 | + <transform alias="FF+FB" name="Scale/Offset"> |
| 176 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 177 | + </transform> |
| 178 | + </curve> |
| 179 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[19]" color="#f14cc1"> |
| 180 | + <transform alias="FB-P" name="Scale/Offset"> |
| 181 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 182 | + </transform> |
| 183 | + </curve> |
| 184 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[16]" color="#1f77b4"> |
| 185 | + <transform alias="jerk filtered" name="Scale/Offset"> |
| 186 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 187 | + </transform> |
| 188 | + </curve> |
| 189 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[17]" color="#d62728"> |
| 190 | + <transform alias="slope added" name="Scale/Offset"> |
| 191 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 192 | + </transform> |
| 193 | + </curve> |
| 194 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[18]" color="#004eff"> |
| 195 | + <transform alias="final" name="Scale/Offset"> |
| 196 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 197 | + </transform> |
| 198 | + </curve> |
| 199 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[25]" color="#ff7f0e"> |
| 200 | + <transform alias="calculated" name="Scale/Offset"> |
| 201 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 202 | + </transform> |
| 203 | + </curve> |
| 204 | + </plot> |
| 205 | + </DockArea> |
| 206 | + <DockArea name="..."> |
| 207 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 208 | + <range right="698.352475" top="1.302476" bottom="-3.514695" left="612.164064"/> |
| 209 | + <limitY/> |
| 210 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[25]" color="#d62728"> |
| 211 | + <transform alias="measured acc (1/0.1s+1)" name="Scale/Offset"> |
| 212 | + <options value_offset="0.0" time_offset="0.0" value_scale="1.0"/> |
| 213 | + </transform> |
| 214 | + </curve> |
| 215 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[31]" color="#ff7f0e"> |
| 216 | + <transform alias="error acc " name="Scale/Offset"> |
| 217 | + <options value_offset="0.0" time_offset="0.0" value_scale="1.0"/> |
| 218 | + </transform> |
| 219 | + </curve> |
| 220 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[32]" color="#f14cc1"> |
| 221 | + <transform alias="error acc filtered" name="Scale/Offset"> |
| 222 | + <options value_offset="0.0" time_offset="0.0" value_scale="1.0"/> |
| 223 | + </transform> |
| 224 | + </curve> |
| 225 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[33]" color="#9467bd"> |
| 226 | + <transform alias="acc cmd output" name="Scale/Offset"> |
| 227 | + <options value_offset="0.0" time_offset="0.0" value_scale="1.0"/> |
| 228 | + </transform> |
| 229 | + </curve> |
| 230 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[16]" color="#17becf"> |
| 231 | + <transform alias="desired acc" name="Scale/Offset"> |
| 232 | + <options value_offset="0.0" time_offset="0.0" value_scale="1.0"/> |
| 233 | + </transform> |
| 234 | + </curve> |
| 235 | + </plot> |
| 236 | + </DockArea> |
| 237 | + <DockArea name="State"> |
| 238 | + <plot flip_x="false" mode="TimeSeries" style="Lines" flip_y="false"> |
| 239 | + <range right="698.352475" top="2.050000" bottom="-0.050000" left="612.164064"/> |
| 240 | + <limitY/> |
| 241 | + <curve name="/control/trajectory_follower/longitudinal/diagnostic/data[13]" color="#d62728"> |
| 242 | + <transform alias="0:Drive 1:Stopping 2:Stopped 3:Emergency" name="Scale/Offset"> |
| 243 | + <options value_offset="0" time_offset="0" value_scale="1.0"/> |
| 244 | + </transform> |
| 245 | + </curve> |
| 246 | + </plot> |
| 247 | + </DockArea> |
| 248 | + </DockSplitter> |
| 249 | + </Container> |
| 250 | + </Tab> |
| 251 | + <currentTabIndex index="1"/> |
| 252 | + </tabbed_widget> |
| 253 | + <use_relative_time_offset enabled="1"/> |
| 254 | + <!-- - - - - - - - - - - - - - - --> |
| 255 | + <!-- - - - - - - - - - - - - - - --> |
| 256 | + <Plugins> |
| 257 | + <plugin ID="DataLoad CSV"> |
| 258 | + <parameters delimiter="0" time_axis=""/> |
| 259 | + </plugin> |
| 260 | + <plugin ID="DataLoad MCAP"/> |
| 261 | + <plugin ID="DataLoad ROS2 bags"> |
| 262 | + <use_header_stamp value="false"/> |
| 263 | + <discard_large_arrays value="true"/> |
| 264 | + <max_array_size value="100"/> |
| 265 | + <boolean_strings_to_number value="true"/> |
| 266 | + <remove_suffix_from_strings value="true"/> |
| 267 | + <selected_topics value=""/> |
| 268 | + </plugin> |
| 269 | + <plugin ID="DataLoad ULog"/> |
| 270 | + <plugin ID="MQTT Subscriber (Mosquitto)"/> |
| 271 | + <plugin ID="ROS2 Topic Subscriber"> |
| 272 | + <use_header_stamp value="false"/> |
| 273 | + <discard_large_arrays value="false"/> |
| 274 | + <max_array_size value="100"/> |
| 275 | + <boolean_strings_to_number value="false"/> |
| 276 | + <remove_suffix_from_strings value="false"/> |
| 277 | + <selected_topics value="/control/trajectory_follower/lateral/diagnostic;/control/trajectory_follower/longitudinal/diagnostic;/localization/acceleration;/vehicle/status/control_mode"/> |
| 278 | + </plugin> |
| 279 | + <plugin ID="UDP Server"/> |
| 280 | + <plugin ID="WebSocket Server"/> |
| 281 | + <plugin ID="ZMQ Subscriber"/> |
| 282 | + <plugin ID="Fast Fourier Transform"/> |
| 283 | + <plugin ID="Quaternion to RPY"/> |
| 284 | + <plugin ID="Reactive Script Editor"> |
| 285 | + <library code="--[[ Helper function to create a series from arrays

 new_series: a series previously created with ScatterXY.new(name)
 prefix: prefix of the timeseries, before the index of the array
 suffix_X: suffix to complete the name of the series containing the X value. If [nil], use the index of the array.
 suffix_Y: suffix to complete the name of the series containing the Y value
 timestamp: usually the tracker_time variable
 
 Example:
 
 Assuming we have multiple series in the form:
 
 /trajectory/node.{X}/position/x
 /trajectory/node.{X}/position/y
 
 where {N} is the index of the array (integer). We can create a reactive series from the array with:
 
 new_series = ScatterXY.new("my_trajectory") 
 CreateSeriesFromArray( new_series, "/trajectory/node", "position/x", "position/y", tracker_time );
--]]

function CreateSeriesFromArray( new_series, prefix, suffix_X, suffix_Y, timestamp )
 
 --- clear previous values
 new_series:clear()
 
 --- Append points to new_series
 index = 0
 while(true) do

 x = index;
 -- if not nil, get the X coordinate from a series
 if suffix_X ~= nil then 
 series_x = TimeseriesView.find( string.format( "%s.%d/%s", prefix, index, suffix_X) )
 if series_x == nil then break end
 x = series_x:atTime(timestamp)	 
 end
 
 series_y = TimeseriesView.find( string.format( "%s.%d/%s", prefix, index, suffix_Y) )
 if series_y == nil then break end 
 y = series_y:atTime(timestamp)
 
 new_series:push_back(x,y)
 index = index+1
 end
end

--[[ Similar to the built-in function GetSeriesNames(), but select only the names with a give prefix. --]]

function GetSeriesNamesByPrefix(prefix)
 -- GetSeriesNames(9 is a built-in function
 all_names = GetSeriesNames()
 filtered_names = {}
 for i, name in ipairs(all_names) do
 -- check the prefix
 if name:find(prefix, 1, #prefix) then
 table.insert(filtered_names, name);
 end
 end
 return filtered_names
end

--[[ Modify an existing series, applying offsets to all their X and Y values

 series: an existing timeseries, obtained with TimeseriesView.find(name)
 delta_x: offset to apply to each x value
 delta_y: offset to apply to each y value 
 
--]]

function ApplyOffsetInPlace(series, delta_x, delta_y)
 -- use C++ indices, not Lua indices
 for index=0, series:size()-1 do
 x,y = series:at(index)
 series:set(index, x + delta_x, y + delta_y)
 end
end
"/> |
| 286 | + <scripts/> |
| 287 | + </plugin> |
| 288 | + <plugin ID="CSV Exporter"/> |
| 289 | + <plugin ID="ROS2 Topic Re-Publisher"/> |
| 290 | + </Plugins> |
| 291 | + <!-- - - - - - - - - - - - - - - --> |
| 292 | + <previouslyLoaded_Datafiles/> |
| 293 | + <!-- - - - - - - - - - - - - - - --> |
| 294 | + <customMathEquations/> |
| 295 | + <snippets/> |
| 296 | + <!-- - - - - - - - - - - - - - - --> |
| 297 | +</root> |
| 298 | + |
0 commit comments