rm_vision/buff_layout.xml
2025-12-15 02:33:20 +08:00

178 lines
9.0 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<root>
<tabbed_widget name="Main Window" parent="main_window">
<Tab containers="1" tab_name="tab1">
<Container>
<DockSplitter orientation="-" count="2" sizes="0.5;0.5">
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="155.851536" bottom="144.739548" left="0.000000"/>
<limitY/>
<curve name="/gimbal_yaw" color="#1f77b4"/>
<curve name="/cmd_yaw" color="#d62728"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="18.307670" bottom="-18.813059" left="0.000000"/>
<limitY/>
<curve name="/gimbal_pitch" color="#1ac938"/>
<curve name="/cmd_pitch" color="#ff7f0e"/>
</plot>
</DockArea>
</DockSplitter>
</Container>
</Tab>
<Tab containers="1" tab_name="tab2">
<Container>
<DockSplitter orientation="-" count="4" sizes="0.25072;0.24928;0.25072;0.24928">
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="2.667341" bottom="2.652464" left="0.000000"/>
<limitY/>
<curve name="/buff_R_yaw" color="#f14cc1"/>
<curve name="/R_yaw" color="#1f77b4"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="0.063579" bottom="-0.021388" left="0.000000"/>
<limitY/>
<curve name="/R_V_yaw" color="#d62728"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="0.155296" bottom="0.139135" left="0.000000"/>
<limitY/>
<curve name="/buff_R_pitch" color="#9467bd"/>
<curve name="/R_pitch" color="#1f77b4"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="9.257444" bottom="7.987190" left="0.000000"/>
<limitY/>
<curve name="/buff_R_dis" color="#17becf"/>
<curve name="/R_dis" color="#bcbd22"/>
</plot>
</DockArea>
</DockSplitter>
</Container>
</Tab>
<Tab containers="1" tab_name="tab3">
<Container>
<DockSplitter orientation="-" count="3" sizes="0.333813;0.332374;0.333813">
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="172.996997" bottom="116.017715" left="0.000000"/>
<limitY/>
<curve name="/buff_yaw" color="#ff7f0e"/>
<curve name="/yaw" color="#9467bd"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="17.228124" bottom="-36.584246" left="0.000000"/>
<limitY/>
<curve name="/buff_pitch" color="#d62728"/>
<curve name="/pitch" color="#f14cc1"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="135.724246" bottom="-160.304721" left="0.000000"/>
<limitY/>
<curve name="/buff_roll" color="#1ac938"/>
<curve name="/angle" color="#17becf"/>
</plot>
</DockArea>
</DockSplitter>
</Container>
</Tab>
<Tab containers="1" tab_name="tab4">
<Container>
<DockSplitter orientation="-" count="2" sizes="0.5;0.5">
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="3.467481" bottom="-1.709189" left="0.000000"/>
<limitY/>
<curve name="/spd" color="#bcbd22"/>
<curve name="/fi" color="#1ac938"/>
<curve name="/spd0" color="#1f77b4"/>
</plot>
</DockArea>
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="0.000000" top="0.100000" bottom="-0.100000" left="0.000000"/>
<limitY/>
<curve name="/iou" color="#1f77b4"/>
</plot>
</DockArea>
</DockSplitter>
</Container>
</Tab>
<Tab containers="1" tab_name="tab2">
<Container>
<DockSplitter orientation="-" count="1" sizes="1">
<DockArea name="...">
<plot mode="TimeSeries" flip_y="false" style="Lines" flip_x="false">
<range right="30.649625" top="2.270898" bottom="0.803537" left="0.000000"/>
<limitY/>
<curve name="/a" color="#1f77b4"/>
<curve name="/w" color="#d62728"/>
</plot>
</DockArea>
</DockSplitter>
</Container>
</Tab>
<currentTabIndex index="3"/>
</tabbed_widget>
<use_relative_time_offset enabled="1"/>
<!-- - - - - - - - - - - - - - - -->
<!-- - - - - - - - - - - - - - - -->
<Plugins>
<plugin ID="DataLoad CSV">
<parameters time_axis="" delimiter="0"/>
</plugin>
<plugin ID="DataLoad MCAP"/>
<plugin ID="DataLoad ROS2 bags">
<use_header_stamp value="false"/>
<discard_large_arrays value="true"/>
<max_array_size value="100"/>
<boolean_strings_to_number value="true"/>
<remove_suffix_from_strings value="true"/>
<selected_topics value=""/>
</plugin>
<plugin ID="DataLoad ULog"/>
<plugin ID="MQTT Subscriber (Mosquitto)"/>
<plugin ID="ROS2 Topic Subscriber">
<use_header_stamp value="false"/>
<discard_large_arrays value="true"/>
<max_array_size value="100"/>
<boolean_strings_to_number value="true"/>
<remove_suffix_from_strings value="true"/>
<selected_topics value=""/>
</plugin>
<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&#xa;&#xa; new_series: a series previously created with ScatterXY.new(name)&#xa; prefix: prefix of the timeseries, before the index of the array&#xa; suffix_X: suffix to complete the name of the series containing the X value. If [nil], use the index of the array.&#xa; suffix_Y: suffix to complete the name of the series containing the Y value&#xa; timestamp: usually the tracker_time variable&#xa; &#xa; Example:&#xa; &#xa; Assuming we have multiple series in the form:&#xa; &#xa; /trajectory/node.{X}/position/x&#xa; /trajectory/node.{X}/position/y&#xa; &#xa; where {N} is the index of the array (integer). We can create a reactive series from the array with:&#xa; &#xa; new_series = ScatterXY.new(&quot;my_trajectory&quot;) &#xa; CreateSeriesFromArray( new_series, &quot;/trajectory/node&quot;, &quot;position/x&quot;, &quot;position/y&quot;, tracker_time );&#xa;--]]&#xa;&#xa;function CreateSeriesFromArray( new_series, prefix, suffix_X, suffix_Y, timestamp )&#xa; &#xa; --- clear previous values&#xa; new_series:clear()&#xa; &#xa; --- Append points to new_series&#xa; index = 0&#xa; while(true) do&#xa;&#xa; x = index;&#xa; -- if not nil, get the X coordinate from a series&#xa; if suffix_X ~= nil then &#xa; series_x = TimeseriesView.find( string.format( &quot;%s.%d/%s&quot;, prefix, index, suffix_X) )&#xa; if series_x == nil then break end&#xa; x = series_x:atTime(timestamp)&#x9; &#xa; end&#xa; &#xa; series_y = TimeseriesView.find( string.format( &quot;%s.%d/%s&quot;, prefix, index, suffix_Y) )&#xa; if series_y == nil then break end &#xa; y = series_y:atTime(timestamp)&#xa; &#xa; new_series:push_back(x,y)&#xa; index = index+1&#xa; end&#xa;end&#xa;&#xa;--[[ Similar to the built-in function GetSeriesNames(), but select only the names with a give prefix. --]]&#xa;&#xa;function GetSeriesNamesByPrefix(prefix)&#xa; -- GetSeriesNames(9 is a built-in function&#xa; all_names = GetSeriesNames()&#xa; filtered_names = {}&#xa; for i, name in ipairs(all_names) do&#xa; -- check the prefix&#xa; if name:find(prefix, 1, #prefix) then&#xa; table.insert(filtered_names, name);&#xa; end&#xa; end&#xa; return filtered_names&#xa;end&#xa;&#xa;--[[ Modify an existing series, applying offsets to all their X and Y values&#xa;&#xa; series: an existing timeseries, obtained with TimeseriesView.find(name)&#xa; delta_x: offset to apply to each x value&#xa; delta_y: offset to apply to each y value &#xa; &#xa;--]]&#xa;&#xa;function ApplyOffsetInPlace(series, delta_x, delta_y)&#xa; -- use C++ indeces, not Lua indeces&#xa; for index=0, series:size()-1 do&#xa; x,y = series:at(index)&#xa; series:set(index, x + delta_x, y + delta_y)&#xa; end&#xa;end&#xa;"/>
<scripts/>
</plugin>
<plugin ID="CSV Exporter"/>
<plugin ID="ROS2 Topic Re-Publisher"/>
</Plugins>
<!-- - - - - - - - - - - - - - - -->
<previouslyLoaded_Datafiles/>
<previouslyLoaded_Streamer name="UDP Server"/>
<!-- - - - - - - - - - - - - - - -->
<customMathEquations/>
<snippets/>
<!-- - - - - - - - - - - - - - - -->
</root>