From bb1dccf502884393285438e20993e5040ba076ac Mon Sep 17 00:00:00 2001 From: keithmk Date: Thu, 28 Mar 2024 00:30:24 -0400 Subject: [PATCH] Code Refactoring. Added Docs to website --- docs/reference/index.rst | 1 + docs/reference/preflight.md | 2 + .../mil_tools/scripts/mil-preflight/helper.py | 222 +++++++++++++ .../mil_tools/scripts/mil-preflight/main.py | 299 ++++-------------- .../mil_tools/scripts/mil-preflight/menus.py | 5 - .../mil-preflight/{README.md => preflight.md} | 7 +- .../mil_tools/scripts/mil-preflight/tests.py | 17 +- services.txt | 165 ---------- topics.txt | 254 --------------- 9 files changed, 301 insertions(+), 671 deletions(-) create mode 100644 docs/reference/preflight.md create mode 100644 mil_common/utils/mil_tools/scripts/mil-preflight/helper.py rename mil_common/utils/mil_tools/scripts/mil-preflight/{README.md => preflight.md} (86%) delete mode 100644 services.txt delete mode 100644 topics.txt diff --git a/docs/reference/index.rst b/docs/reference/index.rst index c63581a0c..6634f15bb 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -32,3 +32,4 @@ by MIL. These subsystems relate to a variety of processes. pneumatic sabertooth bagging + preflight diff --git a/docs/reference/preflight.md b/docs/reference/preflight.md new file mode 100644 index 000000000..a2a088fb3 --- /dev/null +++ b/docs/reference/preflight.md @@ -0,0 +1,2 @@ +```{include} ../../mil_common/utils/mil_tools/scripts/mil-preflight/preflight.md +``` diff --git a/mil_common/utils/mil_tools/scripts/mil-preflight/helper.py b/mil_common/utils/mil_tools/scripts/mil-preflight/helper.py new file mode 100644 index 000000000..bb5cf6ce9 --- /dev/null +++ b/mil_common/utils/mil_tools/scripts/mil-preflight/helper.py @@ -0,0 +1,222 @@ +################################################################################ +# File name: helper.py +# Author: Keith Khadar +# Description: This is used to store the helper functions for preflight +################################################################################ +# ----- Imports ----- # +# ----- Console -----# +# ----- Async -----# +import asyncio +import subprocess +import time + +# ----- Misc -----# +from contextlib import suppress + +# ----- Preflight -----# +import menus + +# ----- ROS -----# +import rospy +import rostopic +import tests +from axros import NodeHandle +from PyInquirer import prompt +from rich.console import Console +from rich.progress import Progress, track +from rich.table import Table + +# ----- Variables ----- # +report = [] + + +# ----- Functions ----- # +def clear_screen(): + # Clears the screen and prints the preflight header + subprocess.run("clear", shell=True) + Console().print(menus.title) + + +def init_report(): + # Function to initialize the report + report.clear() + + +def init_ros(): + # Checks if ROS is running and initializes it. + # Returns False if ROS is not running and TRUE if the ROS node was properly setup. + + # Check that ROS is running! + try: + rostopic._check_master() + except Exception: + Console().print("[bold] ROS not running! Please try again later[/]") + prompt(menus.press_anykey) + return False + + # Initialize the ROS node + with suppress(Exception): + rospy.init_node("preflight") + return True + + +async def axros_check_nodes(nodes): + # Asynchronously check all the nodes and then print/save the results + + # Setup AXROS + nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) + + # Using async.io check all the nodes + answers = [] + async with nh: + # Create all the function calls to check_node + tasks = [check_node(node, answers, nh) for node in nodes] + + # Go through all the function calls and await them. + # Using track to display a loading bar. + for task in track( + asyncio.as_completed(tasks), + description="Checking Nodes...", + total=len(tasks), + ): + await task + + # Clear the screen, print and save the response to the report + print_results(answers, "Node Liveliness") + + +async def check_node(node, results, nh): + # Using AXROS lookup a node and save the result in the results list + + try: + results.append((node, bool(await nh.lookup_node(node)))) + except Exception: + results.append((node, False)) + + +async def axros_check_topics(topics): + # Asynchronously check all the topics and then print/save the results + + # Setup AXROS + nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) + + # Using async.io check all the topics + answers = [] + async with nh: + # Create all the function calls to check topic + tasks = [check_topic(topic, answers, nh) for topic in topics] + + # Go through all the function calls and await them. + # Using track to display a loading bar. + for task in track( + asyncio.as_completed(tasks), + description="Checking Topics...", + total=len(tasks), + ): + await task + + # Clear the screen, print and save the response to the report + print_results(answers, "Topic Liveliness") + + +async def check_topic(topic, results, nh): + # Using AXROS subscribe to a topic and wait for a message + + # Get the topic class + topicType, topicStr, _ = rostopic.get_topic_class(topic) + + # Create an AXROS subscriber + sub = nh.subscribe(topicStr, topicType) + + async with sub: + try: + await asyncio.wait_for(sub.get_next_message(), tests.topic_timeout) + results.append((topic, True)) + except Exception: + results.append((topic, False)) + + +def check_actuators(actuators): + # Check all the actuators using check_actuator + + answers = [] + for actuator in actuators: + check_actuator(actuator, answers) + + # Clear the screen, print and save the response to the report + print_results(answers, "Actuator Tests") + + +def check_actuator(actuator, results): + # Checks the actuator by publishing to a topic for a specified time + + try: + # Confirm that it is safe to run this actuator + Console().print(menus.safety_check, actuator[0]) + menu_ans = prompt(menus.continue_question) + if next(iter(menu_ans.values())) is False: + # Go back to main menu + return + + # Create a publisher + topicType, topicStr, _ = rostopic.get_topic_class(actuator[1][0]) + pub = rospy.Publisher(topicStr, topicType, queue_size=10) + + # Publish to the topic for the specified timeout + with Progress() as progress: + t_start = time.time() + t_end = t_start + tests.actuator_timeout + t_prev = time.time() + task = progress.add_task("Running", total=(t_end - t_start)) + while time.time() <= t_end: + pub.publish(actuator[1][1]) + progress.update(task, advance=(time.time() - t_prev)) + t_prev = time.time() + progress.update(task, advance=t_end) + + # Ask if the actuator worked + Console().print(menus.actuator_check) + results.append((actuator[0], next(iter(prompt(menus.yes_no).values())))) + except Exception: + Console().print(menus.actuator_failed) + results.append((actuator[0], False)) + + +def generate_report(): + # Attempts to create and display the report + + # Check that there is a report + if len(report) == 0: + Console().print( + "[bold]No report![/].\nPlease generate a report by running a full test.", + ) + prompt(menus.press_anykey) + return + # Generate the report + for result in report: + Console().print(result) + prompt(menus.press_anykey_menu_return) + + +def print_results(systems, name): + # This saves the result to the specified system and prints it + clear_screen() + result = create_result(systems, name) + Console().print(result) + + +def create_result(systems, name): + # This save the result into a RICH table + + # Generates a table to hold information about each system + result = Table(title=f"[bold]{name}[/]") + result.add_column("System Name", justify="center", style="cyan", no_wrap=True) + result.add_column("Status", justify="center", style="magenta", no_wrap=True) + + # Populates the table + for system, status in systems: + status_text = "[green]✔ Working[/]" if status else "[red]❌ Not Working[/]" + result.add_row(system, status_text) + report.append(result) + + return result diff --git a/mil_common/utils/mil_tools/scripts/mil-preflight/main.py b/mil_common/utils/mil_tools/scripts/mil-preflight/main.py index 1df2bf7f8..b856c5028 100644 --- a/mil_common/utils/mil_tools/scripts/mil-preflight/main.py +++ b/mil_common/utils/mil_tools/scripts/mil-preflight/main.py @@ -1,43 +1,32 @@ ################################################################################ # File name: main.py # Author: Keith Khadar -# Description: This file is the entry point to preflight. Version 1.0 +# Description: This file is the entry point to preflight. ################################################################################ # ----- Imports ----- # -# ----- Preflight -----# # ----- Console -----# # ----- Async -----# import asyncio import subprocess -import time -from contextlib import suppress + +# ----- Misc -----# from pathlib import Path -import menus +import helper -# ----- ROS -----# -import rospy -import rostopic +# ----- Preflight -----# +import menus import tests -from axros import NodeHandle from PyInquirer import prompt from rich.console import Console from rich.markdown import Markdown -from rich.progress import Progress, track -from rich.table import Table - -# ----- Variables ----- # -# ----- Reports -----# - - -report = [] # ----- Main Routine ----- # async def main(): # Clear Screen and Display Start menu - clear_screen() + helper.clear_screen() # Print Info about Preflight Console().print(menus.info_page) @@ -58,7 +47,9 @@ async def main(): if mode == "Exit": subprocess.run("clear", shell=True) return - + except StopIteration: + # Return if the user presses Ctrl-c + return except Exception: pass @@ -68,17 +59,16 @@ async def main(): # ----- Subroutines ----- # -# ----- Modes -----# - +# ----- Modes -----# async def fullTest(): - # Clear the report - report.clear() + + helper.init_report() ### Complete the setup tests ### # Clear the screen and display the setup checklist - clear_screen() + helper.clear_screen() Console().print(menus.setup_desc) respond = prompt(menus.setupChecklist) @@ -89,7 +79,7 @@ async def fullTest(): answers.append((tests.setup[i], True)) else: answers.append((tests.setup[i], False)) - createResult(answers, "Setup Checklist") + helper.create_result(answers, "Setup Checklist") # Check if the list is incomplete. If so prompt user for confirmation to continue if len(next(iter(respond.values()))) != len(tests.setup): @@ -98,41 +88,17 @@ async def fullTest(): return ### Complete Software Tests ### - - # Clear the screen - clear_screen() - - # Check that ROS is running! - try: - rostopic._check_master() - except Exception: - Console().print("[bold] ROS not running! Please try again later[/]") - menu_ans = prompt(menus.press_anykey) + if not helper.init_ros(): return - # Initialize the ROS node - with suppress(Exception): - rospy.init_node("preflight") + # Clear the screen + helper.clear_screen() # Print Node Screen description Console().print(menus.node_desc) # Check Nodes - - # Setup AXROS - nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) - async with nh: - answers = [] - tasks = [check_node(node, answers, nh) for node in tests.nodes] - for task in track( - asyncio.as_completed(tasks), - description="Checking Nodes...", - total=len(tasks), - ): - await task - - # Clear the screen, print and save the response to the report - print_results(answers, "Node Liveliness") + await helper.axros_check_nodes(tests.nodes) # Prompt the user to continue to next test menu_ans = prompt(menus.continue_question) @@ -141,25 +107,12 @@ async def fullTest(): return # Print Topic screen description - clear_screen() + helper.clear_screen() Console().print(menus.topic_desc) # Check Topics - # Setup AXROS - nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) - async with nh: - answers = [] - tasks = [check_topic(node, answers, nh) for node in tests.topics] - for task in track( - asyncio.as_completed(tasks), - description="Checking Topics...", - total=len(tasks), - ): - await task - - # Clear the screen, print and save the response to the report - print_results(answers, "Topic Liveliness") + await helper.axros_check_topics(tests.topics) # Prompt the user to continue to next test menu_ans = prompt(menus.continue_question) @@ -169,40 +122,51 @@ async def fullTest(): ### Actuators Test ### # Print Actuators Screen description - subprocess.run("clear", shell=True) + helper.clear_screen() Console().print(menus.node_desc) - answers = [] - for actuator in tests.actuatorsList: - check_actuator(actuator, answers) + helper.check_actuators(tests.actuatorsList) + + prompt(menus.press_anykey_menu_return) + return + + +def viewReport(): + # Clear the screen + helper.clear_screen() + + # Generate the report + helper.generate_report() + return + + +def viewDocumentation(): + # Clear the screen + helper.clear_screen() + + # Find path to README from current directory + mod_path = Path(__file__).parent + rel_path = "preflight.md" + src_path = (mod_path / rel_path).resolve() + # Print the documentation + with open(src_path, "r+") as help_file: + Console().print(Markdown(help_file.read())) - # Clear the screen, print and save the response to the report - print_results(answers, "Actuator Tests") prompt(menus.press_anykey_menu_return) return async def specificTest(): - # Clear the report - report.clear() + # Init the report + helper.init_report() # Clear the screen and display the node checklist - clear_screen() - - # Check that ROS is running! - try: - rostopic._check_master() - except Exception: - Console().print("[bold] ROS not running! Please try again later[/]") - menu_ans = prompt(menus.press_anykey) - return + helper.clear_screen() - # Initialize the ROS node - with suppress(Exception): - rospy.init_node("preflight") + helper.init_ros() # Clear the screen and display the node checklist - clear_screen() + helper.clear_screen() Console().print(menus.specific_desc) respond = prompt(menus.nodeChecklist) @@ -216,19 +180,7 @@ async def specificTest(): Console().print(menus.node_desc) # Check Nodes - nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) - async with nh: - answers = [] - tasks = [check_node(node, answers, nh) for node in nodes] - for task in track( - asyncio.as_completed(tasks), - description="Checking Nodes...", - total=len(tasks), - ): - await task - - # Clear the screen, print and save the response to the report - print_results(answers, "Node Liveliness") + await helper.axros_check_nodes(nodes=nodes) # Prompt the user to continue to next test menu_ans = prompt(menus.continue_question) @@ -237,7 +189,7 @@ async def specificTest(): return # Clear the screen and display the topic checklist - clear_screen() + helper.clear_screen() Console().print(menus.specific_desc) respond = prompt(menus.topicChecklist) @@ -248,23 +200,11 @@ async def specificTest(): topics.append(tests.topics[i]) # Print Topic screen description - clear_screen() + helper.clear_screen() Console().print(menus.topic_desc) # Check Topics - nh = NodeHandle.from_argv("Preflight_nh", "", anonymous=True) - async with nh: - answers = [] - tasks = [check_topic(node, answers, nh) for node in topics] - for task in track( - asyncio.as_completed(tasks), - description="Checking Topics...", - total=len(tasks), - ): - await task - - # Clear the screen, print and save the response to the report - print_results(answers, "Topic Liveliness") + await helper.axros_check_topics(topics=topics) # Prompt the user to continue to next test menu_ans = prompt(menus.continue_question) @@ -273,7 +213,7 @@ async def specificTest(): return # Clear the screen and display the actuator checklist - clear_screen() + helper.clear_screen() Console().print(menus.specific_desc) respond = prompt(menus.actuatorChecklist) @@ -284,133 +224,14 @@ async def specificTest(): actuators.append(tests.actuatorsList[i]) # Print Actuators Screen description - subprocess.run("clear", shell=True) + helper.clear_screen() Console().print(menus.node_desc) - answers = [] - for actuator in actuators: - check_actuator(actuator, answers) - - # Clear the screen, print and save the response to the report - print_results(answers, "Actuator Tests") - prompt(menus.press_anykey_menu_return) - return - - -def viewReport(): - # Clear the screen - clear_screen() - - # Check that there is a report - if len(report) == 0: - Console().print( - "[bold]No report![/].\nPlease generate a report by running a full test.", - ) - prompt(menus.press_anykey) - return - # Generate the report - for result in report: - Console().print(result) - prompt(menus.press_anykey_menu_return) - return - - -def viewDocumentation(): - # Clear the screen - clear_screen() - - # Find path to README from current directory - mod_path = Path(__file__).parent - rel_path = "README.md" - src_path = (mod_path / rel_path).resolve() - # Print the documentation - with open(src_path, "r+") as help_file: - Console().print(Markdown(help_file.read())) + helper.check_actuators(actuators=actuators) prompt(menus.press_anykey_menu_return) return -# ----- Helper -----# - - -def createResult(systems, name): - # Generates a table to hold information about each system - result = Table(title=f"[bold]{name}[/]") - result.add_column("System Name", justify="center", style="cyan", no_wrap=True) - result.add_column("Status", justify="center", style="magenta", no_wrap=True) - - # Populates the table - for system, status in systems: - status_text = "[green]✔ Working[/]" if status else "[red]❌ Not Working[/]" - result.add_row(system, status_text) - report.append(result) - - return result - - -def print_results(systems, name): - clear_screen() - result = createResult(systems, name) - Console().print(result) - - -def clear_screen(): - subprocess.run("clear", shell=True) - Console().print(menus.title) - - -async def check_node(node, results, nh): - try: - results.append((node, bool(await nh.lookup_node(node)))) - except Exception: - results.append((node, False)) - - -async def check_topic(topic, results, nh): - topicType, topicStr, _ = rostopic.get_topic_class(topic) # get topic class - sub = nh.subscribe(topicStr, topicType) - - async with sub: - try: - await asyncio.wait_for(sub.get_next_message(), tests.topic_timeout) - results.append((topic, True)) - except Exception: - results.append((topic, False)) - - -def check_actuator(actuator, results): - try: - # Confirm that it is safe to run this actuator - Console().print(menus.safety_check, actuator[0]) - menu_ans = prompt(menus.continue_question) - if next(iter(menu_ans.values())) is False: - # Go back to main menu - return - - # Create a publisher - topicType, topicStr, _ = rostopic.get_topic_class(actuator[1][0]) - pub = rospy.Publisher(topicStr, topicType, queue_size=10) - - # Publish to the topic for the specified timeout - with Progress() as progress: - t_start = time.time() - t_end = t_start + tests.actuator_timeout - t_prev = time.time() - task = progress.add_task("Running", total=(t_end - t_start)) - while time.time() <= t_end: - pub.publish(actuator[1][1]) - progress.update(task, advance=(time.time() - t_prev)) - t_prev = time.time() - progress.update(task, advance=t_end) - - # Ask if the actuator worked - Console().print(menus.actuator_check) - results.append((actuator[0], next(iter(prompt(menus.yes_no).values())))) - except Exception: - Console().print(menus.actuator_failed) - results.append((actuator[0], False)) - - if __name__ == "__main__": asyncio.run(main()) diff --git a/mil_common/utils/mil_tools/scripts/mil-preflight/menus.py b/mil_common/utils/mil_tools/scripts/mil-preflight/menus.py index fe58fd040..53a3cd738 100644 --- a/mil_common/utils/mil_tools/scripts/mil-preflight/menus.py +++ b/mil_common/utils/mil_tools/scripts/mil-preflight/menus.py @@ -12,11 +12,6 @@ """ info_page = """ Welcome to the Preflight Program, a tool inspired by the preflight checklists used by pilots before flying a plane. This program is designed to verify the functionality of all software and hardware systems on your autonomous robot. It ensures that everything is in working order, allowing you to safely deploy your robot with confidence.\n -[italic]Authors:[/italic] -Keith Khadar -Anthony Liao -Joshua Thomas -Maanas Kotha\n """ diff --git a/mil_common/utils/mil_tools/scripts/mil-preflight/README.md b/mil_common/utils/mil_tools/scripts/mil-preflight/preflight.md similarity index 86% rename from mil_common/utils/mil_tools/scripts/mil-preflight/README.md rename to mil_common/utils/mil_tools/scripts/mil-preflight/preflight.md index 830fc5f9b..942d85cb4 100644 --- a/mil_common/utils/mil_tools/scripts/mil-preflight/README.md +++ b/mil_common/utils/mil_tools/scripts/mil-preflight/preflight.md @@ -4,7 +4,6 @@ Simply type "preflight" anywhere in the MIL directory. Make sure that a robot is ## Description Preflight is an automated testing tool that should be run after turning on and connecting to the robot to run a prelaunch hardware checklist and automated software checklist. -In the current version 1.0, Run Specific Test is not yet implemented. ### There are three types of automated software tests #### Actuators This test will prompt the user to enable physical moving actuators on the robot. Make sure that the area is cleared and the robot won't damage itself or others nearby. The user will have to watch and validate that they move as expected personally. @@ -19,5 +18,7 @@ ROS Topics act as a channel for ROS Nodes to communicate by publishing and subsc To add a Topic test, add a topic to the list in tests.py -### Dependencies -ROS, Rich, PyInquirer +### Setup Tests +There are also setup tests. These are used to verify certain features on the robot that cannot be automated. For example ensuring that the O-rings are greased. + +To add a Setup test, add a what need to be tested to the list in tests.py diff --git a/mil_common/utils/mil_tools/scripts/mil-preflight/tests.py b/mil_common/utils/mil_tools/scripts/mil-preflight/tests.py index 91fa73b1a..9503cf5cd 100644 --- a/mil_common/utils/mil_tools/scripts/mil-preflight/tests.py +++ b/mil_common/utils/mil_tools/scripts/mil-preflight/tests.py @@ -5,10 +5,10 @@ # add tests you would add them here. ################################################################################ - # ----- Actuator Tests ----- # # Add tests here for actuators. These will be turned on and the user # will confirm their operation. Also include any custom message + # imports here. # Thruster Messages @@ -20,6 +20,10 @@ actuator_timeout = 1.5 # seconds actuatorsList = [ + ### ( + ### "Name of Test", + ### ("/topic", message), + ### ) ( "FLH Thruster Test", ("/thrusters/thrust", [ThrusterCmd(name="FLH", thrust=10.0)]), @@ -54,6 +58,7 @@ ), ] + # ----- Setup Tests ----- # # Add tests here for things that need to be physically inspected or check before the sub is running setup = [ @@ -68,11 +73,13 @@ # ----- Nodes -----# nodes = [ + # Navbox processing "/odom_estimator", - "/odom_estimator", - "/odom_estimator", - "/odom_estimator", - "/doest_exist", + "/transform_odometry", + "/c3_trajectory_generator", + "/adaptive_controller", + "/thruster_mapper", + "/mission_runner", ] # ----- Topics -----# diff --git a/services.txt b/services.txt deleted file mode 100644 index ff8f96b88..000000000 --- a/services.txt +++ /dev/null @@ -1,165 +0,0 @@ -/adaptive_controller/get_loggers -/adaptive_controller/set_logger_level -/adaptive_controller/set_parameters -/alarm/get -/alarm/set -/alarm_sever/get_loggers -/alarm_sever/set_logger_level -/b_matrix -/c3_trajectory_generator/get_loggers -/c3_trajectory_generator/set_logger_level -/camera/down/down_image_proc/get_loggers -/camera/down/down_image_proc/set_logger_level -/camera/down/down_image_proc_debayer/set_parameters -/camera/down/down_image_proc_rectify_color/set_parameters -/camera/down/down_image_proc_rectify_mono/set_parameters -/camera/down/image_color/compressed/set_parameters -/camera/down/image_color/compressedDepth/set_parameters -/camera/down/image_color/theora/set_parameters -/camera/down/image_mono/compressed/set_parameters -/camera/down/image_mono/compressedDepth/set_parameters -/camera/down/image_mono/theora/set_parameters -/camera/down/image_raw/compressed/set_parameters -/camera/down/image_raw/compressedDepth/set_parameters -/camera/down/image_raw/theora/set_parameters -/camera/down/image_rect/compressed/set_parameters -/camera/down/image_rect/compressedDepth/set_parameters -/camera/down/image_rect/theora/set_parameters -/camera/down/image_rect_color/compressed/set_parameters -/camera/down/image_rect_color/compressedDepth/set_parameters -/camera/down/image_rect_color/theora/set_parameters -/camera/down/set_camera_info -/camera/down/set_parameters -/camera/front/camera_nodelet_manager/get_loggers -/camera/front/camera_nodelet_manager/list -/camera/front/camera_nodelet_manager/load_nodelet -/camera/front/camera_nodelet_manager/set_logger_level -/camera/front/camera_nodelet_manager/unload_nodelet -/camera/front/left/image_color/compressed/set_parameters -/camera/front/left/image_color/compressedDepth/set_parameters -/camera/front/left/image_color/theora/set_parameters -/camera/front/left/image_mono/compressed/set_parameters -/camera/front/left/image_mono/compressedDepth/set_parameters -/camera/front/left/image_mono/theora/set_parameters -/camera/front/left/image_raw/compressed/set_parameters -/camera/front/left/image_raw/compressedDepth/set_parameters -/camera/front/left/image_raw/theora/set_parameters -/camera/front/left/image_rect/compressed/set_parameters -/camera/front/left/image_rect/compressedDepth/set_parameters -/camera/front/left/image_rect/theora/set_parameters -/camera/front/left/image_rect_color/compressed/set_parameters -/camera/front/left/image_rect_color/compressedDepth/set_parameters -/camera/front/left/image_rect_color/theora/set_parameters -/camera/front/left/seecam_image_proc/get_loggers -/camera/front/left/seecam_image_proc/set_logger_level -/camera/front/left/seecam_image_proc_debayer/set_parameters -/camera/front/left/seecam_image_proc_rectify_color/set_parameters -/camera/front/left/seecam_image_proc_rectify_mono/set_parameters -/camera/front/left/set_camera_info -/camera/front/left/set_parameters -/camera/front/right/image_color/compressed/set_parameters -/camera/front/right/image_color/compressedDepth/set_parameters -/camera/front/right/image_color/theora/set_parameters -/camera/front/right/image_mono/compressed/set_parameters -/camera/front/right/image_mono/compressedDepth/set_parameters -/camera/front/right/image_mono/theora/set_parameters -/camera/front/right/image_raw/compressed/set_parameters -/camera/front/right/image_raw/compressedDepth/set_parameters -/camera/front/right/image_raw/theora/set_parameters -/camera/front/right/image_rect/compressed/set_parameters -/camera/front/right/image_rect/compressedDepth/set_parameters -/camera/front/right/image_rect/theora/set_parameters -/camera/front/right/image_rect_color/compressed/set_parameters -/camera/front/right/image_rect_color/compressedDepth/set_parameters -/camera/front/right/image_rect_color/theora/set_parameters -/camera/front/right/set_camera_info -/camera/front/right/set_parameters -/camera/front/right_image_proc_debayer/get_loggers -/camera/front/right_image_proc_debayer/set_logger_level -/camera/front/right_image_proc_debayer/set_parameters -/camera/front/right_image_proc_rect/get_loggers -/camera/front/right_image_proc_rect/set_logger_level -/camera/front/right_image_proc_rect/set_parameters -/camera/front/right_image_proc_rect_color/get_loggers -/camera/front/right_image_proc_rect_color/set_logger_level -/camera/front/right_image_proc_rect_color/set_parameters -/gazebo/apply_body_wrench -/gazebo/apply_joint_effort -/gazebo/clear_body_wrenches -/gazebo/clear_joint_forces -/gazebo/delete_light -/gazebo/delete_model -/gazebo/get_joint_properties -/gazebo/get_light_properties -/gazebo/get_link_properties -/gazebo/get_link_state -/gazebo/get_loggers -/gazebo/get_model_properties -/gazebo/get_model_state -/gazebo/get_physics_properties -/gazebo/get_world_properties -/gazebo/pause_physics -/gazebo/reset_simulation -/gazebo/reset_world -/gazebo/set_joint_properties -/gazebo/set_light_properties -/gazebo/set_link_properties -/gazebo/set_link_state -/gazebo/set_logger_level -/gazebo/set_model_configuration -/gazebo/set_model_state -/gazebo/set_parameters -/gazebo/set_physics_properties -/gazebo/spawn_sdf_model -/gazebo/spawn_urdf_model -/gazebo/unpause_physics -/hydrophones/hydrophones_visualization/get_loggers -/hydrophones/hydrophones_visualization/set_logger_level -/hydrophones/ping_locator/cross_correlation_debug_enable -/hydrophones/ping_locator/enable -/hydrophones/ping_locator/get_loggers -/hydrophones/ping_locator/samples_debug_enable -/hydrophones/ping_locator/set_logger_level -/hydrophones/triggering/enable -/hydrophones/triggering/filter_debug_enable -/hydrophones/triggering/filter_debug_trigger -/hydrophones/triggering/get_loggers -/hydrophones/triggering/reset -/hydrophones/triggering/sample_at_trigger_debug_enable -/hydrophones/triggering/set_logger_level -/hydrophones/triggering/trigger_debug_enable -/magnetometer_vis/get_loggers -/magnetometer_vis/set_logger_level -/mission_runner/get_loggers -/mission_runner/refresh_missions -/mission_runner/set_logger_level -/odom_estimator/get_loggers -/odom_estimator/set_ignore_magnetometer -/odom_estimator/set_logger_level -/odometry_to_tf/get_loggers -/odometry_to_tf/set_logger_level -/poi_server/add -/poi_server/delete -/poi_server/get_loggers -/poi_server/move -/poi_server/save_to_param -/poi_server/set_logger_level -/poi_server/tf2_frames -/robot_state_publisher/get_loggers -/robot_state_publisher/set_logger_level -/rosout/get_loggers -/rosout/set_logger_level -/set_mobo_kill -/set_valve -/simulate_go -/simulate_hard_kill -/simulate_soft_kill -/tf_republisher/get_loggers -/tf_republisher/set_logger_level -/thruster_mapper/get_loggers -/thruster_mapper/set_logger_level -/transform_odometry/get_loggers -/transform_odometry/set_logger_level -/update_thruster_layout -/usb_to_can_driver/get_loggers -/usb_to_can_driver/set_logger_level diff --git a/topics.txt b/topics.txt deleted file mode 100644 index d85bb2a17..000000000 --- a/topics.txt +++ /dev/null @@ -1,254 +0,0 @@ -/absodom -/adaptive_controller/adaptation -/adaptive_controller/dist -/adaptive_controller/drag -/adaptive_controller/parameter_descriptions -/adaptive_controller/parameter_updates -/adaptive_controller/pose_error -/adaptive_controller/twist_error -/alarm/updates -/c3_trajectory_generator/sub_ogrid -/c3_trajectory_generator/trajectory_v -/c3_trajectory_generator/waypoint -/c3_trajectory_generator/waypoint_ogrid -/camera/down/camera_info -/camera/down/down_image_proc_debayer/parameter_descriptions -/camera/down/down_image_proc_debayer/parameter_updates -/camera/down/down_image_proc_rectify_color/parameter_descriptions -/camera/down/down_image_proc_rectify_color/parameter_updates -/camera/down/down_image_proc_rectify_mono/parameter_descriptions -/camera/down/down_image_proc_rectify_mono/parameter_updates -/camera/down/image_color -/camera/down/image_color/compressed -/camera/down/image_color/compressed/parameter_descriptions -/camera/down/image_color/compressed/parameter_updates -/camera/down/image_color/compressedDepth -/camera/down/image_color/compressedDepth/parameter_descriptions -/camera/down/image_color/compressedDepth/parameter_updates -/camera/down/image_color/theora -/camera/down/image_color/theora/parameter_descriptions -/camera/down/image_color/theora/parameter_updates -/camera/down/image_mono -/camera/down/image_mono/compressed -/camera/down/image_mono/compressed/parameter_descriptions -/camera/down/image_mono/compressed/parameter_updates -/camera/down/image_mono/compressedDepth -/camera/down/image_mono/compressedDepth/parameter_descriptions -/camera/down/image_mono/compressedDepth/parameter_updates -/camera/down/image_mono/theora -/camera/down/image_mono/theora/parameter_descriptions -/camera/down/image_mono/theora/parameter_updates -/camera/down/image_raw -/camera/down/image_raw/compressed -/camera/down/image_raw/compressed/parameter_descriptions -/camera/down/image_raw/compressed/parameter_updates -/camera/down/image_raw/compressedDepth -/camera/down/image_raw/compressedDepth/parameter_descriptions -/camera/down/image_raw/compressedDepth/parameter_updates -/camera/down/image_raw/theora -/camera/down/image_raw/theora/parameter_descriptions -/camera/down/image_raw/theora/parameter_updates -/camera/down/image_rect -/camera/down/image_rect/compressed -/camera/down/image_rect/compressed/parameter_descriptions -/camera/down/image_rect/compressed/parameter_updates -/camera/down/image_rect/compressedDepth -/camera/down/image_rect/compressedDepth/parameter_descriptions -/camera/down/image_rect/compressedDepth/parameter_updates -/camera/down/image_rect/theora -/camera/down/image_rect/theora/parameter_descriptions -/camera/down/image_rect/theora/parameter_updates -/camera/down/image_rect_color -/camera/down/image_rect_color/compressed -/camera/down/image_rect_color/compressed/parameter_descriptions -/camera/down/image_rect_color/compressed/parameter_updates -/camera/down/image_rect_color/compressedDepth -/camera/down/image_rect_color/compressedDepth/parameter_descriptions -/camera/down/image_rect_color/compressedDepth/parameter_updates -/camera/down/image_rect_color/theora -/camera/down/image_rect_color/theora/parameter_descriptions -/camera/down/image_rect_color/theora/parameter_updates -/camera/down/parameter_descriptions -/camera/down/parameter_updates -/camera/front/camera_nodelet_manager/bond -/camera/front/left/camera_info -/camera/front/left/image_color -/camera/front/left/image_color/compressed -/camera/front/left/image_color/compressed/parameter_descriptions -/camera/front/left/image_color/compressed/parameter_updates -/camera/front/left/image_color/compressedDepth -/camera/front/left/image_color/compressedDepth/parameter_descriptions -/camera/front/left/image_color/compressedDepth/parameter_updates -/camera/front/left/image_color/theora -/camera/front/left/image_color/theora/parameter_descriptions -/camera/front/left/image_color/theora/parameter_updates -/camera/front/left/image_mono -/camera/front/left/image_mono/compressed -/camera/front/left/image_mono/compressed/parameter_descriptions -/camera/front/left/image_mono/compressed/parameter_updates -/camera/front/left/image_mono/compressedDepth -/camera/front/left/image_mono/compressedDepth/parameter_descriptions -/camera/front/left/image_mono/compressedDepth/parameter_updates -/camera/front/left/image_mono/theora -/camera/front/left/image_mono/theora/parameter_descriptions -/camera/front/left/image_mono/theora/parameter_updates -/camera/front/left/image_raw -/camera/front/left/image_raw/compressed -/camera/front/left/image_raw/compressed/parameter_descriptions -/camera/front/left/image_raw/compressed/parameter_updates -/camera/front/left/image_raw/compressedDepth -/camera/front/left/image_raw/compressedDepth/parameter_descriptions -/camera/front/left/image_raw/compressedDepth/parameter_updates -/camera/front/left/image_raw/theora -/camera/front/left/image_raw/theora/parameter_descriptions -/camera/front/left/image_raw/theora/parameter_updates -/camera/front/left/image_rect -/camera/front/left/image_rect/compressed -/camera/front/left/image_rect/compressed/parameter_descriptions -/camera/front/left/image_rect/compressed/parameter_updates -/camera/front/left/image_rect/compressedDepth -/camera/front/left/image_rect/compressedDepth/parameter_descriptions -/camera/front/left/image_rect/compressedDepth/parameter_updates -/camera/front/left/image_rect/theora -/camera/front/left/image_rect/theora/parameter_descriptions -/camera/front/left/image_rect/theora/parameter_updates -/camera/front/left/image_rect_color -/camera/front/left/image_rect_color/compressed -/camera/front/left/image_rect_color/compressed/parameter_descriptions -/camera/front/left/image_rect_color/compressed/parameter_updates -/camera/front/left/image_rect_color/compressedDepth -/camera/front/left/image_rect_color/compressedDepth/parameter_descriptions -/camera/front/left/image_rect_color/compressedDepth/parameter_updates -/camera/front/left/image_rect_color/theora -/camera/front/left/image_rect_color/theora/parameter_descriptions -/camera/front/left/image_rect_color/theora/parameter_updates -/camera/front/left/parameter_descriptions -/camera/front/left/parameter_updates -/camera/front/left/seecam_image_proc_debayer/parameter_descriptions -/camera/front/left/seecam_image_proc_debayer/parameter_updates -/camera/front/left/seecam_image_proc_rectify_color/parameter_descriptions -/camera/front/left/seecam_image_proc_rectify_color/parameter_updates -/camera/front/left/seecam_image_proc_rectify_mono/parameter_descriptions -/camera/front/left/seecam_image_proc_rectify_mono/parameter_updates -/camera/front/right/camera_info -/camera/front/right/image_color -/camera/front/right/image_color/compressed -/camera/front/right/image_color/compressed/parameter_descriptions -/camera/front/right/image_color/compressed/parameter_updates -/camera/front/right/image_color/compressedDepth -/camera/front/right/image_color/compressedDepth/parameter_descriptions -/camera/front/right/image_color/compressedDepth/parameter_updates -/camera/front/right/image_color/theora -/camera/front/right/image_color/theora/parameter_descriptions -/camera/front/right/image_color/theora/parameter_updates -/camera/front/right/image_mono -/camera/front/right/image_mono/compressed -/camera/front/right/image_mono/compressed/parameter_descriptions -/camera/front/right/image_mono/compressed/parameter_updates -/camera/front/right/image_mono/compressedDepth -/camera/front/right/image_mono/compressedDepth/parameter_descriptions -/camera/front/right/image_mono/compressedDepth/parameter_updates -/camera/front/right/image_mono/theora -/camera/front/right/image_mono/theora/parameter_descriptions -/camera/front/right/image_mono/theora/parameter_updates -/camera/front/right/image_raw -/camera/front/right/image_raw/compressed -/camera/front/right/image_raw/compressed/parameter_descriptions -/camera/front/right/image_raw/compressed/parameter_updates -/camera/front/right/image_raw/compressedDepth -/camera/front/right/image_raw/compressedDepth/parameter_descriptions -/camera/front/right/image_raw/compressedDepth/parameter_updates -/camera/front/right/image_raw/theora -/camera/front/right/image_raw/theora/parameter_descriptions -/camera/front/right/image_raw/theora/parameter_updates -/camera/front/right/image_rect -/camera/front/right/image_rect/compressed -/camera/front/right/image_rect/compressed/parameter_descriptions -/camera/front/right/image_rect/compressed/parameter_updates -/camera/front/right/image_rect/compressedDepth -/camera/front/right/image_rect/compressedDepth/parameter_descriptions -/camera/front/right/image_rect/compressedDepth/parameter_updates -/camera/front/right/image_rect/theora -/camera/front/right/image_rect/theora/parameter_descriptions -/camera/front/right/image_rect/theora/parameter_updates -/camera/front/right/image_rect_color -/camera/front/right/image_rect_color/compressed -/camera/front/right/image_rect_color/compressed/parameter_descriptions -/camera/front/right/image_rect_color/compressed/parameter_updates -/camera/front/right/image_rect_color/compressedDepth -/camera/front/right/image_rect_color/compressedDepth/parameter_descriptions -/camera/front/right/image_rect_color/compressedDepth/parameter_updates -/camera/front/right/image_rect_color/theora -/camera/front/right/image_rect_color/theora/parameter_descriptions -/camera/front/right/image_rect_color/theora/parameter_updates -/camera/front/right/parameter_descriptions -/camera/front/right/parameter_updates -/camera/front/right_image_proc_debayer/parameter_descriptions -/camera/front/right_image_proc_debayer/parameter_updates -/camera/front/right_image_proc_rect/parameter_descriptions -/camera/front/right_image_proc_rect/parameter_updates -/camera/front/right_image_proc_rect_color/parameter_descriptions -/camera/front/right_image_proc_rect_color/parameter_updates -/clock -/contact_bumper -/depth -/dvl -/dvl/range -/gazebo/link_states -/gazebo/model_states -/gazebo/parameter_descriptions -/gazebo/parameter_updates -/gazebo/performance_metrics -/gazebo/set_link_state -/gazebo/set_model_state -/hydrophones/direction -/hydrophones/direction_marker -/hydrophones/ping_locator/cross_correlation_debug -/hydrophones/ping_locator/samples_debug -/hydrophones/pings -/hydrophones/processed -/hydrophones/samples -/hydrophones/triggering/filter_debug -/hydrophones/triggering/sample_at_trigger_debug -/hydrophones/triggering/trigger_debug -/hydrophones/visualization -/imu/data_raw -/imu/inclinometer -/imu/mag -/imu/marker -/imu_odom -/joint_states -/mission/cancel -/mission/feedback -/mission/goal -/mission/result -/mission/status -/moveto/cancel -/moveto/feedback -/moveto/goal -/moveto/result -/moveto/status -/network -/odom -/odom_estimator/info -/ogrid_pointcloud/ogrid -/online_bagger/bag/cancel -/online_bagger/bag/feedback -/online_bagger/bag/goal -/online_bagger/bag/result -/online_bagger/bag/status -/points_of_interest -/points_of_interest/feedback -/points_of_interest/update -/points_of_interest/update_full -/rosout -/rosout_agg -/tf -/tf_static -/thrusters/thrust -/trajectory -/visualization -/wrench -/wrench_actual -/wrench_error -/yolov7/detections