wip: start of eye catcher plot
This commit is contained in:
parent
50d5dac71c
commit
ea5754c336
3 changed files with 364 additions and 0 deletions
BIN
eye_catcher_plot.png
Normal file
BIN
eye_catcher_plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 539 KiB |
251
eye_catcher_plot.py
Normal file
251
eye_catcher_plot.py
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import seaborn as sns
|
||||||
|
import os
|
||||||
|
import glob
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
def parse_arguments():
|
||||||
|
parser = argparse.ArgumentParser(description='Cross-experiment analysis of chain performance.')
|
||||||
|
parser.add_argument('--experiments-dir', '-e', required=True,
|
||||||
|
help='Path to directory containing experiment subdirectories')
|
||||||
|
parser.add_argument('--supplementary', '-s', required=True,
|
||||||
|
help='Path to supplementary.csv file with input delays')
|
||||||
|
parser.add_argument('--output', '-o', default='cross_experiment_analysis.png',
|
||||||
|
help='Output filename for the plot')
|
||||||
|
parser.add_argument('--experiment-duration', '-d', type=int, default=20,
|
||||||
|
help='Duration of each experiment in seconds (default: 20)')
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
def load_supplementary_data(supplementary_path):
|
||||||
|
"""Load the supplementary data with input delays for each chain."""
|
||||||
|
supp_df = pd.read_csv(supplementary_path)
|
||||||
|
# Create a dictionary for quick lookup
|
||||||
|
delay_dict = dict(zip(supp_df['chain'], supp_df['input_delay']))
|
||||||
|
return delay_dict
|
||||||
|
|
||||||
|
def calculate_theoretical_max_runs(chain, input_delay_ms, experiment_duration_s):
|
||||||
|
"""Calculate the theoretical maximum number of runs for a chain."""
|
||||||
|
runs_per_second = 1000 / input_delay_ms # Convert ms to runs per second
|
||||||
|
max_runs = runs_per_second * experiment_duration_s
|
||||||
|
return int(max_runs)
|
||||||
|
|
||||||
|
def load_experiment_data(experiments_dir, delay_dict, experiment_duration):
|
||||||
|
"""Load all experiment data and calculate performance metrics."""
|
||||||
|
all_data = []
|
||||||
|
|
||||||
|
# Find all subdirectories containing results.csv
|
||||||
|
experiment_dirs = [d for d in Path(experiments_dir).iterdir()
|
||||||
|
if d.is_dir() and (d / 'results.csv').exists()]
|
||||||
|
|
||||||
|
print(f"Found {len(experiment_dirs)} experiment directories")
|
||||||
|
|
||||||
|
for exp_dir in experiment_dirs:
|
||||||
|
results_path = exp_dir / 'results.csv'
|
||||||
|
|
||||||
|
try:
|
||||||
|
df = pd.read_csv(results_path)
|
||||||
|
|
||||||
|
# Extract experiment name (remove timestamp if present)
|
||||||
|
if 'experiment_name' in df.columns:
|
||||||
|
exp_name = df['experiment_name'].iloc[0]
|
||||||
|
exp_name = exp_name.split('-')[0] if '-' in exp_name else exp_name
|
||||||
|
else:
|
||||||
|
exp_name = exp_dir.name
|
||||||
|
|
||||||
|
# Group by chain and calculate metrics
|
||||||
|
for chain, chain_data in df.groupby('chain'):
|
||||||
|
if chain in delay_dict:
|
||||||
|
# Calculate theoretical maximum runs
|
||||||
|
input_delay = delay_dict[chain]
|
||||||
|
theoretical_max = calculate_theoretical_max_runs(
|
||||||
|
chain, input_delay, experiment_duration
|
||||||
|
)
|
||||||
|
|
||||||
|
# Calculate actual performance metrics
|
||||||
|
actual_runs = chain_data['count'].mean()
|
||||||
|
mean_latency = chain_data['mean'].mean()
|
||||||
|
std_latency = chain_data['std'].mean()
|
||||||
|
|
||||||
|
# Calculate percentage of theoretical maximum
|
||||||
|
completion_percentage = (actual_runs / theoretical_max) * 100
|
||||||
|
|
||||||
|
if completion_percentage > 100:
|
||||||
|
print(f"Warning: Completion percentage for {chain} in {exp_name} exceeds 100%: {completion_percentage:.2f}%")
|
||||||
|
# Cap at 105% for visualization purposes
|
||||||
|
# This is to avoid visual clutter in the plot
|
||||||
|
# and to handle cases where the actual runs exceed theoretical max.
|
||||||
|
# This is a safeguard and should be adjusted based on actual data characteristics.
|
||||||
|
# In practice, this might indicate an issue with the data or the calculation.
|
||||||
|
completion_percentage = 105
|
||||||
|
|
||||||
|
all_data.append({
|
||||||
|
'experiment_type': exp_name,
|
||||||
|
'experiment_dir': exp_dir.name,
|
||||||
|
'chain': chain,
|
||||||
|
'mean_latency_ms': mean_latency,
|
||||||
|
'std_latency_ms': std_latency,
|
||||||
|
'actual_runs': actual_runs,
|
||||||
|
'theoretical_max_runs': theoretical_max,
|
||||||
|
'completion_percentage': completion_percentage,
|
||||||
|
'input_delay_ms': input_delay
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
print(f"Warning: Chain '{chain}' not found in supplementary data")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error processing {results_path}: {e}")
|
||||||
|
|
||||||
|
return pd.DataFrame(all_data)
|
||||||
|
|
||||||
|
def create_visualization(data_df, output_path):
|
||||||
|
"""Create the main visualization plot."""
|
||||||
|
plt.style.use('seaborn-v0_8-darkgrid')
|
||||||
|
|
||||||
|
# Set up the figure
|
||||||
|
fig, ax = plt.subplots(figsize=(20, 12))
|
||||||
|
|
||||||
|
# Get unique experiment types and chains for color/marker assignment
|
||||||
|
experiment_types = data_df['experiment_type'].unique()
|
||||||
|
chains = data_df['chain'].unique()
|
||||||
|
|
||||||
|
# Create color palette for experiment types
|
||||||
|
exp_colors = sns.color_palette("husl", len(experiment_types))
|
||||||
|
exp_color_map = dict(zip(experiment_types, exp_colors))
|
||||||
|
|
||||||
|
# Create marker styles for chains (cycle through available markers)
|
||||||
|
markers = ['o', 's', '^', 'D', 'v', '<', '>', 'p', '*', 'h', 'H', '+', 'x']
|
||||||
|
chain_markers = dict(zip(chains, markers[:len(chains)]))
|
||||||
|
|
||||||
|
# Plot data points
|
||||||
|
for _, row in data_df.iterrows():
|
||||||
|
ax.scatter(
|
||||||
|
row['completion_percentage'],
|
||||||
|
row['mean_latency_ms'],
|
||||||
|
color=exp_color_map[row['experiment_type']],
|
||||||
|
marker=chain_markers[row['chain']],
|
||||||
|
s=100,
|
||||||
|
alpha=0.7,
|
||||||
|
edgecolors='black',
|
||||||
|
linewidth=0.5
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set labels and title
|
||||||
|
ax.set_xlabel('Completion Rate (% of Theoretical Maximum)', fontsize=14, fontweight='bold')
|
||||||
|
ax.set_ylabel('Mean End-to-End Latency (ms)', fontsize=14, fontweight='bold')
|
||||||
|
ax.set_title('Cross-Experiment Performance Analysis\nMean Latency vs Chain Completion Rate',
|
||||||
|
fontsize=16, fontweight='bold', pad=20)
|
||||||
|
|
||||||
|
# Add grid for better readability
|
||||||
|
ax.grid(True, alpha=0.3)
|
||||||
|
|
||||||
|
# Create legends with better positioning
|
||||||
|
# Legend for experiment types (colors)
|
||||||
|
exp_legend_elements = [plt.Line2D([0], [0], marker='o', color='w',
|
||||||
|
markerfacecolor=color, markersize=10,
|
||||||
|
label=exp_type, markeredgecolor='black', markeredgewidth=1)
|
||||||
|
for exp_type, color in exp_color_map.items()]
|
||||||
|
|
||||||
|
# Legend for chains (markers) - limit to avoid overcrowding
|
||||||
|
max_chains_in_legend = min(len(chains), 11) # Show max 11 chains
|
||||||
|
chain_legend_elements = [plt.Line2D([0], [0], marker=marker, color='w',
|
||||||
|
markerfacecolor='gray', markersize=10,
|
||||||
|
label=chain.split(' --> ')[-1], markeredgecolor='black', markeredgewidth=1)
|
||||||
|
for chain, marker in list(chain_markers.items())[:max_chains_in_legend]]
|
||||||
|
|
||||||
|
# Position legends inside the plot area
|
||||||
|
legend1 = ax.legend(handles=exp_legend_elements, title='Experiment Type',
|
||||||
|
loc='upper right', fontsize=10, title_fontsize=12,
|
||||||
|
framealpha=0.9, fancybox=True, shadow=True)
|
||||||
|
|
||||||
|
# Temporarily remove first legend to add second one
|
||||||
|
legend1.remove()
|
||||||
|
|
||||||
|
legend2 = ax.legend(handles=chain_legend_elements, title='Chain Output',
|
||||||
|
loc='lower right', fontsize=9, title_fontsize=11,
|
||||||
|
framealpha=0.9, fancybox=True, shadow=True)
|
||||||
|
|
||||||
|
# Add both legends back
|
||||||
|
ax.add_artist(legend1)
|
||||||
|
ax.add_artist(legend2)
|
||||||
|
|
||||||
|
# Save the plot
|
||||||
|
plt.savefig(output_path, dpi=300, bbox_inches='tight')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
return fig
|
||||||
|
|
||||||
|
def print_summary_statistics(data_df):
|
||||||
|
"""Print summary statistics for the analysis."""
|
||||||
|
print("\n" + "="*80)
|
||||||
|
print("CROSS-EXPERIMENT ANALYSIS SUMMARY")
|
||||||
|
print("="*80)
|
||||||
|
|
||||||
|
print(f"\nTotal experiments analyzed: {data_df['experiment_type'].nunique()}")
|
||||||
|
print(f"Total chains analyzed: {data_df['chain'].nunique()}")
|
||||||
|
print(f"Total data points: {len(data_df)}")
|
||||||
|
|
||||||
|
print("\nPer Experiment Type Summary:")
|
||||||
|
exp_summary = data_df.groupby('experiment_type').agg({
|
||||||
|
'completion_percentage': ['mean', 'std', 'min', 'max'],
|
||||||
|
'mean_latency_ms': ['mean', 'std', 'min', 'max'],
|
||||||
|
'chain': 'count'
|
||||||
|
}).round(2)
|
||||||
|
print(exp_summary)
|
||||||
|
|
||||||
|
print("\nPer Chain Summary:")
|
||||||
|
chain_summary = data_df.groupby('chain').agg({
|
||||||
|
'completion_percentage': ['mean', 'std'],
|
||||||
|
'mean_latency_ms': ['mean', 'std'],
|
||||||
|
'experiment_type': 'count'
|
||||||
|
}).round(2)
|
||||||
|
print(chain_summary)
|
||||||
|
|
||||||
|
# Find best and worst performing combinations
|
||||||
|
print("\nBest Performance (highest completion rate):")
|
||||||
|
best_completion = data_df.loc[data_df['completion_percentage'].idxmax()]
|
||||||
|
print(f" {best_completion['experiment_type']} - {best_completion['chain']}")
|
||||||
|
print(f" Completion: {best_completion['completion_percentage']:.1f}%, Latency: {best_completion['mean_latency_ms']:.1f}ms")
|
||||||
|
|
||||||
|
print("\nWorst Performance (lowest completion rate):")
|
||||||
|
worst_completion = data_df.loc[data_df['completion_percentage'].idxmin()]
|
||||||
|
print(f" {worst_completion['experiment_type']} - {worst_completion['chain']}")
|
||||||
|
print(f" Completion: {worst_completion['completion_percentage']:.1f}%, Latency: {worst_completion['mean_latency_ms']:.1f}ms")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_arguments()
|
||||||
|
|
||||||
|
print("Starting cross-experiment analysis...")
|
||||||
|
|
||||||
|
# Load supplementary data
|
||||||
|
print(f"Loading supplementary data from: {args.supplementary}")
|
||||||
|
delay_dict = load_supplementary_data(args.supplementary)
|
||||||
|
print(f"Found delay information for {len(delay_dict)} chains")
|
||||||
|
|
||||||
|
# Load all experiment data
|
||||||
|
print(f"Loading experiment data from: {args.experiments_dir}")
|
||||||
|
data_df = load_experiment_data(args.experiments_dir, delay_dict, args.experiment_duration)
|
||||||
|
|
||||||
|
if data_df.empty:
|
||||||
|
print("No data found! Please check your paths and file formats.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"Loaded data for {len(data_df)} experiment-chain combinations")
|
||||||
|
|
||||||
|
# Create visualization
|
||||||
|
print(f"Creating visualization...")
|
||||||
|
create_visualization(data_df, args.output)
|
||||||
|
|
||||||
|
# Print summary statistics
|
||||||
|
print_summary_statistics(data_df)
|
||||||
|
|
||||||
|
# Save detailed data to CSV for further analysis
|
||||||
|
csv_output = args.output.replace('.png', '_detailed_data.csv')
|
||||||
|
data_df.to_csv(csv_output, index=False)
|
||||||
|
print(f"\nDetailed data saved to: {csv_output}")
|
||||||
|
print(f"Visualization saved to: {args.output}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
113
eye_catcher_plot_detailed_data.csv
Normal file
113
eye_catcher_plot_detailed_data.csv
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
experiment_type,experiment_dir,chain,mean_latency_ms,std_latency_ms,actual_runs,theoretical_max_runs,completion_percentage,input_delay_ms
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/baroA/alt --> /output/flight/cmd,35.42897435897436,6.192051282051281,4.102564102564102,200,2.051282051282051,100
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/cameraA/raw --> /output/cameraA/mapped,74.52780000000001,6.6764,26.0,100,26.0,200
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/cameraB/raw --> /output/classifier/classification,98.844,31.873800000000003,32.7,133,24.586466165413537,150
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/gpsA/fix --> /output/flight/cmd,30.827368421052633,5.925526315789473,4.105263157894737,200,2.0526315789473686,100
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/imuA/data --> /output/flight/cmd,33.086052631578944,6.046052631578946,4.105263157894737,200,2.0526315789473686,100
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/lidar/scan --> /output/flight/cmd,23.061794871794874,5.396410256410257,4.102564102564102,200,2.051282051282051,100
|
||||||
|
edf_single_timed_20_boosted_10,edf_single_timed_20_boosted_10,/input/operator/commands --> /output/flight/cmd,29.039743589743587,5.063333333333334,4.102564102564102,200,2.051282051282051,100
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/baroA/alt --> /output/flight/cmd,35.124418604651154,6.056976744186046,3.8372093023255816,200,1.9186046511627908,100
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/cameraA/raw --> /output/cameraA/mapped,74.8638,6.913800000000001,25.96,100,25.96,200
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/cameraB/raw --> /output/classifier/classification,99.209,32.5044,32.6,133,24.51127819548872,150
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/gpsA/fix --> /output/flight/cmd,30.65209302325581,5.489767441860465,3.8372093023255816,200,1.9186046511627908,100
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/imuA/data --> /output/flight/cmd,32.79976744186047,5.736976744186046,3.8372093023255816,200,1.9186046511627908,100
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/lidar/scan --> /output/flight/cmd,23.58,4.84953488372093,3.8372093023255816,200,1.9186046511627908,100
|
||||||
|
edf_single_timed_20,edf_single_timed_20,/input/operator/commands --> /output/flight/cmd,27.936046511627907,4.471627906976744,3.8372093023255816,200,1.9186046511627908,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/baroA/alt --> /output/flight/cmd,77.7224,38.486999999999995,1073.12,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/baroB/alt --> /output/telemetry/radio,67.8986,38.959799999999994,3197.82,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/cameraA/raw --> /output/cameraA/mapped,76.226,8.531600000000001,96.86,100,96.86,200
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/cameraA/raw --> /output/telemetry/radio,183.4386,68.3676,3184.16,100,105.0,200
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/cameraB/raw --> /output/classifier/classification,81.2846,9.4038,128.34,133,96.49624060150376,150
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/gpsA/fix --> /output/flight/cmd,77.76100000000001,37.5182,1073.06,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/gpsB/fix --> /output/telemetry/radio,67.8846,36.48500000000001,3200.64,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/imuA/data --> /output/flight/cmd,77.796,38.1552,1073.18,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/imuB/data --> /output/telemetry/radio,67.9932,37.3536,3199.1,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/lidar/scan --> /output/flight/cmd,68.4622,37.3688,1073.76,200,105.0,100
|
||||||
|
ros_multi_timed_20,ros_multi_timed_20,/input/operator/commands --> /output/flight/cmd,68.36500000000001,35.9894,1073.48,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/baroA/alt --> /output/flight/cmd,59.1838775510204,29.148571428571433,769.0204081632653,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/baroB/alt --> /output/telemetry/radio,35.7862,16.4298,174.42,200,87.21,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/cameraA/raw --> /output/cameraA/mapped,74.4708,6.9518,98.46,100,98.46,200
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/cameraA/raw --> /output/telemetry/radio,161.5576,33.4002,174.2,100,105.0,200
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/cameraB/raw --> /output/classifier/classification,80.88102040816325,9.17,130.55102040816325,133,98.158661961025,150
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/gpsA/fix --> /output/flight/cmd,63.50000000000001,31.609387755102045,769.0,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/gpsB/fix --> /output/telemetry/radio,31.027199999999997,17.3174,174.42,200,87.21,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/imuA/data --> /output/flight/cmd,59.050399999999996,28.727199999999996,753.64,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/imuB/data --> /output/telemetry/radio,33.2768,18.6738,174.42,200,87.21,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/lidar/scan --> /output/flight/cmd,53.76862745098039,29.196470588235297,753.8627450980392,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_500,edf_multi_timed_20_boosted_500,/input/operator/commands --> /output/flight/cmd,58.61078431372549,29.589607843137255,753.8823529411765,200,105.0,100
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/baroA/alt --> /output/flight/cmd,35.738139534883715,5.748372093023256,4.0,200,2.0,100
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/cameraA/raw --> /output/cameraA/mapped,74.54119999999999,6.5826,26.0,100,26.0,200
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/cameraB/raw --> /output/classifier/classification,99.0342,32.3718,32.74,133,24.61654135338346,150
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/gpsA/fix --> /output/flight/cmd,30.709534883720924,5.705581395348838,4.0,200,2.0,100
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/imuA/data --> /output/flight/cmd,33.36255813953488,5.513488372093024,4.0,200,2.0,100
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/lidar/scan --> /output/flight/cmd,23.437441860465114,4.923255813953489,4.0,200,2.0,100
|
||||||
|
edf_single_timed_20_boosted_50,edf_single_timed_20_boosted_50,/input/operator/commands --> /output/flight/cmd,28.58860465116279,3.7818604651162793,4.0,200,2.0,100
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/baroA/alt --> /output/flight/cmd,35.773250000000004,5.296,3.9,200,1.95,100
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/cameraA/raw --> /output/cameraA/mapped,74.5806,6.636,26.0,100,26.0,200
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/cameraB/raw --> /output/classifier/classification,99.0724,32.465999999999994,32.84,133,24.691729323308273,150
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/gpsA/fix --> /output/flight/cmd,30.87375,5.2219999999999995,3.9,200,1.95,100
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/imuA/data --> /output/flight/cmd,33.338,5.1255,3.9,200,1.95,100
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/lidar/scan --> /output/flight/cmd,23.27475,4.28075,3.9,200,1.95,100
|
||||||
|
edf_single_timed_20_boosted_500,edf_single_timed_20_boosted_500,/input/operator/commands --> /output/flight/cmd,29.66375,4.34175,3.9,200,1.95,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/baroA/alt --> /output/flight/cmd,59.2382,28.2522,774.5,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/baroB/alt --> /output/telemetry/radio,34.864599999999996,14.1428,171.72,200,85.86,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/cameraA/raw --> /output/cameraA/mapped,74.5012,6.878599999999999,98.72,100,98.72,200
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/cameraA/raw --> /output/telemetry/radio,159.89939999999996,31.602999999999998,171.68,100,105.0,200
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/cameraB/raw --> /output/classifier/classification,80.8814,8.9892,130.94,133,98.45112781954887,150
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/gpsA/fix --> /output/flight/cmd,63.6704,30.875800000000005,774.5,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/gpsB/fix --> /output/telemetry/radio,30.210000000000004,15.1086,171.72,200,85.86,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/imuA/data --> /output/flight/cmd,59.562,28.5752,774.5,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/imuB/data --> /output/telemetry/radio,32.63,16.3702,171.72,200,85.86,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/lidar/scan --> /output/flight/cmd,54.1478,28.7682,774.5,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_10,edf_multi_timed_20_boosted_10,/input/operator/commands --> /output/flight/cmd,58.743599999999994,29.187400000000004,774.5,200,105.0,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/baroA/alt --> /output/flight/cmd,483.0948,63.2838,118.36,200,59.18,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/baroB/alt --> /output/telemetry/radio,467.39779999999996,59.0954,117.08,200,58.540000000000006,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/cameraA/raw --> /output/cameraA/mapped,385.3639999999999,237.4138,94.42,100,94.42,200
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/cameraA/raw --> /output/telemetry/radio,844.8803999999999,321.32239999999996,115.9,100,105.0,200
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/cameraB/raw --> /output/classifier/classification,169.2946,66.2818,112.24,133,84.39097744360902,150
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/gpsA/fix --> /output/flight/cmd,486.62440000000004,64.31439999999999,118.48,200,59.24,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/gpsB/fix --> /output/telemetry/radio,470.49940000000004,61.70079999999999,117.46,200,58.72999999999999,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/imuA/data --> /output/flight/cmd,484.7596,63.57379999999999,118.38,200,59.19,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/imuB/data --> /output/telemetry/radio,468.7872,60.461400000000005,117.16,200,58.58,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/lidar/scan --> /output/flight/cmd,311.30480000000006,43.138400000000004,119.2,200,59.599999999999994,100
|
||||||
|
ros_single_timed_20,ros_single_timed_20,/input/operator/commands --> /output/flight/cmd,309.44019999999995,42.80259999999999,119.06,200,59.53000000000001,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/baroA/alt --> /output/flight/cmd,59.171400000000006,28.876400000000004,769.32,200,105.0,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/baroB/alt --> /output/telemetry/radio,35.613,14.744599999999998,173.64,200,86.82,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/cameraA/raw --> /output/cameraA/mapped,74.48700000000001,7.1496,98.68,100,98.68,200
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/cameraA/raw --> /output/telemetry/radio,161.5632,31.481800000000003,173.54,100,105.0,200
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/cameraB/raw --> /output/classifier/classification,80.9862,9.209,130.7,133,98.27067669172932,150
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/gpsA/fix --> /output/flight/cmd,64.0672,32.28,769.32,200,105.0,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/gpsB/fix --> /output/telemetry/radio,30.8428,15.6802,173.64,200,86.82,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/imuA/data --> /output/flight/cmd,60.100199999999994,29.397199999999994,769.32,200,105.0,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/imuB/data --> /output/telemetry/radio,32.967600000000004,16.905,173.64,200,86.82,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/lidar/scan --> /output/flight/cmd,53.48519999999999,28.731399999999997,769.28,200,105.0,100
|
||||||
|
edf_multi_timed_20,edf_multi_timed_20,/input/operator/commands --> /output/flight/cmd,58.02719999999999,29.204199999999997,769.32,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/baroA/alt --> /output/flight/cmd,59.22893617021277,28.212553191489366,771.1702127659574,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/baroB/alt --> /output/telemetry/radio,34.84583333333333,15.932291666666666,174.875,200,87.4375,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/cameraA/raw --> /output/cameraA/mapped,74.66879999999999,8.4206,98.52,100,98.52,200
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/cameraA/raw --> /output/telemetry/radio,160.73208333333335,32.815000000000005,174.85416666666666,100,105.0,200
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/cameraB/raw --> /output/classifier/classification,81.05958333333332,10.574375,130.64583333333334,133,98.22994987468672,150
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/gpsA/fix --> /output/flight/cmd,62.287659574468094,30.74404255319149,771.1702127659574,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/gpsB/fix --> /output/telemetry/radio,30.258750000000003,16.552916666666665,174.875,200,87.4375,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/imuA/data --> /output/flight/cmd,58.75000000000001,28.383829787234042,771.1702127659574,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/imuB/data --> /output/telemetry/radio,32.87978723404255,17.99340425531915,175.2340425531915,200,87.61702127659575,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/lidar/scan --> /output/flight/cmd,53.87255319148936,29.093617021276597,771.1702127659574,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_50,edf_multi_timed_20_boosted_50,/input/operator/commands --> /output/flight/cmd,58.9159574468085,29.80680851063829,771.1702127659574,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/baroA/alt --> /output/flight/cmd,59.09428571428571,28.03642857142857,771.4285714285714,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/baroB/alt --> /output/telemetry/radio,34.47714285714286,13.967142857142857,167.28571428571428,200,83.64285714285714,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/cameraA/raw --> /output/cameraA/mapped,74.82000000000001,8.075714285714286,98.71428571428571,100,98.71428571428571,200
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/cameraA/raw --> /output/telemetry/radio,159.91142857142856,31.444999999999997,167.0,100,105.0,200
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/cameraB/raw --> /output/classifier/classification,81.09785714285715,9.535,130.92857142857142,133,98.44253490870031,150
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/gpsA/fix --> /output/flight/cmd,63.925000000000004,30.982857142857142,771.4285714285714,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/gpsB/fix --> /output/telemetry/radio,30.61857142857142,15.20142857142857,167.28571428571428,200,83.64285714285714,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/imuA/data --> /output/flight/cmd,59.98,28.602857142857147,771.4285714285714,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/imuB/data --> /output/telemetry/radio,32.915000000000006,16.017857142857142,167.28571428571428,200,83.64285714285714,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/lidar/scan --> /output/flight/cmd,53.777142857142856,28.602142857142848,771.4285714285714,200,105.0,100
|
||||||
|
edf_multi_timed_20_boosted_100,edf_multi_timed_20_boosted_100,/input/operator/commands --> /output/flight/cmd,58.76928571428572,29.2,771.4285714285714,200,105.0,100
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/baroA/alt --> /output/flight/cmd,35.05540540540541,5.996756756756756,4.378378378378378,200,2.189189189189189,100
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/cameraA/raw --> /output/cameraA/mapped,74.62279999999998,6.7632,25.98,100,25.980000000000004,200
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/cameraB/raw --> /output/classifier/classification,99.44580000000002,32.4518,32.7,133,24.586466165413537,150
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/gpsA/fix --> /output/flight/cmd,30.72783783783784,5.941081081081082,4.378378378378378,200,2.189189189189189,100
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/imuA/data --> /output/flight/cmd,32.395135135135135,5.7843243243243245,4.378378378378378,200,2.189189189189189,100
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/lidar/scan --> /output/flight/cmd,23.244864864864862,5.153243243243244,4.378378378378378,200,2.189189189189189,100
|
||||||
|
edf_single_timed_20_boosted_100,edf_single_timed_20_boosted_100,/input/operator/commands --> /output/flight/cmd,28.249999999999993,4.603783783783783,4.378378378378378,200,2.189189189189189,100
|
|
Loading…
Add table
Add a link
Reference in a new issue