mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-19 05:54:04 +08:00
184 lines
10 KiB
XML
184 lines
10 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<root>
|
|
<tabbed_widget parent="main_window" name="Main Window">
|
|
<Tab containers="1" tab_name="actuator data">
|
|
<Container>
|
|
<DockSplitter orientation="-" sizes="0.25;0.25;0.25;0.25" count="4">
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.100000" left="301.990881" top="0.100000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carControl/actuators/torque" color="#17becf"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-130.920132" left="301.990881" top="103.993176" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carControl/actuators/steeringAngleDeg" color="#1f77b4"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.604818" left="301.990881" top="24.797527" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carState/vEgoRaw" color="#ff7f0e"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.037812" left="301.990881" top="0.047261" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carControl/actuators/curvature" color="#f14cc1"/>
|
|
</plot>
|
|
</DockArea>
|
|
</DockSplitter>
|
|
</Container>
|
|
</Tab>
|
|
<Tab containers="1" tab_name="steering messages (CAN)">
|
|
<Container>
|
|
<DockSplitter orientation="-" sizes="0.142857;0.142857;0.142857;0.142857;0.142857;0.142857;0.142857" count="7">
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/can/128/LKAS_ALT/ADAS_ACIAnglTqRedcGainVal" color="#1f77b4"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-128.740000" left="301.990881" top="103.940000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/can/128/LKAS_ALT/ADAS_StrAnglReqVal" color="#29d627"/>
|
|
<curve name="/can/192/LKAS_ALT/ADAS_StrAnglReqVal" color="#b41f32"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carState/steeringPressed" color="#d62728"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="0.975000" left="301.990881" top="2.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/sendcan/0/LKAS_ALT/LKAS_ANGLE_ACTIVE" color="#1f77b4"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carState/steerFaultTemporary" color="#d62728"/>
|
|
<curve name="/carControl/latActive" color="#1ac938"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/can/1/CCNC_0x161/DAW_ICON" color="#f14cc1"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-14.375000" left="301.990881" top="589.375000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/pandaStates/0/safetyTxBlocked" color="#1f77b4"/>
|
|
</plot>
|
|
</DockArea>
|
|
</DockSplitter>
|
|
</Container>
|
|
</Tab>
|
|
<Tab containers="1" tab_name="Understanding Torque">
|
|
<Container>
|
|
<DockSplitter orientation="-" sizes="0.5;0.5" count="2">
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-6.175000" left="429.901019" top="253.175000" right="590.696728"/>
|
|
<limitY/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-24.190000" left="301.990881" top="21.590000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/carState/steeringTorqueEps" color="#1ac938"/>
|
|
</plot>
|
|
</DockArea>
|
|
</DockSplitter>
|
|
</Container>
|
|
</Tab>
|
|
<Tab containers="1" tab_name="tab2">
|
|
<Container>
|
|
<DockSplitter orientation="-" sizes="0.25;0.25;0.25;0.25" count="4">
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Dots">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/sendcan/0/LKAS_ALT/ADAS_ACIAnglTqRedcGainVal" color="#9467bd"/>
|
|
<curve name="/can/1/LFA_ALT/ADAS_ACIAnglTqRedcGainVal" color="#17becf"/>
|
|
<curve name="/can/128/LKAS_ALT/ADAS_ACIAnglTqRedcGainVal" color="#1f77b4"/>
|
|
<curve name="/can/192/LKAS_ALT/ADAS_ACIAnglTqRedcGainVal" color="#d62728"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Dots">
|
|
<range bottom="0.975000" left="301.990881" top="2.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/can/128/LKAS_ALT/LKAS_ANGLE_ACTIVE" color="#b8c91a"/>
|
|
<curve name="/can/192/LKAS_ALT/LKAS_ANGLE_ACTIVE" color="#ff7f0e"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Lines">
|
|
<range bottom="-0.025000" left="301.990881" top="1.025000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/can/1/CCNC_0x161/DAW_ICON" color="#f14cc1"/>
|
|
<curve name="/carState/steerFaultTemporary" color="#1f77b4"/>
|
|
</plot>
|
|
</DockArea>
|
|
<DockArea name="...">
|
|
<plot mode="TimeSeries" flip_x="false" flip_y="false" style="Dots">
|
|
<range bottom="-14.375000" left="301.990881" top="589.375000" right="462.962504"/>
|
|
<limitY/>
|
|
<curve name="/pandaStates/0/safetyTxBlocked" color="#bcbd22"/>
|
|
</plot>
|
|
</DockArea>
|
|
</DockSplitter>
|
|
</Container>
|
|
</Tab>
|
|
<currentTabIndex index="3"/>
|
|
</tabbed_widget>
|
|
<use_relative_time_offset enabled="1"/>
|
|
<!-- - - - - - - - - - - - - - - -->
|
|
<!-- - - - - - - - - - - - - - - -->
|
|
<Plugins>
|
|
<plugin ID="DataLoad CSV">
|
|
<default time_axis="" delimiter="0"/>
|
|
</plugin>
|
|
<plugin ID="DataLoad MCAP"/>
|
|
<plugin ID="DataLoad Rlog"/>
|
|
<plugin ID="DataLoad ULog"/>
|
|
<plugin ID="Cereal Subscriber"/>
|
|
<plugin ID="UDP Server"/>
|
|
<plugin ID="WebSocket Server"/>
|
|
<plugin ID="ZMQ Subscriber"/>
|
|
<plugin ID="Fast Fourier Transform"/>
|
|
<plugin ID="Quaternion to RPY"/>
|
|
<plugin ID="Reactive Script Editor">
|
|
<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++ indeces, not Lua indeces
 for index=0, series:size()-1 do
 x,y = series:at(index)
 series:set(index, x + delta_x, y + delta_y)
 end
end
"/>
|
|
<scripts/>
|
|
</plugin>
|
|
<plugin ID="CSV Exporter"/>
|
|
</Plugins>
|
|
<!-- - - - - - - - - - - - - - - -->
|
|
<!-- - - - - - - - - - - - - - - -->
|
|
<customMathEquations/>
|
|
<snippets/>
|
|
<!-- - - - - - - - - - - - - - - -->
|
|
</root>
|
|
|