From 608f6688c6f6088f1357fed9e68b45d68bc9ee2d Mon Sep 17 00:00:00 2001
From: Marina Moreira <67443181+marinagmoreira@users.noreply.github.com>
Date: Fri, 5 Feb 2021 10:27:33 -0800
Subject: [PATCH] Release 0.14.0
* Added graph_localizer package
* Added supporting packages for graph localizer including imu_augmetor, imu_integation, localization_common, localization_measurements
* Added tools for graph localizer including graph_bag and imu_bias_tester
* Added rviz plugins for graph localizer and associated packages in localization_rviz_plugins
* Added gtsam debian
Please Note: Perching does not work in this release, please use 0.13.0 for this.
---
CMakeLists.txt | 21 +-
RELEASE.md | 9 +
astrobee.doxyfile | 2 +-
astrobee/commands/freeFlyerPlanSchema.json | 3 +-
.../communications/dds_ros_bridge.config | 11 +
astrobee/config/faults.config | 107 +-
astrobee/config/graph_localizer.config | 150 ++
astrobee/config/localization.config | 2 +-
astrobee/config/management/data_bagger.config | 2 +
astrobee/config/management/fault_table.config | 169 +--
astrobee/config/management/sys_monitor.config | 5 +-
astrobee/config/robots/bsharp2.config | 32 +-
astrobee/config/tools/graph_bag.config | 33 +
astrobee/config/worlds/granite.config | 2 +
astrobee/config/worlds/iss.config | 2 +
astrobee/launch/astrobee.launch | 37 +-
.../offline_localization/loc_only.launch | 38 +
.../offline_localization/loc_rviz.launch | 49 +
.../localization_from_bag.launch | 96 ++
.../record_localization.launch | 22 +
.../replay_localization.launch | 33 +
astrobee/launch/replay.launch | 99 --
astrobee/launch/robot/LLP.launch | 81 +-
astrobee/launch/robot/MLP.launch | 629 +++++----
astrobee/launch/sim.launch | 59 +-
astrobee/launch/spawn.launch | 2 +
astrobee/resources/rviz/loc_granite.rviz | 275 ++++
astrobee/resources/rviz/loc_iss.rviz | 273 ++++
.../dds_msgs/idl/AstrobeeCommandConstants.idl | 1 +
.../dds_msgs/idl/TelemetryState.idl | 1 +
.../include/dds_ros_bridge/dds_ros_bridge.h | 7 +-
.../rapid_position_provider_ros_pose_helper.h | 48 +
.../dds_ros_bridge/ros_pose_rapid_position.h | 65 +
.../ros_telemetry_rapid_telemetry.h | 1 +
.../dds_ros_bridge/src/dds_ros_bridge.cc | 79 ++
...rapid_position_provider_ros_pose_helper.cc | 53 +
.../src/ros_pose_rapid_position.cc | 80 ++
.../src/ros_telemetry_rapid_telemetry.cc | 10 +
.../ff_msgs/msg/CommandConstants.msg | 1 +
communications/ff_msgs/msg/GraphState.msg | 44 +
.../ff_msgs/msg/LocalizationGraph.msg | 21 +
communications/ff_msgs/srv/SetRate.srv | 15 +-
debian/changelog | 11 +
debian/control | 4 +-
doc/general_documentation/flight_release.md | 15 +-
gnc/ctl/CMakeLists.txt | 2 +-
gnc/ctl/test/test_ctl.test | 1 +
gnc/ekf/include/ekf/ekf.h | 4 +-
gnc/ekf/src/ekf.cc | 2 +
.../include/smart_dock/smart_dock.h | 4 +
hardware/smart_dock/tools/smart_dock_tool.cc | 4 +
localization/CMakeLists.txt | 6 +
localization/graph_localizer/CMakeLists.txt | 57 +
.../graph_localizer/calibration_params.h | 34 +
.../graph_localizer/cumulative_factor_adder.h | 43 +
.../include/graph_localizer/factor_adder.h | 43 +
.../graph_localizer/factor_adder_params.h | 29 +
.../include/graph_localizer/factor_params.h | 38 +
.../include/graph_localizer/factor_to_add.h | 67 +
.../include/graph_localizer/feature_counts.h | 35 +
.../include/graph_localizer/feature_track.h | 48 +
.../include/graph_localizer/feature_tracker.h | 61 +
.../graph_localizer/feature_tracker_params.h | 28 +
.../include/graph_localizer/graph_action.h | 32 +
.../graph_initializer_params.h | 37 +
.../include/graph_localizer/graph_localizer.h | 254 ++++
.../graph_localizer_initializer.h | 72 +
.../graph_localizer/graph_localizer_nodelet.h | 121 ++
.../graph_localizer/graph_localizer_params.h | 56 +
.../graph_localizer/graph_localizer_wrapper.h | 121 ++
.../include/graph_localizer/graph_stats.h | 100 ++
.../include/graph_localizer/graph_values.h | 169 +++
.../graph_localizer/graph_values_params.h | 34 +
.../include/graph_localizer/key_info.h | 59 +
.../graph_localizer/loc_factor_adder.h | 47 +
.../graph_localizer/loc_factor_adder_params.h | 48 +
.../include/graph_localizer/loc_pose_factor.h | 52 +
.../graph_localizer/loc_projection_factor.h | 237 ++++
.../include/graph_localizer/noise_params.h | 34 +
.../graph_localizer/parameter_reader.h | 57 +
.../graph_localizer/pose_rotation_factor.h | 98 ++
.../graph_localizer/projection_factor_adder.h | 49 +
.../projection_factor_adder_params.h | 45 +
.../robust_smart_projection_pose_factor.h | 221 +++
.../graph_localizer/rotation_factor_adder.h | 44 +
.../rotation_factor_adder_params.h | 37 +
.../include/graph_localizer/sanity_checker.h | 41 +
.../graph_localizer/sanity_checker_params.h | 35 +
.../include/graph_localizer/serialization.h | 30 +
...smart_projection_cumulative_factor_adder.h | 48 +
.../smart_projection_factor_adder_params.h | 51 +
.../graph_localizer/standstill_factor_adder.h | 46 +
.../standstill_factor_adder_params.h | 34 +
.../include/graph_localizer/utilities.h | 88 ++
.../launch/graph_localizer.launch | 27 +
.../graph_localizer/nodelet_plugins.xml | 11 +
localization/graph_localizer/package.xml | 26 +
localization/graph_localizer/readme.md | 33 +
.../graph_localizer/src/feature_tracker.cc | 119 ++
.../graph_localizer/src/graph_localizer.cc | 1243 +++++++++++++++++
.../src/graph_localizer_intializer.cc | 185 +++
.../src/graph_localizer_nodelet.cc | 277 ++++
.../src/graph_localizer_wrapper.cc | 318 +++++
.../graph_localizer/src/graph_stats.cc | 169 +++
.../graph_localizer/src/graph_values.cc | 494 +++++++
.../graph_localizer/src/loc_factor_adder.cc | 103 ++
.../graph_localizer/src/parameter_reader.cc | 215 +++
.../src/projection_factor_adder.cc | 89 ++
.../src/rotation_factor_adder.cc | 103 ++
.../graph_localizer/src/sanity_checker.cc | 55 +
.../graph_localizer/src/serialization.cc | 93 ++
...mart_projection_cumulative_factor_adder.cc | 89 ++
.../src/standstill_factor_adder.cc | 80 ++
localization/graph_localizer/src/utilities.cc | 253 ++++
.../test/test_rotation_factor.cc | 53 +
.../test/test_rotation_factor.test | 20 +
.../test/test_rotation_factor_adder.cc | 153 ++
.../test/test_rotation_factor_adder.test | 20 +
.../ground_truth_localizer/CMakeLists.txt | 38 +
.../ground_truth_localizer_nodelet.h | 72 +
.../include/ground_truth_localizer/twist.h | 30 +
.../ground_truth_localizer/utilities.h | 37 +
.../launch/ground_truth_localizer.launch | 27 +
.../nodelet_plugins.xml | 11 +
.../ground_truth_localizer/package.xml | 26 +
localization/ground_truth_localizer/readme.md | 5 +
.../src/ground_truth_localizer_nodelet.cc | 90 ++
.../ground_truth_localizer/src/utilities.cc | 52 +
localization/imu_augmentor/CMakeLists.txt | 37 +
.../include/imu_augmentor/imu_augmentor.h | 38 +
.../imu_augmentor/imu_augmentor_nodelet.h | 70 +
.../imu_augmentor/imu_augmentor_params.h | 29 +
.../imu_augmentor/imu_augmentor_wrapper.h | 69 +
.../imu_augmentor/launch/imu_augmentor.launch | 27 +
.../imu_augmentor/nodelet_plugins.xml | 11 +
localization/imu_augmentor/package.xml | 28 +
localization/imu_augmentor/readme.md | 16 +
.../imu_augmentor/src/imu_augmentor.cc | 53 +
.../src/imu_augmentor_nodelet.cc | 118 ++
.../src/imu_augmentor_wrapper.cc | 151 ++
localization/imu_integration/CMakeLists.txt | 31 +
.../butterworth_lowpass_filter.h | 43 +
.../butterworth_lowpass_filter_3rd_order.h | 45 +
.../butterworth_lowpass_filter_5th_order.h | 43 +
.../butterworth_lowpass_filter_5th_order_05.h | 43 +
.../butterworth_lowpass_filter_5th_order_1.h | 43 +
.../include/imu_integration/filter.h | 31 +
.../include/imu_integration/identity_filter.h | 33 +
.../include/imu_integration/imu_filter.h | 51 +
.../imu_integration/imu_filter_params.h | 30 +
.../include/imu_integration/imu_integrator.h | 83 ++
.../imu_integration/imu_integrator_params.h | 43 +
.../imu_integration/latest_imu_integrator.h | 48 +
.../latest_imu_integrator_params.h | 32 +
.../include/imu_integration/utilities.h | 58 +
localization/imu_integration/package.xml | 17 +
localization/imu_integration/readme.md | 14 +
.../src/butterworth_lowpass_filter.cc | 63 +
.../butterworth_lowpass_filter_3rd_order.cc | 62 +
.../butterworth_lowpass_filter_5th_order.cc | 63 +
...butterworth_lowpass_filter_5th_order_05.cc | 65 +
.../butterworth_lowpass_filter_5th_order_1.cc | 64 +
.../imu_integration/src/identity_filter.cc | 26 +
.../imu_integration/src/imu_filter.cc | 100 ++
.../imu_integration/src/imu_integrator.cc | 177 +++
.../src/latest_imu_integrator.cc | 60 +
localization/imu_integration/src/utilities.cc | 95 ++
.../launch/lk_optical_flow.launch | 4 +-
.../localization_common/CMakeLists.txt | 31 +
.../include/localization_common/averager.h | 72 +
.../localization_common/combined_nav_state.h | 58 +
.../combined_nav_state_covariances.h | 63 +
.../include/localization_common/logger.h | 164 +++
.../include/localization_common/rate_timer.h | 48 +
.../include/localization_common/ros_timer.h | 49 +
.../include/localization_common/time.h | 27 +
.../include/localization_common/timer.h | 52 +
.../include/localization_common/utilities.h | 128 ++
localization/localization_common/package.xml | 17 +
localization/localization_common/readme.md | 11 +
.../localization_common/src/averager.cc | 106 ++
.../src/combined_nav_state.cc | 29 +
.../src/combined_nav_state_covariances.cc | 62 +
.../localization_common/src/rate_timer.cc | 71 +
.../localization_common/src/ros_timer.cc | 41 +
localization/localization_common/src/time.cc | 23 +
localization/localization_common/src/timer.cc | 60 +
.../localization_common/src/utilities.cc | 158 +++
.../launch/localization_manager.launch | 2 +
.../localization_measurements/CMakeLists.txt | 31 +
.../localization_measurements/feature_point.h | 57 +
.../feature_points_measurement.h | 34 +
.../localization_measurements/image_point.h | 28 +
.../imu_measurement.h | 50 +
.../localization_measurements/map_point.h | 28 +
.../matched_projection.h | 40 +
.../matched_projections_measurement.h | 36 +
.../localization_measurements/measurement.h | 33 +
.../measurement_conversions.h | 42 +
.../localization_measurements/package.xml | 19 +
.../localization_measurements/readme.md | 5 +
.../src/measurement_conversions.cc | 69 +
.../launch/localization_node.launch | 2 +
.../marker_tracking/ros/src/marker_tracker.cc | 5 +-
localization/readme.md | 26 +-
.../include/sparse_mapping/tensor.h | 2 +-
localization/sparse_mapping/src/tensor.cc | 5 +-
management/executive/src/executive.cc | 3 +
management/sys_monitor/src/sys_monitor.cc | 6 +-
.../docker/astrobee_base_kinetic.Dockerfile | 7 +-
.../docker/astrobee_base_melodic.Dockerfile | 5 +-
scripts/docker/astrobee_kinetic.Dockerfile | 3 +-
scripts/docker/astrobee_melodic.Dockerfile | 3 +-
scripts/docker/build.sh | 21 +-
.../cross_compile/astrobee_cross.Dockerfile | 16 -
.../cross_compile/astrobee_debian.Dockerfile | 39 +
.../docker/cross_compile/debian_compile.sh | 55 +
scripts/docker/readme.md | 32 +-
.../docker/test_astrobee_kinetic.Dockerfile | 2 +-
.../docker/test_astrobee_melodic.Dockerfile | 2 +-
scripts/setup/debians/.gitignore | 2 +
scripts/setup/debians/build_gtsam.sh | 32 +
.../setup/debians/build_install_debians.sh | 6 +
.../debians/build_install_debians_18_04.sh | 6 +
scripts/setup/debians/gtsam/changelog | 5 +
scripts/setup/debians/gtsam/compat | 1 +
scripts/setup/debians/gtsam/control | 18 +
scripts/setup/debians/gtsam/copyright | 31 +
scripts/setup/debians/gtsam/libgtsam-dev.dirs | 2 +
.../setup/debians/gtsam/libgtsam-dev.install | 2 +
scripts/setup/debians/gtsam/libgtsam.dirs | 1 +
scripts/setup/debians/gtsam/libgtsam.install | 1 +
scripts/setup/debians/gtsam/rules | 26 +
scripts/setup/debians/gtsam/source/format | 1 +
scripts/setup/packages_base.lst | 2 +
scripts/setup/packages_base_18.lst | 2 +
scripts/teleop/run_estimate_bias.sh | 20 +
scripts/teleop/run_reset_localization.sh | 20 +
shared/ff_util/include/ff_util/ff_faults.h | 4 +-
shared/ff_util/include/ff_util/ff_names.h | 13 +-
shared/ff_util/launch/ff_nodelet.launch | 3 +-
shared/jsonloader/src/command_repo.cc | 3 +-
shared/msg_conversions/CMakeLists.txt | 5 +
.../include/msg_conversions/msg_conversions.h | 127 +-
shared/msg_conversions/src/msg_conversions.cc | 151 +-
simulation/CMakeLists.txt | 1 +
.../gazebo_sensor_plugin_ar_tags.cc | 173 +--
.../gazebo_sensor_plugin_optical_flow.cc | 3 +-
.../gazebo_sensor_plugin_sci_cam.cc | 4 +-
.../gazebo_sensor_plugin_sparse_map.cc | 3 +-
submodules/platform | 2 +-
tools/CMakeLists.txt | 3 +
tools/ekf_bag/scripts/bag_sweep.py | 26 +
tools/ekf_bag/scripts/ekf_graph.py | 18 +-
tools/ekf_bag/scripts/test_ekf_graph.py | 30 +-
tools/ekf_bag/src/ekf_bag.cc | 46 +-
tools/ekf_bag/src/ekf_bag_csv.cc | 4 +
.../scripts/communications/com_manager.py | 4 +
.../scripts/communications/data_support.py | 6 +
.../scripts/communications/dds_support.py | 12 +-
.../dds_types/BaseDDSProfile.xml | 30 +
.../dds_types/PositionSample.xml | 29 +
tools/gnc_visualizer/scripts/plot_types.py | 19 +-
tools/gnc_visualizer/scripts/visualizer.py | 18 +-
tools/graph_bag/CMakeLists.txt | 39 +
.../include/graph_bag/bag_imu_filterer.h | 44 +
tools/graph_bag/include/graph_bag/graph_bag.h | 71 +
.../include/graph_bag/graph_bag_params.h | 37 +
.../graph_bag/graph_localizer_simulator.h | 58 +
.../graph_localizer_simulator_params.h | 27 +
.../graph_bag/live_measurement_simulator.h | 80 ++
.../live_measurement_simulator_params.h | 40 +
.../include/graph_bag/message_buffer.h | 61 +
.../include/graph_bag/message_buffer_params.h | 30 +
.../include/graph_bag/parameter_reader.h | 38 +
.../graph_bag/sparse_mapping_pose_adder.h | 45 +
tools/graph_bag/include/graph_bag/utilities.h | 38 +
tools/graph_bag/package.xml | 29 +
tools/graph_bag/readme.md | 33 +
tools/graph_bag/scripts/average_results.py | 59 +
.../scripts/bag_and_parameter_sweep.py | 104 ++
tools/graph_bag/scripts/bag_sweep.py | 109 ++
tools/graph_bag/scripts/bag_sweep_main.py | 40 +
.../graph_bag/scripts/check_bags_for_gaps.py | 38 +
tools/graph_bag/scripts/config_creator.py | 50 +
tools/graph_bag/scripts/imu_analyzer.py | 202 +++
tools/graph_bag/scripts/imu_analyzer_main.py | 41 +
tools/graph_bag/scripts/imu_measurements.py | 33 +
tools/graph_bag/scripts/loc_states.py | 57 +
tools/graph_bag/scripts/merge_bags.py | 65 +
.../scripts/multiprocessing_helpers.py | 32 +
tools/graph_bag/scripts/orientations.py | 31 +
tools/graph_bag/scripts/parameter_sweep.py | 170 +++
.../scripts/plot_bag_sweep_results.py | 130 ++
tools/graph_bag/scripts/plot_helpers.py | 80 ++
.../scripts/plot_parameter_sweep_results.py | 82 ++
tools/graph_bag/scripts/plot_results.py | 412 ++++++
tools/graph_bag/scripts/plot_results_main.py | 36 +
tools/graph_bag/scripts/poses.py | 47 +
tools/graph_bag/scripts/rmse_utilities.py | 72 +
.../graph_bag/scripts/test_rmse_utilities.py | 172 +++
tools/graph_bag/scripts/utilities.py | 108 ++
tools/graph_bag/scripts/vector3d.py | 25 +
tools/graph_bag/scripts/vector3ds.py | 45 +
tools/graph_bag/src/bag_imu_filterer.cc | 74 +
tools/graph_bag/src/graph_bag.cc | 187 +++
.../src/graph_localizer_simulator.cc | 74 +
.../src/live_measurement_simulator.cc | 167 +++
tools/graph_bag/src/parameter_reader.cc | 57 +
.../src/sparse_mapping_pose_adder.cc | 64 +
tools/graph_bag/src/utilities.cc | 86 ++
tools/graph_bag/tools/run_bag_imu_filterer.cc | 69 +
tools/graph_bag/tools/run_graph_bag.cc | 119 ++
.../tools/run_sparse_mapping_pose_adder.cc | 85 ++
tools/imu_bias_tester/CMakeLists.txt | 37 +
.../include/imu_bias_tester/imu_bias_tester.h | 52 +
.../imu_bias_tester/imu_bias_tester_nodelet.h | 56 +
.../imu_bias_tester/imu_bias_tester_wrapper.h | 44 +
.../launch/imu_bias_tester.launch | 27 +
tools/imu_bias_tester/nodelet_plugins.xml | 11 +
tools/imu_bias_tester/package.xml | 28 +
tools/imu_bias_tester/readme.md | 11 +
tools/imu_bias_tester/src/imu_bias_tester.cc | 82 ++
.../src/imu_bias_tester_nodelet.cc | 72 +
.../src/imu_bias_tester_wrapper.cc | 54 +
.../localization_rviz_plugins/CMakeLists.txt | 40 +
.../nodelet_plugins.xml | 38 +
tools/localization_rviz_plugins/package.xml | 22 +
.../plugin_description.xml | 24 +
tools/localization_rviz_plugins/readme.md | 18 +
.../src/imu_augmentor_display.cc | 102 ++
.../src/imu_augmentor_display.h | 68 +
.../src/localization_graph_display.cc | 516 +++++++
.../src/localization_graph_display.h | 117 ++
.../src/localization_graph_panel.cc | 380 +++++
.../src/localization_graph_panel.h | 82 ++
.../src/pose_display.cc | 71 +
.../src/pose_display.h | 63 +
.../src/slider_property.cc | 44 +
.../src/slider_property.h | 54 +
.../src/sparse_mapping_display.cc | 96 ++
.../src/sparse_mapping_display.h | 58 +
.../src/utilities.cc | 100 ++
.../localization_rviz_plugins/src/utilities.h | 62 +
tools/readme.md | 12 +-
345 files changed, 20519 insertions(+), 1039 deletions(-)
create mode 100644 astrobee/config/graph_localizer.config
create mode 100644 astrobee/config/tools/graph_bag.config
create mode 100644 astrobee/launch/offline_localization/loc_only.launch
create mode 100644 astrobee/launch/offline_localization/loc_rviz.launch
create mode 100644 astrobee/launch/offline_localization/localization_from_bag.launch
create mode 100644 astrobee/launch/offline_localization/record_localization.launch
create mode 100644 astrobee/launch/offline_localization/replay_localization.launch
delete mode 100644 astrobee/launch/replay.launch
create mode 100644 astrobee/resources/rviz/loc_granite.rviz
create mode 100644 astrobee/resources/rviz/loc_iss.rviz
create mode 100644 communications/dds_ros_bridge/include/dds_ros_bridge/rapid_position_provider_ros_pose_helper.h
create mode 100644 communications/dds_ros_bridge/include/dds_ros_bridge/ros_pose_rapid_position.h
create mode 100644 communications/dds_ros_bridge/src/rapid_position_provider_ros_pose_helper.cc
create mode 100644 communications/dds_ros_bridge/src/ros_pose_rapid_position.cc
create mode 100644 communications/ff_msgs/msg/GraphState.msg
create mode 100644 communications/ff_msgs/msg/LocalizationGraph.msg
create mode 100644 localization/graph_localizer/CMakeLists.txt
create mode 100644 localization/graph_localizer/include/graph_localizer/calibration_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/cumulative_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/factor_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/factor_to_add.h
create mode 100644 localization/graph_localizer/include/graph_localizer/feature_counts.h
create mode 100644 localization/graph_localizer/include/graph_localizer/feature_track.h
create mode 100644 localization/graph_localizer/include/graph_localizer/feature_tracker.h
create mode 100644 localization/graph_localizer/include/graph_localizer/feature_tracker_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_action.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_initializer_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_localizer.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_localizer_initializer.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_localizer_nodelet.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_localizer_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_localizer_wrapper.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_stats.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_values.h
create mode 100644 localization/graph_localizer/include/graph_localizer/graph_values_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/key_info.h
create mode 100644 localization/graph_localizer/include/graph_localizer/loc_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/loc_factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/loc_pose_factor.h
create mode 100644 localization/graph_localizer/include/graph_localizer/loc_projection_factor.h
create mode 100644 localization/graph_localizer/include/graph_localizer/noise_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/parameter_reader.h
create mode 100644 localization/graph_localizer/include/graph_localizer/pose_rotation_factor.h
create mode 100644 localization/graph_localizer/include/graph_localizer/projection_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/projection_factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/robust_smart_projection_pose_factor.h
create mode 100644 localization/graph_localizer/include/graph_localizer/rotation_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/rotation_factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/sanity_checker.h
create mode 100644 localization/graph_localizer/include/graph_localizer/sanity_checker_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/serialization.h
create mode 100644 localization/graph_localizer/include/graph_localizer/smart_projection_cumulative_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/smart_projection_factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/standstill_factor_adder.h
create mode 100644 localization/graph_localizer/include/graph_localizer/standstill_factor_adder_params.h
create mode 100644 localization/graph_localizer/include/graph_localizer/utilities.h
create mode 100644 localization/graph_localizer/launch/graph_localizer.launch
create mode 100644 localization/graph_localizer/nodelet_plugins.xml
create mode 100644 localization/graph_localizer/package.xml
create mode 100644 localization/graph_localizer/readme.md
create mode 100644 localization/graph_localizer/src/feature_tracker.cc
create mode 100644 localization/graph_localizer/src/graph_localizer.cc
create mode 100644 localization/graph_localizer/src/graph_localizer_intializer.cc
create mode 100644 localization/graph_localizer/src/graph_localizer_nodelet.cc
create mode 100644 localization/graph_localizer/src/graph_localizer_wrapper.cc
create mode 100644 localization/graph_localizer/src/graph_stats.cc
create mode 100644 localization/graph_localizer/src/graph_values.cc
create mode 100644 localization/graph_localizer/src/loc_factor_adder.cc
create mode 100644 localization/graph_localizer/src/parameter_reader.cc
create mode 100644 localization/graph_localizer/src/projection_factor_adder.cc
create mode 100644 localization/graph_localizer/src/rotation_factor_adder.cc
create mode 100644 localization/graph_localizer/src/sanity_checker.cc
create mode 100644 localization/graph_localizer/src/serialization.cc
create mode 100644 localization/graph_localizer/src/smart_projection_cumulative_factor_adder.cc
create mode 100644 localization/graph_localizer/src/standstill_factor_adder.cc
create mode 100644 localization/graph_localizer/src/utilities.cc
create mode 100644 localization/graph_localizer/test/test_rotation_factor.cc
create mode 100644 localization/graph_localizer/test/test_rotation_factor.test
create mode 100644 localization/graph_localizer/test/test_rotation_factor_adder.cc
create mode 100644 localization/graph_localizer/test/test_rotation_factor_adder.test
create mode 100644 localization/ground_truth_localizer/CMakeLists.txt
create mode 100644 localization/ground_truth_localizer/include/ground_truth_localizer/ground_truth_localizer_nodelet.h
create mode 100644 localization/ground_truth_localizer/include/ground_truth_localizer/twist.h
create mode 100644 localization/ground_truth_localizer/include/ground_truth_localizer/utilities.h
create mode 100644 localization/ground_truth_localizer/launch/ground_truth_localizer.launch
create mode 100644 localization/ground_truth_localizer/nodelet_plugins.xml
create mode 100644 localization/ground_truth_localizer/package.xml
create mode 100644 localization/ground_truth_localizer/readme.md
create mode 100644 localization/ground_truth_localizer/src/ground_truth_localizer_nodelet.cc
create mode 100644 localization/ground_truth_localizer/src/utilities.cc
create mode 100644 localization/imu_augmentor/CMakeLists.txt
create mode 100644 localization/imu_augmentor/include/imu_augmentor/imu_augmentor.h
create mode 100644 localization/imu_augmentor/include/imu_augmentor/imu_augmentor_nodelet.h
create mode 100644 localization/imu_augmentor/include/imu_augmentor/imu_augmentor_params.h
create mode 100644 localization/imu_augmentor/include/imu_augmentor/imu_augmentor_wrapper.h
create mode 100644 localization/imu_augmentor/launch/imu_augmentor.launch
create mode 100644 localization/imu_augmentor/nodelet_plugins.xml
create mode 100644 localization/imu_augmentor/package.xml
create mode 100644 localization/imu_augmentor/readme.md
create mode 100644 localization/imu_augmentor/src/imu_augmentor.cc
create mode 100644 localization/imu_augmentor/src/imu_augmentor_nodelet.cc
create mode 100644 localization/imu_augmentor/src/imu_augmentor_wrapper.cc
create mode 100644 localization/imu_integration/CMakeLists.txt
create mode 100644 localization/imu_integration/include/imu_integration/butterworth_lowpass_filter.h
create mode 100644 localization/imu_integration/include/imu_integration/butterworth_lowpass_filter_3rd_order.h
create mode 100644 localization/imu_integration/include/imu_integration/butterworth_lowpass_filter_5th_order.h
create mode 100644 localization/imu_integration/include/imu_integration/butterworth_lowpass_filter_5th_order_05.h
create mode 100644 localization/imu_integration/include/imu_integration/butterworth_lowpass_filter_5th_order_1.h
create mode 100644 localization/imu_integration/include/imu_integration/filter.h
create mode 100644 localization/imu_integration/include/imu_integration/identity_filter.h
create mode 100644 localization/imu_integration/include/imu_integration/imu_filter.h
create mode 100644 localization/imu_integration/include/imu_integration/imu_filter_params.h
create mode 100644 localization/imu_integration/include/imu_integration/imu_integrator.h
create mode 100644 localization/imu_integration/include/imu_integration/imu_integrator_params.h
create mode 100644 localization/imu_integration/include/imu_integration/latest_imu_integrator.h
create mode 100644 localization/imu_integration/include/imu_integration/latest_imu_integrator_params.h
create mode 100644 localization/imu_integration/include/imu_integration/utilities.h
create mode 100644 localization/imu_integration/package.xml
create mode 100644 localization/imu_integration/readme.md
create mode 100644 localization/imu_integration/src/butterworth_lowpass_filter.cc
create mode 100644 localization/imu_integration/src/butterworth_lowpass_filter_3rd_order.cc
create mode 100644 localization/imu_integration/src/butterworth_lowpass_filter_5th_order.cc
create mode 100644 localization/imu_integration/src/butterworth_lowpass_filter_5th_order_05.cc
create mode 100644 localization/imu_integration/src/butterworth_lowpass_filter_5th_order_1.cc
create mode 100644 localization/imu_integration/src/identity_filter.cc
create mode 100644 localization/imu_integration/src/imu_filter.cc
create mode 100644 localization/imu_integration/src/imu_integrator.cc
create mode 100644 localization/imu_integration/src/latest_imu_integrator.cc
create mode 100644 localization/imu_integration/src/utilities.cc
create mode 100644 localization/localization_common/CMakeLists.txt
create mode 100644 localization/localization_common/include/localization_common/averager.h
create mode 100644 localization/localization_common/include/localization_common/combined_nav_state.h
create mode 100644 localization/localization_common/include/localization_common/combined_nav_state_covariances.h
create mode 100644 localization/localization_common/include/localization_common/logger.h
create mode 100644 localization/localization_common/include/localization_common/rate_timer.h
create mode 100644 localization/localization_common/include/localization_common/ros_timer.h
create mode 100644 localization/localization_common/include/localization_common/time.h
create mode 100644 localization/localization_common/include/localization_common/timer.h
create mode 100644 localization/localization_common/include/localization_common/utilities.h
create mode 100644 localization/localization_common/package.xml
create mode 100644 localization/localization_common/readme.md
create mode 100644 localization/localization_common/src/averager.cc
create mode 100644 localization/localization_common/src/combined_nav_state.cc
create mode 100644 localization/localization_common/src/combined_nav_state_covariances.cc
create mode 100644 localization/localization_common/src/rate_timer.cc
create mode 100644 localization/localization_common/src/ros_timer.cc
create mode 100644 localization/localization_common/src/time.cc
create mode 100644 localization/localization_common/src/timer.cc
create mode 100644 localization/localization_common/src/utilities.cc
create mode 100644 localization/localization_measurements/CMakeLists.txt
create mode 100644 localization/localization_measurements/include/localization_measurements/feature_point.h
create mode 100644 localization/localization_measurements/include/localization_measurements/feature_points_measurement.h
create mode 100644 localization/localization_measurements/include/localization_measurements/image_point.h
create mode 100644 localization/localization_measurements/include/localization_measurements/imu_measurement.h
create mode 100644 localization/localization_measurements/include/localization_measurements/map_point.h
create mode 100644 localization/localization_measurements/include/localization_measurements/matched_projection.h
create mode 100644 localization/localization_measurements/include/localization_measurements/matched_projections_measurement.h
create mode 100644 localization/localization_measurements/include/localization_measurements/measurement.h
create mode 100644 localization/localization_measurements/include/localization_measurements/measurement_conversions.h
create mode 100644 localization/localization_measurements/package.xml
create mode 100644 localization/localization_measurements/readme.md
create mode 100644 localization/localization_measurements/src/measurement_conversions.cc
create mode 100644 scripts/docker/cross_compile/astrobee_debian.Dockerfile
create mode 100755 scripts/docker/cross_compile/debian_compile.sh
create mode 100755 scripts/setup/debians/build_gtsam.sh
create mode 100644 scripts/setup/debians/gtsam/changelog
create mode 100644 scripts/setup/debians/gtsam/compat
create mode 100644 scripts/setup/debians/gtsam/control
create mode 100644 scripts/setup/debians/gtsam/copyright
create mode 100644 scripts/setup/debians/gtsam/libgtsam-dev.dirs
create mode 100644 scripts/setup/debians/gtsam/libgtsam-dev.install
create mode 100644 scripts/setup/debians/gtsam/libgtsam.dirs
create mode 100644 scripts/setup/debians/gtsam/libgtsam.install
create mode 100755 scripts/setup/debians/gtsam/rules
create mode 100644 scripts/setup/debians/gtsam/source/format
create mode 100755 scripts/teleop/run_estimate_bias.sh
create mode 100755 scripts/teleop/run_reset_localization.sh
create mode 100644 tools/gnc_visualizer/scripts/communications/dds_types/PositionSample.xml
create mode 100644 tools/graph_bag/CMakeLists.txt
create mode 100644 tools/graph_bag/include/graph_bag/bag_imu_filterer.h
create mode 100644 tools/graph_bag/include/graph_bag/graph_bag.h
create mode 100644 tools/graph_bag/include/graph_bag/graph_bag_params.h
create mode 100644 tools/graph_bag/include/graph_bag/graph_localizer_simulator.h
create mode 100644 tools/graph_bag/include/graph_bag/graph_localizer_simulator_params.h
create mode 100644 tools/graph_bag/include/graph_bag/live_measurement_simulator.h
create mode 100644 tools/graph_bag/include/graph_bag/live_measurement_simulator_params.h
create mode 100644 tools/graph_bag/include/graph_bag/message_buffer.h
create mode 100644 tools/graph_bag/include/graph_bag/message_buffer_params.h
create mode 100644 tools/graph_bag/include/graph_bag/parameter_reader.h
create mode 100644 tools/graph_bag/include/graph_bag/sparse_mapping_pose_adder.h
create mode 100644 tools/graph_bag/include/graph_bag/utilities.h
create mode 100644 tools/graph_bag/package.xml
create mode 100644 tools/graph_bag/readme.md
create mode 100755 tools/graph_bag/scripts/average_results.py
create mode 100755 tools/graph_bag/scripts/bag_and_parameter_sweep.py
create mode 100644 tools/graph_bag/scripts/bag_sweep.py
create mode 100755 tools/graph_bag/scripts/bag_sweep_main.py
create mode 100755 tools/graph_bag/scripts/check_bags_for_gaps.py
create mode 100644 tools/graph_bag/scripts/config_creator.py
create mode 100644 tools/graph_bag/scripts/imu_analyzer.py
create mode 100755 tools/graph_bag/scripts/imu_analyzer_main.py
create mode 100644 tools/graph_bag/scripts/imu_measurements.py
create mode 100644 tools/graph_bag/scripts/loc_states.py
create mode 100755 tools/graph_bag/scripts/merge_bags.py
create mode 100644 tools/graph_bag/scripts/multiprocessing_helpers.py
create mode 100644 tools/graph_bag/scripts/orientations.py
create mode 100755 tools/graph_bag/scripts/parameter_sweep.py
create mode 100755 tools/graph_bag/scripts/plot_bag_sweep_results.py
create mode 100644 tools/graph_bag/scripts/plot_helpers.py
create mode 100755 tools/graph_bag/scripts/plot_parameter_sweep_results.py
create mode 100644 tools/graph_bag/scripts/plot_results.py
create mode 100755 tools/graph_bag/scripts/plot_results_main.py
create mode 100644 tools/graph_bag/scripts/poses.py
create mode 100644 tools/graph_bag/scripts/rmse_utilities.py
create mode 100644 tools/graph_bag/scripts/test_rmse_utilities.py
create mode 100644 tools/graph_bag/scripts/utilities.py
create mode 100644 tools/graph_bag/scripts/vector3d.py
create mode 100644 tools/graph_bag/scripts/vector3ds.py
create mode 100644 tools/graph_bag/src/bag_imu_filterer.cc
create mode 100644 tools/graph_bag/src/graph_bag.cc
create mode 100644 tools/graph_bag/src/graph_localizer_simulator.cc
create mode 100644 tools/graph_bag/src/live_measurement_simulator.cc
create mode 100644 tools/graph_bag/src/parameter_reader.cc
create mode 100644 tools/graph_bag/src/sparse_mapping_pose_adder.cc
create mode 100644 tools/graph_bag/src/utilities.cc
create mode 100644 tools/graph_bag/tools/run_bag_imu_filterer.cc
create mode 100644 tools/graph_bag/tools/run_graph_bag.cc
create mode 100644 tools/graph_bag/tools/run_sparse_mapping_pose_adder.cc
create mode 100644 tools/imu_bias_tester/CMakeLists.txt
create mode 100644 tools/imu_bias_tester/include/imu_bias_tester/imu_bias_tester.h
create mode 100644 tools/imu_bias_tester/include/imu_bias_tester/imu_bias_tester_nodelet.h
create mode 100644 tools/imu_bias_tester/include/imu_bias_tester/imu_bias_tester_wrapper.h
create mode 100644 tools/imu_bias_tester/launch/imu_bias_tester.launch
create mode 100644 tools/imu_bias_tester/nodelet_plugins.xml
create mode 100644 tools/imu_bias_tester/package.xml
create mode 100644 tools/imu_bias_tester/readme.md
create mode 100644 tools/imu_bias_tester/src/imu_bias_tester.cc
create mode 100644 tools/imu_bias_tester/src/imu_bias_tester_nodelet.cc
create mode 100644 tools/imu_bias_tester/src/imu_bias_tester_wrapper.cc
create mode 100644 tools/localization_rviz_plugins/CMakeLists.txt
create mode 100644 tools/localization_rviz_plugins/nodelet_plugins.xml
create mode 100644 tools/localization_rviz_plugins/package.xml
create mode 100644 tools/localization_rviz_plugins/plugin_description.xml
create mode 100644 tools/localization_rviz_plugins/readme.md
create mode 100644 tools/localization_rviz_plugins/src/imu_augmentor_display.cc
create mode 100644 tools/localization_rviz_plugins/src/imu_augmentor_display.h
create mode 100644 tools/localization_rviz_plugins/src/localization_graph_display.cc
create mode 100644 tools/localization_rviz_plugins/src/localization_graph_display.h
create mode 100644 tools/localization_rviz_plugins/src/localization_graph_panel.cc
create mode 100644 tools/localization_rviz_plugins/src/localization_graph_panel.h
create mode 100644 tools/localization_rviz_plugins/src/pose_display.cc
create mode 100644 tools/localization_rviz_plugins/src/pose_display.h
create mode 100644 tools/localization_rviz_plugins/src/slider_property.cc
create mode 100644 tools/localization_rviz_plugins/src/slider_property.h
create mode 100644 tools/localization_rviz_plugins/src/sparse_mapping_display.cc
create mode 100644 tools/localization_rviz_plugins/src/sparse_mapping_display.h
create mode 100644 tools/localization_rviz_plugins/src/utilities.cc
create mode 100644 tools/localization_rviz_plugins/src/utilities.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c287591fc9..ea7c9db632 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@
cmake_minimum_required(VERSION 3.0)
project(Astrobee)
-set(ASTROBEE_VERSION 0.13.0)
+set(ASTROBEE_VERSION 0.14.0)
# Define our options
option(USE_CCACHE
@@ -69,6 +69,10 @@ option(ENABLE_VIVE_SOLVER
option(ENABLE_INTEGRATION_TESTING
"Build the integration tests if tests are active."
ON)
+option(BUILD_LOC_RVIZ_PLUGINS
+ "Build the localization rviz plugins."
+ ON)
+
if ( "${CMAKE_VERSION}" VERSION_GREATER 3.0.0 )
cmake_policy(SET CMP0045 OLD)
@@ -212,7 +216,7 @@ endif (NOT PROTOBUF_PROTOC_EXECUTABLE)
find_package(Ceres REQUIRED)
-find_package(Boost 1.54.0 QUIET REQUIRED COMPONENTS filesystem system iostreams thread program_options)
+find_package(Boost 1.54.0 QUIET REQUIRED COMPONENTS filesystem system iostreams thread program_options timer)
find_package(Eigen3 REQUIRED)
find_package(ZLIB)
find_package(Luajit20 REQUIRED)
@@ -239,6 +243,7 @@ set(OpenCV_LIBRARIES ${OpenCV_LIBS})
find_package(dbow2 REQUIRED)
find_package(Alvar REQUIRED)
+find_package(GTSAM REQUIRED)
find_package(OpenMVG QUIET REQUIRED)
find_package(JsonCpp REQUIRED)
find_package(FFMPEG QUIET) # Optional
@@ -261,6 +266,15 @@ if (NOT USE_CTC) # pkg-config needs extra work to be used for cross compile
endif (YAMLCPP_FOUND)
endif (NOT USE_CTC)
+if(ENABLE_GOOGLE_PROF)
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-as-needed -lprofiler -Wl,--as-needed")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG")
+endif()
+
+if(USE_CTC)
+ set(BUILD_LOC_RVIZ_PLUGINS OFF)
+endif()
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-local-typedefs -Wno-packed-bitfield-compat -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-local-typedefs -Wno-packed-bitfield-compat -std=c++11")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
@@ -294,7 +308,8 @@ if (USE_CTC)
endif (USE_CTC)
if (USE_ROS)
set(ENV{ROS_LANG_DISABLE} "genlisp:gennodejs:geneus:$ENV{ROS_LANG_DISABLE}")
- find_package(catkin2 COMPONENTS roscpp message_generation std_msgs geometry_msgs sensor_msgs cv_bridge image_transport tf tf2 tf2_ros rosbag nodelet)
+ find_package(catkin2 COMPONENTS roscpp message_generation std_msgs geometry_msgs sensor_msgs cv_bridge image_transport tf tf2 tf2_ros rosbag nodelet rviz)
+ find_package(Qt5 ${rviz_QT_VERSION} REQUIRED Core Widgets)
if (IS_BAMBOO_BUILD)
include(BambooFix)
diff --git a/RELEASE.md b/RELEASE.md
index 9386a2e510..ca0197c468 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,5 +1,14 @@
# Releases
+## Release 0.14.0
+
+ * Added graph_localizer package
+ * Added supporting packages for graph localizer including imu_augmetor, imu_integation, localization_common, localization_measurements
+ * Added tools for graph localizer including graph_bag and imu_bias_tester
+ * Added rviz plugins for graph localizer and associated packages in localization_rviz_plugins
+ * Added gtsam debian
+ Note: Perching does not work in this release, use another version for this.
+
## Release 0.13.0
* Multiple updates to documentation, doxygen is exported to github pages
diff --git a/astrobee.doxyfile b/astrobee.doxyfile
index 6f80ecb5a9..4931b43e07 100644
--- a/astrobee.doxyfile
+++ b/astrobee.doxyfile
@@ -39,7 +39,7 @@ PROJECT_NAME = "NASA Astrobee Robot Software"
# control system is used.
-PROJECT_NUMBER = 0.13.0
+PROJECT_NUMBER = 0.14.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/astrobee/commands/freeFlyerPlanSchema.json b/astrobee/commands/freeFlyerPlanSchema.json
index 9a5cc6452b..5097536bd0 100644
--- a/astrobee/commands/freeFlyerPlanSchema.json
+++ b/astrobee/commands/freeFlyerPlanSchema.json
@@ -112,7 +112,8 @@
["EkfState", "EkfState"],
["GncState", "GncState"],
["PmcCmdState", "PmcCmdState"],
- ["Position", "Position"]
+ ["Position", "Position"],
+ ["SparseMappingPose", "SparseMappingPose"]
]
},
diff --git a/astrobee/config/communications/dds_ros_bridge.config b/astrobee/config/communications/dds_ros_bridge.config
index 87bc29001b..ad2aa479d7 100644
--- a/astrobee/config/communications/dds_ros_bridge.config
+++ b/astrobee/config/communications/dds_ros_bridge.config
@@ -148,6 +148,16 @@ pub_topic_RLRLS = ""
use_RORP = true
pub_topic_RORP = ""
+-- ros_sparse_mapping_pose_rapid_position => RSMPRP --
+use_RSMPRP = true
+pub_topic_RSMPRP = "-sparse"
+use_rate_RSMPRP = true
+
+-- ros_vive_pose_rapid_position => RVPRP --
+use_RVPRP = false
+pub_topic_RVPRP = "-vive"
+use_rate_RVPRP = false
+
-- ros_payload_power_state_rapid_payload_power_state => RPPSRPPS --
use_RPPSRPPS = true
pub_topic_RPPSRPPS = ""
@@ -175,6 +185,7 @@ ekf_state_rate = 0
gnc_state_rate = 0
pmc_command_rate = 0
position_rate = 30
+sparse_mapping_pose_rate = 0
battery_time_round_to_multiple = 10;
diff --git a/astrobee/config/faults.config b/astrobee/config/faults.config
index c1c5d23710..f78681e217 100644
--- a/astrobee/config/faults.config
+++ b/astrobee/config/faults.config
@@ -18,59 +18,59 @@
-- Autogenerated from FMECA! DO NOT CHANGE!
arm = {
- {id=61, key="INITIALIZATION_FAILED", description="Arm Initialization Failed"},
+ {id=63, key="INITIALIZATION_FAILED", description="Arm Initialization Failed"},
}
all = {
- {id=85, key="UNKNOWN_FAULT_KEY", description="Unknown Fault Key"},
+ {id=87, key="UNKNOWN_FAULT_KEY", description="Unknown Fault Key"},
}
access_control = {
- {id=70, key="INITIALIZATION_FAILED", description="Access Control Initialization Failed"},
+ {id=72, key="INITIALIZATION_FAILED", description="Access Control Initialization Failed"},
}
executive = {
- {id=68, key="INITIALIZATION_FAILED", description="Executive Initialization Failed"},
+ {id=70, key="INITIALIZATION_FAILED", description="Executive Initialization Failed"},
}
data_bagger = {
- {id=83, key="INITIALIZATION_FAILED", description="Data Bagger Initialization Failed"},
+ {id=85, key="INITIALIZATION_FAILED", description="Data Bagger Initialization Failed"},
}
llp_cpu_mem_monitor = {
- {id=72, key="INITIALIZATION_FAILED", description="LLP CPU Monitor Initialization Failed"},
- {id=86, key="LOAD_TOO_HIGH", description="LLP CPU load too high"},
- {id=97, key="MEMORY_USAGE_TOO_HIGH", description="LLP Memory usage too high"},
- {id=100, key="TEMPERATURE_TOO_HIGH", description="LLP Temperature too high"},
+ {id=74, key="INITIALIZATION_FAILED", description="LLP CPU Monitor Initialization Failed"},
+ {id=88, key="LOAD_TOO_HIGH", description="LLP CPU load too high"},
+ {id=99, key="MEMORY_USAGE_TOO_HIGH", description="LLP Memory usage too high"},
+ {id=102, key="TEMPERATURE_TOO_HIGH", description="LLP Temperature too high"},
}
llp_disk_monitor = {
- {id=75, key="INITIALIZATION_FAILED", description="LLP Disk Monitor Initialization Failed"},
- {id=89, key="DISK_CONFIG_INVALID", description="LLP Disk conifg not valid"},
- {id=91, key="DISK_USAGE_HIGH", description="LLP Disk usage getting high"},
- {id=94, key="DISK_USAGE_TOO_HIGH", description="LLP Disk usage too high"},
+ {id=77, key="INITIALIZATION_FAILED", description="LLP Disk Monitor Initialization Failed"},
+ {id=91, key="DISK_CONFIG_INVALID", description="LLP Disk conifg not valid"},
+ {id=93, key="DISK_USAGE_HIGH", description="LLP Disk usage getting high"},
+ {id=96, key="DISK_USAGE_TOO_HIGH", description="LLP Disk usage too high"},
}
image_sampler = {
- {id=81, key="INITIALIZATION_FAILED", description="Image Sampler Initialization Failed"},
+ {id=83, key="INITIALIZATION_FAILED", description="Image Sampler Initialization Failed"},
}
mlp_disk_monitor = {
- {id=76, key="INITIALIZATION_FAILED", description="MLP Disk Monitor Initialization Failed"},
- {id=90, key="DISK_CONFIG_INVALID", description="MLP Disk config not valid"},
- {id=92, key="DISK_USAGE_HIGH", description="MLP Disk usage getting high"},
- {id=95, key="DISK_USAGE_TOO_HIGH", description="MLP Disk usage too high"},
+ {id=78, key="INITIALIZATION_FAILED", description="MLP Disk Monitor Initialization Failed"},
+ {id=92, key="DISK_CONFIG_INVALID", description="MLP Disk config not valid"},
+ {id=94, key="DISK_USAGE_HIGH", description="MLP Disk usage getting high"},
+ {id=97, key="DISK_USAGE_TOO_HIGH", description="MLP Disk usage too high"},
}
mlp_cpu_mem_monitor = {
- {id=73, key="INITIALIZATION_FAILED", description="MLP CPU Monitor Initialization Failed"},
- {id=87, key="LOAD_TOO_HIGH", description="MLP CPU load too high"},
- {id=98, key="MEMORY_USAGE_TOO_HIGH", description="MLP Memory usage too high"},
- {id=101, key="TEMPERATURE_TOO_HIGH", description="MLP Temperature too high"},
+ {id=75, key="INITIALIZATION_FAILED", description="MLP CPU Monitor Initialization Failed"},
+ {id=89, key="LOAD_TOO_HIGH", description="MLP CPU load too high"},
+ {id=100, key="MEMORY_USAGE_TOO_HIGH", description="MLP Memory usage too high"},
+ {id=103, key="TEMPERATURE_TOO_HIGH", description="MLP Temperature too high"},
}
sys_monitor = {
- {id=105, key="TIME_DIFF_TOO_HIGH", description="Time difference between mlp and llp too high"},
+ {id=107, key="TIME_DIFF_TOO_HIGH", description="Time difference between mlp and llp too high"},
}
optical_flow_nodelet = {
@@ -86,29 +86,29 @@ handrail_detect = {
}
localization_manager = {
- {id=62, key="INITIALIZATION_FAILED", description="Localization Manager Initialization Failed"},
- {id=117, key="LOCALIZATION_PIPELINE_UNSTABLE", description="Localization pipeline is not producing registration or features."},
- {id=119, key="ESTIMATE_CONFIDENCE_TOO_LOW", description="Estimator confidence too low for too long"},
+ {id=64, key="INITIALIZATION_FAILED", description="Localization Manager Initialization Failed"},
+ {id=119, key="LOCALIZATION_PIPELINE_UNSTABLE", description="Localization pipeline is not producing registration or features."},
+ {id=121, key="ESTIMATE_CONFIDENCE_TOO_LOW", description="Estimator confidence too low for too long"},
}
dds_ros_bridge = {
- {id=71, key="INITIALIZATION_FAILED", description="DDS ROS Bridge Initialization Failed"},
+ {id=73, key="INITIALIZATION_FAILED", description="DDS ROS Bridge Initialization Failed"},
}
mapper = {
- {id=80, key="INITIALIZATION_FAILED", description="Mapper Initialization Failed"},
+ {id=82, key="INITIALIZATION_FAILED", description="Mapper Initialization Failed"},
}
planner_qp = {
- {id=78, key="INITIALIZATION_FAILED", description="QP Planner Initialization Failed"},
+ {id=80, key="INITIALIZATION_FAILED", description="QP Planner Initialization Failed"},
}
planner_trapezoidal = {
- {id=79, key="INITIALIZATION_FAILED", description="Trapezoidal Planner Initialization Failed"},
+ {id=81, key="INITIALIZATION_FAILED", description="Trapezoidal Planner Initialization Failed"},
}
choreographer = {
- {id=67, key="INITIALIZATION_FAILED", description="Choreographer Initialization Failed"},
+ {id=69, key="INITIALIZATION_FAILED", description="Choreographer Initialization Failed"},
}
laser = {
@@ -118,11 +118,11 @@ eps_driver = {
}
perching_arm = {
- {id=60, key="INITIALIZATION_FAILED", description="Perching Arm Initialization Failed"},
+ {id=62, key="INITIALIZATION_FAILED", description="Perching Arm Initialization Failed"},
}
framestore = {
- {id=82, key="INITIALIZATION_FAILED", description="Frame Store Initialization Failed"},
+ {id=84, key="INITIALIZATION_FAILED", description="Frame Store Initialization Failed"},
}
pmc_actuator = {
@@ -138,45 +138,48 @@ flashlight_aft = {
}
pico_driver = {
- {id=59, key="INITIALIZATION_FAILED", description="PicoFlexx Initialization Failed"},
- {id=124, key="NO_COMMUNICATION_HAZCAM", description="Unable to communicate with the Hazcam"},
+ {id=61, key="INITIALIZATION_FAILED", description="PicoFlexx Initialization Failed"},
+ {id=126, key="NO_COMMUNICATION_HAZCAM", description="Unable to communicate with the Hazcam"},
}
dock_cam = {
}
ctl = {
- {id=53, key="INITIALIZATION_FAILED", description="Control Initialization Failed"},
- {id=133, key="KINETIC_ENERGY_INCREASING", description="Kinetic energy increasing in stopping mode"},
+ {id=54, key="INITIALIZATION_FAILED", description="Control Initialization Failed"},
+ {id=135, key="KINETIC_ENERGY_INCREASING", description="Kinetic energy increasing in stopping mode"},
}
-ekf = {
- {id=54, key="INITIALIZATION_FAILED", description="EKF Initialization Failed"},
- {id=134, key="CONTROL_CYCLE_OVERRUN", description="Control Cycle Overrun"},
- {id=136, key="POSE_ESTIMATE_NON_PHYSICAL", description="Pose estimate non-physical"},
+imu_aug = {
+ {id=56, key="INITIALIZATION_FAILED", description="IMU Augmentor Initialization Failed"},
+}
+
+graph_loc = {
+ {id=55, key="INITIALIZATION_FAILED", description="Graph Localizer Initialization Failed"},
+ {id=137, key="POSE_ESTIMATE_NON_PHYSICAL", description="Pose estimate non-physical"},
}
fam = {
- {id=55, key="INITIALIZATION_FAILED", description="FAM Initialization Failed"},
+ {id=57, key="INITIALIZATION_FAILED", description="FAM Initialization Failed"},
}
speed_cam = {
{id=10, key="VELOCITY_TOO_HIGH", description="Velocity too high"},
- {id=56, key="INITIALIZATION_FAILED", description="Speedcam Initialization Failed"},
- {id=126, key="NO_COMMUNICATION_SPEEDCAM", description="Unable to communicate with the Speedcam"},
+ {id=58, key="INITIALIZATION_FAILED", description="Speedcam Initialization Failed"},
+ {id=128, key="NO_COMMUNICATION_SPEEDCAM", description="Unable to communicate with the Speedcam"},
}
epson_imu = {
- {id=112, key="IMU_ACCEL_ABOVE_LIMITS", description="IMU acceleration above limits"},
- {id=145, key="BAD_GYRO_DATA", description="IMU returns bad gyro data"},
- {id=146, key="IMU_OVERTEMP", description="IMU overtemp"},
- {id=147, key="SELF_TEST_FAULT_CODE", description="IMU Fault code - Self test"},
- {id=148, key="HARDWARE_ERROR_FAULT_CODE", description="IMU Fault code - Hardware error"},
- {id=150, key="BAD_ACCEL_DATA", description="IMU returns bad accel data"},
- {id=151, key="NO_IMU_DATA_PACKETS", description="Loss of data packets from IMU"},
+ {id=114, key="IMU_ACCEL_ABOVE_LIMITS", description="IMU acceleration above limits"},
+ {id=146, key="BAD_GYRO_DATA", description="IMU returns bad gyro data"},
+ {id=147, key="IMU_OVERTEMP", description="IMU overtemp"},
+ {id=148, key="SELF_TEST_FAULT_CODE", description="IMU Fault code - Self test"},
+ {id=149, key="HARDWARE_ERROR_FAULT_CODE", description="IMU Fault code - Hardware error"},
+ {id=151, key="BAD_ACCEL_DATA", description="IMU returns bad accel data"},
+ {id=152, key="NO_IMU_DATA_PACKETS", description="Loss of data packets from IMU"},
}
dock = {
- {id=84, key="INITIALIZATION_FAILED", description="Docker Initialization Failed"},
+ {id=86, key="INITIALIZATION_FAILED", description="Docker Initialization Failed"},
}
diff --git a/astrobee/config/graph_localizer.config b/astrobee/config/graph_localizer.config
new file mode 100644
index 0000000000..8820bab93b
--- /dev/null
+++ b/astrobee/config/graph_localizer.config
@@ -0,0 +1,150 @@
+-- Copyright (c) 2017, United States Government, as represented by the
+-- Administrator of the National Aeronautics and Space Administration.
+--
+-- All rights reserved.
+--
+-- The Astrobee platform is licensed under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with the
+-- License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+-- License for the specific language governing permissions and limitations
+-- under the License.
+require "context"
+
+-- Graph Value Options
+ideal_duration = 2
+-- Don't leave less than min_num_states in window if possible
+min_num_states = 3
+max_num_states = 20
+min_num_factors_per_feature = 2
+-- Graph Options
+max_iterations = 4
+-- cholesky (faster but less robust) or qr (slower but more robust)
+marginals_factorization = "qr"
+-- 62.5 measurements per second
+num_bias_estimation_measurements = 100
+limit_imu_factor_spacing = false
+max_imu_factor_spacing = 0.1
+add_priors = true
+add_marginal_factors = false
+loc_nav_cam_noise_stddev = 0.1
+optical_flow_nav_cam_noise_stddev = 0.1
+loc_dock_cam_noise_stddev = 0.1
+huber_k = world_huber_k
+max_standstill_feature_track_avg_distance_from_mean = 0.075
+standstill_min_num_points_per_track = 5
+-- Only applicable for non zero gravity, causes gravity to be detected as an accelerometer bias instead of
+-- subtracted from accelerometer measurements which requires the use of global orientation estimates.
+-- Only works when robot is always gravity aligned. Recommended when testing in the lab.
+ignore_gravity = true
+estimate_world_T_dock_using_loc = true
+-- Sanity Checker options
+-- TODO(rsoussan): Create seperate config for sanity checker?
+check_pose_difference = true
+num_consecutive_pose_difference_failures_until_insane = 3
+max_sane_position_difference = 1.5
+check_position_covariance = false
+check_orientation_covariance = false
+position_covariance_threshold = 0
+orientation_covariance_threshold = 0
+-- Starting Prior Noise
+starting_prior_translation_stddev = 0.02
+starting_prior_quaternion_stddev = 0.01
+starting_prior_velocity_stddev = 0.01
+starting_prior_accel_bias_stddev = 0.001
+starting_prior_gyro_bias_stddev = 0.001
+-- Lost Threshold
+position_cov_log_det_lost_threshold = 0
+orientation_cov_log_det_lost_threshold = 0
+-- Feature Tracker
+feature_tracker_sliding_window_duration = 0.5
+-- Standstill
+standstill_adder_add_velocity_prior = true
+standstill_adder_add_pose_between_factor = true
+standstill_adder_prior_velocity_stddev = 0.01
+standstill_adder_pose_between_factor_translation_stddev = 0.01
+standstill_adder_pose_between_factor_rotation_stddev = 0.01
+-- Optical Flow Smart Factors
+smart_projection_adder_enabled = true
+-- Gives min threshold for distance traveled for optical flow tracks to avoid degenerate cases with no/too small of baseline
+smart_projection_adder_min_avg_distance_from_mean = 0.075
+smart_projection_adder_enable_EPI = false
+smart_projection_adder_landmark_distance_threshold = 500
+smart_projection_adder_dynamic_outlier_rejection_threshold = 50
+smart_projection_adder_retriangulation_threshold = 1e-5
+smart_projection_adder_verbose_cheirality = false
+smart_projection_adder_robust = true
+smart_projection_adder_max_num_factors = 10
+smart_projection_adder_min_num_points = 2
+smart_projection_adder_rotation_only_fallback = false
+smart_projection_adder_splitting = true
+smart_projection_adder_scale_noise_with_num_points = true
+smart_projection_adder_noise_scale = 2
+-- Optical Flow Projection Factors
+projection_adder_enabled = false
+projection_adder_enable_EPI = false
+projection_adder_landmark_distance_threshold = 50
+projection_adder_dynamic_outlier_rejection_threshold = 5
+projection_adder_max_num_features = 7
+projection_adder_min_num_measurements_for_triangulation = 3
+projection_adder_add_point_priors = true
+projection_adder_point_prior_translation_stddev = 0.1
+-- Loc Factors
+loc_adder_add_pose_priors = false
+loc_adder_add_projections = true
+loc_adder_prior_translation_stddev = 0.01
+loc_adder_prior_quaternion_stddev = 0.01
+loc_adder_min_num_matches = 5
+loc_adder_scale_pose_noise_with_num_landmarks = true
+loc_adder_scale_projection_noise_with_num_landmarks = false
+loc_adder_pose_noise_scale = 7
+-- Change to 9 if scale with inverse distance
+loc_adder_projection_noise_scale = 60
+loc_adder_max_inlier_weighted_projection_norm = 30
+loc_adder_weight_projections_with_distance = false
+loc_adder_add_prior_if_projections_fail = true
+-- AR Tag Loc Projection Factors
+ar_tag_loc_adder_add_pose_priors = false
+ar_tag_loc_adder_add_projections = true
+ar_tag_loc_adder_prior_translation_stddev = 0.01
+ar_tag_loc_adder_prior_quaternion_stddev = 0.01
+ar_tag_loc_adder_min_num_matches = 4
+ar_tag_loc_adder_scale_pose_noise_with_num_landmarks = false
+ar_tag_loc_adder_scale_projection_noise_with_num_landmarks = false
+ar_tag_loc_adder_pose_noise_scale = 1
+ar_tag_loc_adder_projection_noise_scale = 30
+ar_tag_loc_adder_max_inlier_weighted_projection_norm = 5
+ar_tag_loc_adder_weight_projections_with_distance = false
+ar_tag_loc_adder_add_prior_if_projections_fail = true
+-- Rotation Factor
+rotation_adder_enabled = false
+rotation_adder_min_avg_disparity = 0.2
+rotation_adder_rotation_stddev = 0.1
+rotation_adder_max_percent_outliers = 0.13
+-- Imu integration
+-- butter, butter3, butter5, butter5_1, butter5_05, none
+imu_filter = "butter"
+imu_augmentor_standstill = true
+-- From gtsam: Angular and velocity random walk expressed in degrees respectively m/s per sqrt(hr)
+-- (0.5 * M_PI / 180) / 60; // 0.5 degree ARW
+gyro_sigma = 0.005
+-- 0.1 / 60; // 10 cm VRW
+accel_sigma = 0.03
+accel_bias_sigma = 0.01
+gyro_bias_sigma = 0.001
+integration_variance = 0.05
+bias_acc_omega_int = 0.0001
+-- Other
+verbose = false
+fatal_failures = true
+print_factor_info = false
+use_ceres_params = false
+publish_localization_graph = false
+save_localization_graph_dot_file = false
+log_rate = 10
+imu_bias_file = resolve_resource("imu_bias.config");
diff --git a/astrobee/config/localization.config b/astrobee/config/localization.config
index 16e538c03d..c8c6ba2266 100644
--- a/astrobee/config/localization.config
+++ b/astrobee/config/localization.config
@@ -23,7 +23,7 @@ histogram_equalization = 1
min_features = 200
max_features = 800
detection_retries = 1
-num_threads = 2
+num_threads = 1
min_brisk_threshold = 20.0
default_brisk_threshold = 90.0
max_brisk_threshold = 110.0
diff --git a/astrobee/config/management/data_bagger.config b/astrobee/config/management/data_bagger.config
index d8319293dd..1f3bed440e 100644
--- a/astrobee/config/management/data_bagger.config
+++ b/astrobee/config/management/data_bagger.config
@@ -30,6 +30,8 @@ bag_size_bytes = 96*1024*1024
default_topics = {{topic="gnc/ctl/traj", downlink="immediate", frequency=-1},
{topic="gnc/ekf", downlink="immediate", frequency=-1},
+ {topic="sparse_mapping/pose", downlink="immediate", frequency=-1},
+ {topic="graph_loc/state", downlink="immediate", frequency=-1},
{topic="hw/eps/battery/bottom_left/state", downlink="immediate", frequency=-1},
{topic="hw/eps/battery/bottom_left/temp", downlink="immediate", frequency=-1},
{topic="hw/eps/battery/bottom_right/state", downlink="immediate", frequency=-1},
diff --git a/astrobee/config/management/fault_table.config b/astrobee/config/management/fault_table.config
index 9a60f7e281..93e803efd1 100644
--- a/astrobee/config/management/fault_table.config
+++ b/astrobee/config/management/fault_table.config
@@ -22,185 +22,188 @@ require "management/fault_functions"
subsystems={
{name="behaviors", nodes={
{name="arm", faults={
- {id=22, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Arm", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=61, warning=false, blocking=false, response=command("unloadNodelet", "arm", ""), key="INITIALIZATION_FAILED", description="Arm Initialization Failed"},
+ {id=23, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Arm", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=63, warning=false, blocking=false, response=command("unloadNodelet", "arm", ""), key="INITIALIZATION_FAILED", description="Arm Initialization Failed"},
}},
}},
{name="management", nodes={
{name="all", faults={
- {id=85, warning=false, blocking=false, response=command("noOp"), key="UNKNOWN_FAULT_KEY", description="Unknown Fault Key"},
+ {id=87, warning=false, blocking=false, response=command("noOp"), key="UNKNOWN_FAULT_KEY", description="Unknown Fault Key"},
}},
{name="access_control", faults={
- {id=31, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from Access Control", heartbeat={timeout_sec=1.1, misses=3.0}},
- {id=70, warning=false, blocking=true, response=command("unloadNodelet", "access_control", ""), key="INITIALIZATION_FAILED", description="Access Control Initialization Failed"},
+ {id=32, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from Access Control", heartbeat={timeout_sec=1.1, misses=3.0}},
+ {id=72, warning=false, blocking=true, response=command("unloadNodelet", "access_control", ""), key="INITIALIZATION_FAILED", description="Access Control Initialization Failed"},
}},
{name="executive", faults={
- {id=29, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Executive", heartbeat={timeout_sec=2.1, misses=2.0}},
- {id=68, warning=false, blocking=false, response=command("unloadNodelet", "executive", ""), key="INITIALIZATION_FAILED", description="Executive Initialization Failed"},
+ {id=30, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Executive", heartbeat={timeout_sec=2.1, misses=2.0}},
+ {id=70, warning=false, blocking=false, response=command("unloadNodelet", "executive", ""), key="INITIALIZATION_FAILED", description="Executive Initialization Failed"},
}},
{name="data_bagger", faults={
- {id=47, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Data Bagger", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=83, warning=false, blocking=false, response=command("unloadNodelet", "data_bagger", ""), key="INITIALIZATION_FAILED", description="Data Bagger Initialization Failed"},
+ {id=48, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Data Bagger", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=85, warning=false, blocking=false, response=command("unloadNodelet", "data_bagger", ""), key="INITIALIZATION_FAILED", description="Data Bagger Initialization Failed"},
}},
{name="llp_cpu_mem_monitor", faults={
- {id=33, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from LLP CPU Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=72, warning=false, blocking=true, response=command("unloadNodelet", "llp_cpu_mem_monitor", ""), key="INITIALIZATION_FAILED", description="LLP CPU Monitor Initialization Failed"},
- {id=86, warning=true, blocking=true, response=command("stopAllMotion"), key="LOAD_TOO_HIGH", description="LLP CPU load too high"},
- {id=97, warning=true, blocking=false, response=command("noOp"), key="MEMORY_USAGE_TOO_HIGH", description="LLP Memory usage too high"},
- {id=100, warning=true, blocking=true, response=command("stopAllMotion"), key="TEMPERATURE_TOO_HIGH", description="LLP Temperature too high"},
+ {id=34, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from LLP CPU Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=74, warning=false, blocking=true, response=command("unloadNodelet", "llp_cpu_mem_monitor", ""), key="INITIALIZATION_FAILED", description="LLP CPU Monitor Initialization Failed"},
+ {id=88, warning=true, blocking=true, response=command("stopAllMotion"), key="LOAD_TOO_HIGH", description="LLP CPU load too high"},
+ {id=99, warning=true, blocking=false, response=command("noOp"), key="MEMORY_USAGE_TOO_HIGH", description="LLP Memory usage too high"},
+ {id=102, warning=true, blocking=true, response=command("stopAllMotion"), key="TEMPERATURE_TOO_HIGH", description="LLP Temperature too high"},
}},
{name="llp_disk_monitor", faults={
- {id=36, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from LLP Disk Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=75, warning=false, blocking=true, response=command("unloadNodelet", "llp_disk_monitor", ""), key="INITIALIZATION_FAILED", description="LLP Disk Monitor Initialization Failed"},
- {id=89, warning=true, blocking=false, response=command("noOp"), key="DISK_CONFIG_INVALID", description="LLP Disk conifg not valid"},
- {id=91, warning=true, blocking=false, response=command("noOp"), key="DISK_USAGE_HIGH", description="LLP Disk usage getting high"},
- {id=94, warning=false, blocking=true, response=command("fault"), key="DISK_USAGE_TOO_HIGH", description="LLP Disk usage too high"},
+ {id=37, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from LLP Disk Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=77, warning=false, blocking=true, response=command("unloadNodelet", "llp_disk_monitor", ""), key="INITIALIZATION_FAILED", description="LLP Disk Monitor Initialization Failed"},
+ {id=91, warning=true, blocking=false, response=command("noOp"), key="DISK_CONFIG_INVALID", description="LLP Disk conifg not valid"},
+ {id=93, warning=true, blocking=false, response=command("noOp"), key="DISK_USAGE_HIGH", description="LLP Disk usage getting high"},
+ {id=96, warning=false, blocking=true, response=command("fault"), key="DISK_USAGE_TOO_HIGH", description="LLP Disk usage too high"},
}},
{name="image_sampler", faults={
- {id=42, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Image Sampler", heartbeat={timeout_sec=1.1, misses=5.0}},
- {id=81, warning=false, blocking=false, response=command("unloadNodelet", "image_sampler", ""), key="INITIALIZATION_FAILED", description="Image Sampler Initialization Failed"},
+ {id=43, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Image Sampler", heartbeat={timeout_sec=1.1, misses=5.0}},
+ {id=83, warning=false, blocking=false, response=command("unloadNodelet", "image_sampler", ""), key="INITIALIZATION_FAILED", description="Image Sampler Initialization Failed"},
}},
{name="mlp_disk_monitor", faults={
- {id=37, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from MLP Disk Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=76, warning=false, blocking=true, response=command("unloadNodelet", "mlp_disk_monitor", ""), key="INITIALIZATION_FAILED", description="MLP Disk Monitor Initialization Failed"},
- {id=90, warning=true, blocking=false, response=command("noOp"), key="DISK_CONFIG_INVALID", description="MLP Disk config not valid"},
- {id=92, warning=true, blocking=false, response=command("noOp"), key="DISK_USAGE_HIGH", description="MLP Disk usage getting high"},
- {id=95, warning=false, blocking=true, response=command("fault"), key="DISK_USAGE_TOO_HIGH", description="MLP Disk usage too high"},
+ {id=38, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat from MLP Disk Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=78, warning=false, blocking=true, response=command("unloadNodelet", "mlp_disk_monitor", ""), key="INITIALIZATION_FAILED", description="MLP Disk Monitor Initialization Failed"},
+ {id=92, warning=true, blocking=false, response=command("noOp"), key="DISK_CONFIG_INVALID", description="MLP Disk config not valid"},
+ {id=94, warning=true, blocking=false, response=command("noOp"), key="DISK_USAGE_HIGH", description="MLP Disk usage getting high"},
+ {id=97, warning=false, blocking=true, response=command("fault"), key="DISK_USAGE_TOO_HIGH", description="MLP Disk usage too high"},
}},
{name="mlp_cpu_mem_monitor", faults={
- {id=34, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from MLP CPU Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=73, warning=false, blocking=true, response=command("unloadNodelet", "mlp_cpu_monitor", ""), key="INITIALIZATION_FAILED", description="MLP CPU Monitor Initialization Failed"},
- {id=87, warning=true, blocking=true, response=command("stopAllMotion"), key="LOAD_TOO_HIGH", description="MLP CPU load too high"},
- {id=98, warning=true, blocking=false, response=command("noOp"), key="MEMORY_USAGE_TOO_HIGH", description="MLP Memory usage too high"},
- {id=101, warning=true, blocking=true, response=command("stopAllMotion"), key="TEMPERATURE_TOO_HIGH", description="MLP Temperature too high"},
+ {id=35, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from MLP CPU Monitor", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=75, warning=false, blocking=true, response=command("unloadNodelet", "mlp_cpu_monitor", ""), key="INITIALIZATION_FAILED", description="MLP CPU Monitor Initialization Failed"},
+ {id=89, warning=true, blocking=true, response=command("stopAllMotion"), key="LOAD_TOO_HIGH", description="MLP CPU load too high"},
+ {id=100, warning=true, blocking=false, response=command("noOp"), key="MEMORY_USAGE_TOO_HIGH", description="MLP Memory usage too high"},
+ {id=103, warning=true, blocking=true, response=command("stopAllMotion"), key="TEMPERATURE_TOO_HIGH", description="MLP Temperature too high"},
}},
}},
{name="avionics", nodes={
{name="sys_monitor", faults={
- {id=105, warning=true, blocking=false, response=command("noOp"), key="TIME_DIFF_TOO_HIGH", description="Time difference between mlp and llp too high"},
+ {id=107, warning=true, blocking=false, response=command("noOp"), key="TIME_DIFF_TOO_HIGH", description="Time difference between mlp and llp too high"},
}},
}},
{name="localization", nodes={
{name="optical_flow_nodelet", faults={
- {id=27, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from VisualOdometer", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=28, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from VisualOdometer", heartbeat={timeout_sec=1.1, misses=2.0}},
}},
{name="marker_tracking", faults={
- {id=25, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from DockLoc (ar tags)", heartbeat={timeout_sec=1.1, misses=4.0}},
+ {id=26, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from DockLoc (ar tags)", heartbeat={timeout_sec=1.1, misses=4.0}},
}},
{name="localization_node", faults={
- {id=24, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from NavLoc (sparse mapping)", heartbeat={timeout_sec=1.1, misses=4.0}},
+ {id=25, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from NavLoc (sparse mapping)", heartbeat={timeout_sec=1.1, misses=4.0}},
}},
{name="handrail_detect", faults={
- {id=26, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from PerchLoc (handrail detect)", heartbeat={timeout_sec=1.1, misses=4.0}},
+ {id=27, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from PerchLoc (handrail detect)", heartbeat={timeout_sec=1.1, misses=4.0}},
}},
{name="localization_manager", faults={
- {id=23, warning=false, blocking=true, response=command("idlePropulsion"), key="HEARTBEAT_MISSING", description="No Heartbeat from Localization Manager", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=62, warning=false, blocking=true, response=command("unloadNodelet", "localization_manager", ""), key="INITIALIZATION_FAILED", description="Localization Manager Initialization Failed"},
- {id=117, warning=false, blocking=false, response=command("stopAllMotion"), key="LOCALIZATION_PIPELINE_UNSTABLE", description="Localization pipeline is not producing registration or features."},
- {id=119, warning=false, blocking=true, response=command("idlePropulsion"), key="ESTIMATE_CONFIDENCE_TOO_LOW", description="Estimator confidence too low for too long"},
+ {id=24, warning=false, blocking=true, response=command("idlePropulsion"), key="HEARTBEAT_MISSING", description="No Heartbeat from Localization Manager", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=64, warning=false, blocking=true, response=command("unloadNodelet", "localization_manager", ""), key="INITIALIZATION_FAILED", description="Localization Manager Initialization Failed"},
+ {id=119, warning=false, blocking=false, response=command("noOp"), key="LOCALIZATION_PIPELINE_UNSTABLE", description="Localization pipeline is not producing registration or features."},
+ {id=121, warning=false, blocking=true, response=command("idlePropulsion"), key="ESTIMATE_CONFIDENCE_TOO_LOW", description="Estimator confidence too low for too long"},
}},
}},
{name="communication", nodes={
{name="dds_ros_bridge", faults={
- {id=32, warning=false, blocking=false, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat form DDS ROS Bridge", heartbeat={timeout_sec=1.1, misses=5.0}},
- {id=71, warning=false, blocking=false, response=command("unloadNodelet", "dds_ros_bridge", ""), key="INITIALIZATION_FAILED", description="DDS ROS Bridge Initialization Failed"},
+ {id=33, warning=false, blocking=true, response=command("fault"), key="HEARTBEAT_MISSING", description="No Heartbeat form DDS ROS Bridge", heartbeat={timeout_sec=1.1, misses=5.0}},
+ {id=73, warning=false, blocking=true, response=command("unloadNodelet", "dds_ros_bridge", ""), key="INITIALIZATION_FAILED", description="DDS ROS Bridge Initialization Failed"},
}},
}},
{name="mobility", nodes={
{name="mapper", faults={
- {id=41, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Mapper", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=80, warning=false, blocking=false, response=command("unloadNodelet", "mapper", ""), key="INITIALIZATION_FAILED", description="Mapper Initialization Failed"},
+ {id=42, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Mapper", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=82, warning=false, blocking=false, response=command("unloadNodelet", "mapper", ""), key="INITIALIZATION_FAILED", description="Mapper Initialization Failed"},
}},
{name="planner_qp", faults={
- {id=39, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from QP Planner", heartbeat={timeout_sec=1.1, misses=5.0}},
- {id=78, warning=false, blocking=false, response=command("unloadNodelet", "planner_qp", ""), key="INITIALIZATION_FAILED", description="QP Planner Initialization Failed"},
+ {id=40, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from QP Planner", heartbeat={timeout_sec=1.1, misses=5.0}},
+ {id=80, warning=false, blocking=false, response=command("unloadNodelet", "planner_qp", ""), key="INITIALIZATION_FAILED", description="QP Planner Initialization Failed"},
}},
{name="planner_trapezoidal", faults={
- {id=40, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Trapezoidal Planner", heartbeat={timeout_sec=1.1, misses=5.0}},
- {id=79, warning=false, blocking=false, response=command("unloadNodelet", "planner_trapezoidal", ""), key="INITIALIZATION_FAILED", description="Trapezoidal Planner Initialization Failed"},
+ {id=41, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Trapezoidal Planner", heartbeat={timeout_sec=1.1, misses=5.0}},
+ {id=81, warning=false, blocking=false, response=command("unloadNodelet", "planner_trapezoidal", ""), key="INITIALIZATION_FAILED", description="Trapezoidal Planner Initialization Failed"},
}},
{name="choreographer", faults={
- {id=28, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Choreographer", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=67, warning=false, blocking=false, response=command("unloadNodelet", "choreographer", ""), key="INITIALIZATION_FAILED", description="Choreographer Initialization Failed"},
+ {id=29, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Choreographer", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=69, warning=false, blocking=false, response=command("unloadNodelet", "choreographer", ""), key="INITIALIZATION_FAILED", description="Choreographer Initialization Failed"},
}},
}},
{name="hardware", nodes={
{name="laser", faults={
- {id=44, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Laser", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=45, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Laser", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="eps_driver", faults={
{id=11, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from EPS", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="perching_arm", faults={
- {id=21, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Perching Arm", heartbeat={timeout_sec=1.1, misses=2.0}},
- {id=60, warning=false, blocking=false, response=command("unloadNodelet", "perching_arm", ""), key="INITIALIZATION_FAILED", description="Perching Arm Initialization Failed"},
+ {id=22, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Perching Arm", heartbeat={timeout_sec=1.1, misses=2.0}},
+ {id=62, warning=false, blocking=false, response=command("unloadNodelet", "perching_arm", ""), key="INITIALIZATION_FAILED", description="Perching Arm Initialization Failed"},
}},
{name="framestore", faults={
- {id=43, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from FrameStore", heartbeat={timeout_sec=1.1, misses=3.0}},
- {id=82, warning=false, blocking=false, response=command("unloadNodelet", "framestore", ""), key="INITIALIZATION_FAILED", description="Frame Store Initialization Failed"},
+ {id=44, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from FrameStore", heartbeat={timeout_sec=1.1, misses=3.0}},
+ {id=84, warning=false, blocking=false, response=command("unloadNodelet", "framestore", ""), key="INITIALIZATION_FAILED", description="Frame Store Initialization Failed"},
}},
{name="pmc_actuator", faults={
{id=13, warning=false, blocking=false, response=command("idlePropulsion"), key="HEARTBEAT_MISSING", description="No Heartbeat from PMC Actuator", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="flashlight_front", faults={
- {id=45, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Front Flashlight", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=46, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Front Flashlight", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="nav_cam", faults={
- {id=18, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Navcam", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=19, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Navcam", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="flashlight_aft", faults={
- {id=46, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Aft Flashlight", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=47, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Aft Flashlight", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
{name="pico_driver", faults={
- {id=20, warning=false, blocking=false, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from PicoFlexx", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=59, warning=false, blocking=false, response=command("unloadNodelet", "pico_driver", ""), key="INITIALIZATION_FAILED", description="PicoFlexx Initialization Failed"},
- {id=124, warning=false, blocking=false, response=command("stop"), key="NO_COMMUNICATION_HAZCAM", description="Unable to communicate with the Hazcam"},
+ {id=21, warning=false, blocking=false, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from PicoFlexx", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=61, warning=false, blocking=false, response=command("unloadNodelet", "pico_driver", ""), key="INITIALIZATION_FAILED", description="PicoFlexx Initialization Failed"},
+ {id=126, warning=false, blocking=false, response=command("stop"), key="NO_COMMUNICATION_HAZCAM", description="Unable to communicate with the Hazcam"},
}},
{name="dock_cam", faults={
- {id=19, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Dockcam", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=20, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Dockcam", heartbeat={timeout_sec=1.1, misses=1.0}},
}},
}},
{name="gnc", nodes={
{name="ctl", faults={
{id=14, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Control", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=53, warning=false, blocking=false, response=command("unloadNodelet", "ctl", ""), key="INITIALIZATION_FAILED", description="Control Initialization Failed"},
- {id=133, warning=false, blocking=false, response=command("noOp"), key="KINETIC_ENERGY_INCREASING", description="Kinetic energy increasing in stopping mode"},
+ {id=54, warning=false, blocking=false, response=command("unloadNodelet", "ctl", ""), key="INITIALIZATION_FAILED", description="Control Initialization Failed"},
+ {id=135, warning=false, blocking=false, response=command("noOp"), key="KINETIC_ENERGY_INCREASING", description="Kinetic energy increasing in stopping mode"},
}},
- {name="ekf", faults={
- {id=15, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from EKF", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=54, warning=false, blocking=false, response=command("unloadNodelet", "ekf", ""), key="INITIALIZATION_FAILED", description="EKF Initialization Failed"},
- {id=134, warning=true, blocking=false, response=command("noOp"), key="CONTROL_CYCLE_OVERRUN", description="Control Cycle Overrun"},
- {id=136, warning=false, blocking=false, response=command("noOp"), key="POSE_ESTIMATE_NON_PHYSICAL", description="Pose estimate non-physical"},
+ {name="imu_aug", faults={
+ {id=16, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from IMU Augmentor", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=56, warning=false, blocking=true, response=command("unloadNodelet", "imu_aug", ""), key="INITIALIZATION_FAILED", description="IMU Augmentor Initialization Failed"},
+ }},
+ {name="graph_loc", faults={
+ {id=15, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from Graph Localizer", heartbeat={timeout_sec=3.1, misses=1.0}},
+ {id=55, warning=false, blocking=true, response=command("unloadNodelet", "graph_loc", ""), key="INITIALIZATION_FAILED", description="Graph Localizer Initialization Failed"},
+ {id=137, warning=false, blocking=false, response=command("noOp"), key="POSE_ESTIMATE_NON_PHYSICAL", description="Pose estimate non-physical"},
}},
{name="fam", faults={
- {id=16, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from FAM", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=55, warning=false, blocking=false, response=command("unloadNodelet", "fam", ""), key="INITIALIZATION_FAILED", description="FAM Initialization Failed"},
+ {id=17, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from FAM", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=57, warning=false, blocking=false, response=command("unloadNodelet", "fam", ""), key="INITIALIZATION_FAILED", description="FAM Initialization Failed"},
}},
}},
{name="speed camera", nodes={
{name="speed_cam", faults={
{id=10, warning=false, blocking=false, response=command("idlePropulsion"), key="VELOCITY_TOO_HIGH", description="Velocity too high"},
- {id=17, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from Speedcam", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=56, warning=false, blocking=true, response=command("unloadNodelet", "speed_cam", ""), key="INITIALIZATION_FAILED", description="Speedcam Initialization Failed"},
- {id=126, warning=false, blocking=true, response=command("idlePropulsion"), key="NO_COMMUNICATION_SPEEDCAM", description="Unable to communicate with the Speedcam"},
+ {id=18, warning=false, blocking=true, response=command("stopAllMotion"), key="HEARTBEAT_MISSING", description="No Heartbeat from Speedcam", heartbeat={timeout_sec=1.1, misses=1.0}},
+ {id=58, warning=false, blocking=true, response=command("unloadNodelet", "speed_cam", ""), key="INITIALIZATION_FAILED", description="Speedcam Initialization Failed"},
+ {id=128, warning=false, blocking=true, response=command("idlePropulsion"), key="NO_COMMUNICATION_SPEEDCAM", description="Unable to communicate with the Speedcam"},
}},
}},
{name="imu", nodes={
{name="epson_imu", faults={
{id=12, warning=false, blocking=false, response=command("idlePropulsion"), key="HEARTBEAT_MISSING", description="No Heartbeat from IMU", heartbeat={timeout_sec=1.1, misses=1.0}},
- {id=112, warning=false, blocking=true, response=command("idlePropulsion"), key="IMU_ACCEL_ABOVE_LIMITS", description="IMU acceleration above limits"},
- {id=145, warning=true, blocking=false, response=command("noOp"), key="BAD_GYRO_DATA", description="IMU returns bad gyro data"},
- {id=146, warning=false, blocking=true, response=command("idlePropulsion"), key="IMU_OVERTEMP", description="IMU overtemp"},
- {id=147, warning=false, blocking=true, response=command("fault"), key="SELF_TEST_FAULT_CODE", description="IMU Fault code - Self test"},
- {id=148, warning=false, blocking=true, response=command("fault"), key="HARDWARE_ERROR_FAULT_CODE", description="IMU Fault code - Hardware error"},
- {id=150, warning=true, blocking=false, response=command("noOp"), key="BAD_ACCEL_DATA", description="IMU returns bad accel data"},
- {id=151, warning=false, blocking=true, response=command("idlePropulsion"), key="NO_IMU_DATA_PACKETS", description="Loss of data packets from IMU"},
+ {id=114, warning=false, blocking=true, response=command("idlePropulsion"), key="IMU_ACCEL_ABOVE_LIMITS", description="IMU acceleration above limits"},
+ {id=146, warning=true, blocking=false, response=command("noOp"), key="BAD_GYRO_DATA", description="IMU returns bad gyro data"},
+ {id=147, warning=false, blocking=true, response=command("idlePropulsion"), key="IMU_OVERTEMP", description="IMU overtemp"},
+ {id=148, warning=false, blocking=true, response=command("fault"), key="SELF_TEST_FAULT_CODE", description="IMU Fault code - Self test"},
+ {id=149, warning=false, blocking=true, response=command("fault"), key="HARDWARE_ERROR_FAULT_CODE", description="IMU Fault code - Hardware error"},
+ {id=151, warning=true, blocking=false, response=command("noOp"), key="BAD_ACCEL_DATA", description="IMU returns bad accel data"},
+ {id=152, warning=false, blocking=true, response=command("idlePropulsion"), key="NO_IMU_DATA_PACKETS", description="Loss of data packets from IMU"},
}},
}},
{name="procedures", nodes={
{name="dock", faults={
- {id=48, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Docker", heartbeat={timeout_sec=1.1, misses=4.0}},
- {id=84, warning=false, blocking=false, response=command("unloadNodelet", "dock", ""), key="INITIALIZATION_FAILED", description="Docker Initialization Failed"},
+ {id=49, warning=false, blocking=false, response=command("noOp"), key="HEARTBEAT_MISSING", description="No Heartbeat from Docker", heartbeat={timeout_sec=1.1, misses=4.0}},
+ {id=86, warning=false, blocking=false, response=command("unloadNodelet", "dock", ""), key="INITIALIZATION_FAILED", description="Docker Initialization Failed"},
}},
}},
}
diff --git a/astrobee/config/management/sys_monitor.config b/astrobee/config/management/sys_monitor.config
index da56d3d563..7a7f7f26b4 100644
--- a/astrobee/config/management/sys_monitor.config
+++ b/astrobee/config/management/sys_monitor.config
@@ -30,7 +30,7 @@ heartbeat_pub_rate_sec = 5
-- Name of node used to calculate time difference between the mlp and the llp.
-- The node specified should be running on the llp as the system monitor runs
-- on the mlp
-time_diff_node = "ekf"
+time_diff_node = "imu_aug"
-- Threshold used to trigger time drift fault
time_drift_thres_sec = 0.25
@@ -66,7 +66,8 @@ nodelet_types={
{name="speed_cam", type="speed_cam/SpeedCamNode"},
{name="pico_driver", type="pico_driver/PicoDriverNodelet"},
{name="ctl", type="ctl/CtlNodelet"},
- {name="ekf", type="ekf/EkfNodelet"},
+ {name="graph_loc", type="graph_localizer/GraphLocalizerNodelet"},
+ {name="imu_aug", type="imu_augmentor/ImuAugmentorNodelet"},
{name="fam", type="fam/FamNodelet"},
{name="arm", type="arm/ArmNodelet"},
{name="dock", type="dock/DockNodelet"}}
diff --git a/astrobee/config/robots/bsharp2.config b/astrobee/config/robots/bsharp2.config
index cda2bdee55..07f57ff99e 100644
--- a/astrobee/config/robots/bsharp2.config
+++ b/astrobee/config/robots/bsharp2.config
@@ -34,15 +34,15 @@ robot_geometry = {
-- dock_cam_transform = transform(vec3(-0.1032-0.0029, -0.0540, -0.0064), quat4(0.54029868, -0.45297017, -0.47464308, 0.52688644)),
-- imu_transform = transform(vec3(0.0247, 0.0183, 0.0094), quat4(0.0043601096, -0.0066617904, 0.75077957, 0.66050535)),
- hazcam_to_navcam_transform = transform(vec3(0.08017845188659993, 0.0015130070850712233, -0.0037397072731650606), quat4(-0.010795173083773568, -0.020686270289023867, 0.99972637753705862, -0.0016469718428887884)),
- scicam_to_hazcam_transform = transform(vec3(0.039812511450892832, 0.017762378646844504, -0.0039477526753304197), quat4(-0.0017211102261497006, -0.023078433050076921, 0.99972939958575946, -0.0023561221189618764)),
+ hazcam_to_navcam_transform = transform(vec3(0.078032110432164, 0.0042875352601025, 0.014128477959323), quat4(-0.0027776443, -0.018759555, 0.9998178, -0.0021748829)),
+ scicam_to_hazcam_transform = transform(vec3(0.034551960811004, 0.022188043489199, -0.013680922388742), quat4(0.0017295218, -0.028156155, 0.99960204, 7.9377659e-06)),
navcam_to_hazcam_timestamp_offset = -0.02,
- scicam_to_hazcam_timestamp_offset = -0.31,
+ scicam_to_hazcam_timestamp_offset = -0.21,
hazcam_depth_to_image_transform = {
- 0.9672, 0.0017, 0.0111, -0.0060,
- -0.0016, 0.9672, -0.0065, 0.0040,
- -0.0112, 0.0065, 0.9672, -0.0133,
- 0.0, 0.0, 0.0, 1.0},
+ 0.94687664237117, -0.00042839578619649, -0.0009798676950181, 0.001373455007722,
+ 0.00042815681004901, 0.94687712204638, -0.00023113888106316, 0.00046083490888393,
+ 0.0009799721467424, 0.00023069565137983, 0.9468767108962, 0.00056469038710861,
+ 0, 0, 0, 1},
-- Engineering positions with idealized orientations
perch_cam_transform = transform(vec3(-0.1331, 0.0509, -0.0166), quat4(0.000, -0.70710678118, 0.000, 0.70710678118)), -- placeholder, not valid!
@@ -54,10 +54,10 @@ robot_geometry = {
robot_camera_calibrations = {
nav_cam = {
- distortion_coeff = 0.982597,
+ distortion_coeff = 1.0033897,
intrinsic_matrix = {
- 607.592, 0.0, 589.65385,
- 0.0, 607.72719, 498.22211,
+ 620.67509, 0.0, 580.25394,
+ 0.0, 620.67509, 494.45803,
0.0, 0.0, 1.0
},
gain=100,
@@ -84,20 +84,20 @@ nav_cam = {
exposure=150
},
haz_cam = {
- distortion_coeff = {-0.266289, -0.0723862, 0.0026379, -0.0037575},
+ distortion_coeff = {-0.36056524, 0.063303105, 0.0017514406, 3.3229736e-05},
intrinsic_matrix = {
- 214.5571, 0.0, 110.90497,
- 0.0, 213.63798, 90.388202,
+ 219.1313, 0.0, 110.9028,
+ 0.0, 219.1313, 90.52451,
0.0, 0.0, 1.0
},
gain=100,
exposure=150
},
sci_cam = {
- distortion_coeff = {0.0582312, -0.0757094, 0.00166962, -0.0025029},
+ distortion_coeff = {0.00013126118, 0.011836873, 0.0014470664, -0.00011076796},
intrinsic_matrix = {
- 1021.0608, 0.0, 661.64049,
- 0.0, 1020.7, 520.01707,
+ 1040.0823, 0.0, 663.45304,
+ 0.0, 1040.0823, 523.50871,
0.0, 0.0, 1.0
},
gain=100,
diff --git a/astrobee/config/tools/graph_bag.config b/astrobee/config/tools/graph_bag.config
new file mode 100644
index 0000000000..f4a0b499fb
--- /dev/null
+++ b/astrobee/config/tools/graph_bag.config
@@ -0,0 +1,33 @@
+-- Copyright (c) 2017, United States Government, as represented by the
+-- Administrator of the National Aeronautics and Space Administration.
+--
+-- All rights reserved.
+--
+-- The Astrobee platform is licensed under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with the
+-- License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+-- License for the specific language governing permissions and limitations
+-- under the License.
+
+-- imu
+imu_msg_delay = 0
+imu_min_msg_spacing = 0
+-- optical flow
+of_msg_delay = 0
+of_min_msg_spacing = 0
+-- sparse mapping
+vl_msg_delay = 0
+vl_min_msg_spacing = 0
+-- april tag
+ar_msg_delay = 0
+ar_min_msg_spacing = 0
+-- graph_localizer_simulator
+optimization_time = 0.30
+-- Other
+save_optical_flow_images = false;
diff --git a/astrobee/config/worlds/granite.config b/astrobee/config/worlds/granite.config
index 76b2e55df1..08052b018d 100755
--- a/astrobee/config/worlds/granite.config
+++ b/astrobee/config/worlds/granite.config
@@ -46,6 +46,8 @@ world_vision_map_filename = resolve_resource("maps/granite.map")
world_vision_ar_tag_filename = "dock_markers_world.config"
-- Distance of handrail from wall plane
world_handrail_wall_min_gap = 0.11
+-- Huber loss function cutoff point to switch from quadratic to linear
+world_huber_k = 0.5
--------------------------
-- PHYSICS --
diff --git a/astrobee/config/worlds/iss.config b/astrobee/config/worlds/iss.config
index 368ddba01a..7000aaabc9 100755
--- a/astrobee/config/worlds/iss.config
+++ b/astrobee/config/worlds/iss.config
@@ -52,6 +52,8 @@ world_vision_map_filename = resolve_resource("maps/iss.map")
world_vision_ar_tag_filename = "dock_markers_world.config"
-- Distance of handrail from wall plane
world_handrail_wall_min_gap = 0.06
+-- Huber loss function cutoff point to switch from quadratic to linear
+world_huber_k = 1.345
--------------------------
-- PHYSICS --
diff --git a/astrobee/launch/astrobee.launch b/astrobee/launch/astrobee.launch
index a32646da18..e00b14a02b 100644
--- a/astrobee/launch/astrobee.launch
+++ b/astrobee/launch/astrobee.launch
@@ -29,9 +29,8 @@
-
-
-
+
+
@@ -63,9 +62,6 @@
-
-
-
@@ -78,16 +74,14 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -120,7 +114,7 @@
-
+
@@ -160,7 +154,7 @@
-
+
@@ -170,11 +164,4 @@
-
-
- >
-
-
-
-
diff --git a/astrobee/launch/offline_localization/loc_only.launch b/astrobee/launch/offline_localization/loc_only.launch
new file mode 100644
index 0000000000..95a468bd90
--- /dev/null
+++ b/astrobee/launch/offline_localization/loc_only.launch
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/offline_localization/loc_rviz.launch b/astrobee/launch/offline_localization/loc_rviz.launch
new file mode 100644
index 0000000000..58001c1cf0
--- /dev/null
+++ b/astrobee/launch/offline_localization/loc_rviz.launch
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/offline_localization/localization_from_bag.launch b/astrobee/launch/offline_localization/localization_from_bag.launch
new file mode 100644
index 0000000000..20305126c0
--- /dev/null
+++ b/astrobee/launch/offline_localization/localization_from_bag.launch
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/offline_localization/record_localization.launch b/astrobee/launch/offline_localization/record_localization.launch
new file mode 100644
index 0000000000..2df4d712bb
--- /dev/null
+++ b/astrobee/launch/offline_localization/record_localization.launch
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/offline_localization/replay_localization.launch b/astrobee/launch/offline_localization/replay_localization.launch
new file mode 100644
index 0000000000..7e9514cf78
--- /dev/null
+++ b/astrobee/launch/offline_localization/replay_localization.launch
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/replay.launch b/astrobee/launch/replay.launch
deleted file mode 100644
index 0427f93167..0000000000
--- a/astrobee/launch/replay.launch
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/astrobee/launch/robot/LLP.launch b/astrobee/launch/robot/LLP.launch
index 62dba226fa..3ce187f857 100644
--- a/astrobee/launch/robot/LLP.launch
+++ b/astrobee/launch/robot/LLP.launch
@@ -22,57 +22,36 @@
-
+
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -80,6 +59,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/robot/MLP.launch b/astrobee/launch/robot/MLP.launch
index f437deceea..7e5b4cd87a 100644
--- a/astrobee/launch/robot/MLP.launch
+++ b/astrobee/launch/robot/MLP.launch
@@ -25,38 +25,40 @@
-
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
@@ -81,340 +83,331 @@
-
-
+
+
-
-
-
+
+
+
-
-
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/astrobee/launch/sim.launch b/astrobee/launch/sim.launch
index 1d8d907798..2ad5ebf0a2 100644
--- a/astrobee/launch/sim.launch
+++ b/astrobee/launch/sim.launch
@@ -33,6 +33,7 @@
+
@@ -52,8 +53,8 @@
-
+ default="9.816 -9.806 4.293 0 0 0 1" />
+
@@ -65,7 +66,6 @@
default="0 0 -0.7 0 0 0 1" />
-
@@ -90,9 +90,6 @@
-
-
-
@@ -111,8 +108,7 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -163,6 +157,7 @@
+
diff --git a/astrobee/launch/spawn.launch b/astrobee/launch/spawn.launch
index 94253eec17..4beaddacbc 100644
--- a/astrobee/launch/spawn.launch
+++ b/astrobee/launch/spawn.launch
@@ -31,6 +31,7 @@
+
@@ -85,6 +86,7 @@
+
diff --git a/astrobee/resources/rviz/loc_granite.rviz b/astrobee/resources/rviz/loc_granite.rviz
new file mode 100644
index 0000000000..5317085a22
--- /dev/null
+++ b/astrobee/resources/rviz/loc_granite.rviz
@@ -0,0 +1,275 @@
+Panels:
+ - Class: rviz/Displays
+ Help Height: 0
+ Name: Displays
+ Property Tree Widget:
+ Expanded:
+ - /Global Options1
+ - /Status1
+ - /Graph1
+ - /Image1
+ - /PoseDisplay1
+ - /Granite1/Links1
+ - /Granite1/Links1/body1
+ Splitter Ratio: 0.5
+ Tree Height: 178
+ - Class: rviz/Selection
+ Name: Selection
+ - Class: rviz/Tool Properties
+ Expanded:
+ - /2D Pose Estimate1
+ - /2D Nav Goal1
+ - /Publish Point1
+ Name: Tool Properties
+ Splitter Ratio: 0.588679016
+ - Class: rviz/Views
+ Expanded:
+ - /Current View1
+ Name: Views
+ Splitter Ratio: 0.5
+ - Class: rviz/Time
+ Experimental: false
+ Name: Time
+ SyncMode: 0
+ SyncSource: PointCloud2
+ - Class: localization_rviz_plugins/GraphPanel
+ Name: GraphPanel
+Toolbars:
+ toolButtonStyle: 2
+Visualization Manager:
+ Class: ""
+ Displays:
+ - Alpha: 0.5
+ Cell Size: 1
+ Class: rviz/Grid
+ Color: 160; 160; 164
+ Enabled: true
+ Line Style:
+ Line Width: 0.0299999993
+ Value: Lines
+ Name: Grid
+ Normal Cell Count: 0
+ Offset:
+ X: 0
+ Y: 0
+ Z: 0
+ Plane: XY
+ Plane Cell Count: 10
+ Reference Frame:
+ Value: true
+ - Class: localization_rviz_plugins/Graph
+ Enabled: true
+ Imu Factor Arrows Diameter: 0.00999999978
+ Name: Graph
+ Pose Axes Size: 0.100000001
+ Show Imu Factor Arrows: true
+ Show Pose Axes: true
+ Topic: /graph_loc/graph
+ Unreliable: false
+ Value: true
+ - Class: rviz/Image
+ Enabled: true
+ Image Topic: /graph_localizer/optical_flow_feature_tracks
+ Max Value: 1
+ Median window: 5
+ Min Value: 0
+ Name: Image
+ Normalize Range: true
+ Queue Size: 2
+ Transport Hint: raw
+ Unreliable: false
+ Value: true
+ - Class: localization_rviz_plugins/PoseDisplay
+ Enabled: true
+ Name: PoseDisplay
+ Number of Poses: 10
+ Pose Axes Size: 0.100000001
+ Topic: /sparse_mapping/pose
+ Unreliable: false
+ Value: true
+ - Alpha: 1
+ Class: rviz/RobotModel
+ Collision Enabled: false
+ Enabled: true
+ Links:
+ All Links Enabled: false
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ body:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ carriage:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ inertial_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ top_aft:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_arm_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_arm_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_gripper_left_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_gripper_left_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_gripper_right_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ top_aft_gripper_right_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: false
+ Name: Robot
+ Robot Description: robot_description
+ TF Prefix: ""
+ Update Interval: 0
+ Value: true
+ Visual Enabled: true
+ - Alpha: 1
+ Class: rviz/RobotModel
+ Collision Enabled: false
+ Enabled: true
+ Links:
+ All Links Enabled: true
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ body:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Name: Granite
+ Robot Description: /granite/robot_description
+ TF Prefix: granite
+ Update Interval: 0
+ Value: true
+ Visual Enabled: true
+ - Class: localization_rviz_plugins/SparseMappingDisplay
+ Enabled: true
+ Name: SparseMappingDisplay
+ - Alpha: 1
+ Autocompute Intensity Bounds: true
+ Autocompute Value Bounds:
+ Max Value: 10
+ Min Value: -10
+ Value: true
+ Axis: Z
+ Channel Name: intensity
+ Class: rviz/PointCloud2
+ Color: 255; 255; 255
+ Color Transformer: Intensity
+ Decay Time: 0
+ Enabled: true
+ Invert Rainbow: false
+ Max Color: 255; 255; 255
+ Max Intensity: 4096
+ Min Color: 0; 0; 0
+ Min Intensity: 0
+ Name: PointCloud2
+ Position Transformer: XYZ
+ Queue Size: 10
+ Selectable: true
+ Size (Pixels): 3
+ Size (m): 0.00999999978
+ Style: Points
+ Topic: /sparse_mapping/map_cloud
+ Unreliable: false
+ Use Fixed Frame: true
+ Use rainbow: true
+ Value: true
+ Enabled: true
+ Global Options:
+ Background Color: 48; 48; 48
+ Default Light: true
+ Fixed Frame: rviz
+ Frame Rate: 30
+ Name: root
+ Tools:
+ - Class: rviz/Interact
+ Hide Inactive Objects: true
+ - Class: rviz/MoveCamera
+ - Class: rviz/Select
+ - Class: rviz/FocusCamera
+ - Class: rviz/Measure
+ - Class: rviz/SetInitialPose
+ Topic: /initialpose
+ - Class: rviz/SetGoal
+ Topic: /move_base_simple/goal
+ - Class: rviz/PublishPoint
+ Single click: true
+ Topic: /clicked_point
+ Value: true
+ Views:
+ Current:
+ Class: rviz/Orbit
+ Distance: 1.82393694
+ Enable Stereo Rendering:
+ Stereo Eye Separation: 0.0599999987
+ Stereo Focal Distance: 1
+ Swap Stereo Eyes: false
+ Value: false
+ Focal Point:
+ X: -0.106598854
+ Y: 0.172128871
+ Z: -0.198201209
+ Focal Shape Fixed Size: false
+ Focal Shape Size: 0.0500000007
+ Invert Z Axis: false
+ Name: Current View
+ Near Clip Distance: 0.00999999978
+ Pitch: 0.445203364
+ Target Frame: body
+ Value: Orbit (rviz)
+ Yaw: 3.74267197
+ Saved: ~
+Window Geometry:
+ Displays:
+ collapsed: false
+ GraphPanel:
+ collapsed: false
+ Height: 1041
+ Hide Left Dock: false
+ Hide Right Dock: true
+ Image:
+ collapsed: false
+ QMainWindow State: 000000ff00000000fd00000004000000000000020c00000372fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006f00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000041000000f3000000f300fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d006100670065010000013a000001550000001600fffffffb000000140047007200610070006800500061006e0065006c01000002950000011e0000011e00ffffff000000010000010f00000372fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000004100000372000000bb00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000077c0000003efc0100000002fb0000000800540069006d006501000000000000077c0000027600fffffffb0000000800540069006d006501000000000000045000000000000000000000056a0000037200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+ Selection:
+ collapsed: false
+ Time:
+ collapsed: false
+ Tool Properties:
+ collapsed: false
+ Views:
+ collapsed: true
+ Width: 1916
+ X: 0
+ Y: 18
diff --git a/astrobee/resources/rviz/loc_iss.rviz b/astrobee/resources/rviz/loc_iss.rviz
new file mode 100644
index 0000000000..d4355a340e
--- /dev/null
+++ b/astrobee/resources/rviz/loc_iss.rviz
@@ -0,0 +1,273 @@
+Panels:
+ - Class: rviz/Displays
+ Help Height: 0
+ Name: Displays
+ Property Tree Widget:
+ Expanded:
+ - /Global Options1
+ - /Status1
+ - /Graph1
+ - /Image1
+ - /PoseDisplay1
+ Splitter Ratio: 0.5
+ Tree Height: 178
+ - Class: rviz/Selection
+ Name: Selection
+ - Class: rviz/Tool Properties
+ Expanded:
+ - /2D Pose Estimate1
+ - /2D Nav Goal1
+ - /Publish Point1
+ Name: Tool Properties
+ Splitter Ratio: 0.588679016
+ - Class: rviz/Views
+ Expanded:
+ - /Current View1
+ Name: Views
+ Splitter Ratio: 0.5
+ - Class: rviz/Time
+ Experimental: false
+ Name: Time
+ SyncMode: 0
+ SyncSource: PointCloud2
+ - Class: localization_rviz_plugins/GraphPanel
+ Name: GraphPanel
+Toolbars:
+ toolButtonStyle: 2
+Visualization Manager:
+ Class: ""
+ Displays:
+ - Alpha: 0.5
+ Cell Size: 1
+ Class: rviz/Grid
+ Color: 160; 160; 164
+ Enabled: true
+ Line Style:
+ Line Width: 0.0299999993
+ Value: Lines
+ Name: Grid
+ Normal Cell Count: 0
+ Offset:
+ X: 0
+ Y: 0
+ Z: 0
+ Plane: XY
+ Plane Cell Count: 10
+ Reference Frame:
+ Value: true
+ - Class: localization_rviz_plugins/Graph
+ Enabled: true
+ Imu Factor Arrows Diameter: 0.00999999978
+ Name: Graph
+ Pose Axes Size: 0.100000001
+ Show Imu Factor Arrows: true
+ Show Pose Axes: true
+ Topic: /graph_loc/graph
+ Unreliable: false
+ Value: true
+ - Class: rviz/Image
+ Enabled: true
+ Image Topic: /graph_localizer/optical_flow_feature_tracks
+ Max Value: 1
+ Median window: 5
+ Min Value: 0
+ Name: Image
+ Normalize Range: true
+ Queue Size: 2
+ Transport Hint: raw
+ Unreliable: false
+ Value: true
+ - Class: localization_rviz_plugins/PoseDisplay
+ Enabled: true
+ Name: PoseDisplay
+ Number of Poses: 10
+ Pose Axes Size: 0.100000001
+ Topic: /sparse_mapping/pose
+ Unreliable: false
+ Value: true
+ - Alpha: 1
+ Class: rviz/RobotModel
+ Collision Enabled: false
+ Enabled: true
+ Links:
+ All Links Enabled: true
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ body:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ carriage:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ inertial_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ top_aft:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_arm_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_arm_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_gripper_left_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_gripper_left_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_gripper_right_distal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ top_aft_gripper_right_proximal_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Name: Robot
+ Robot Description: robot_description
+ TF Prefix: ""
+ Update Interval: 0
+ Value: true
+ Visual Enabled: true
+ - Alpha: 1
+ Class: rviz/RobotModel
+ Collision Enabled: false
+ Enabled: true
+ Links:
+ All Links Enabled: true
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ body:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Name: ISS
+ Robot Description: /iss/robot_description
+ TF Prefix: iss
+ Update Interval: 0
+ Value: true
+ Visual Enabled: true
+ - Class: localization_rviz_plugins/SparseMappingDisplay
+ Enabled: true
+ Name: SparseMappingDisplay
+ - Alpha: 1
+ Autocompute Intensity Bounds: true
+ Autocompute Value Bounds:
+ Max Value: 10
+ Min Value: -10
+ Value: true
+ Axis: Z
+ Channel Name: intensity
+ Class: rviz/PointCloud2
+ Color: 255; 255; 255
+ Color Transformer: Intensity
+ Decay Time: 0
+ Enabled: true
+ Invert Rainbow: false
+ Max Color: 255; 255; 255
+ Max Intensity: 4096
+ Min Color: 0; 0; 0
+ Min Intensity: 0
+ Name: PointCloud2
+ Position Transformer: XYZ
+ Queue Size: 10
+ Selectable: true
+ Size (Pixels): 3
+ Size (m): 0.00999999978
+ Style: Points
+ Topic: /sparse_mapping/map_cloud
+ Unreliable: false
+ Use Fixed Frame: true
+ Use rainbow: true
+ Value: true
+ Enabled: true
+ Global Options:
+ Background Color: 48; 48; 48
+ Default Light: true
+ Fixed Frame: rviz
+ Frame Rate: 30
+ Name: root
+ Tools:
+ - Class: rviz/Interact
+ Hide Inactive Objects: true
+ - Class: rviz/MoveCamera
+ - Class: rviz/Select
+ - Class: rviz/FocusCamera
+ - Class: rviz/Measure
+ - Class: rviz/SetInitialPose
+ Topic: /initialpose
+ - Class: rviz/SetGoal
+ Topic: /move_base_simple/goal
+ - Class: rviz/PublishPoint
+ Single click: true
+ Topic: /clicked_point
+ Value: true
+ Views:
+ Current:
+ Class: rviz/Orbit
+ Distance: 2.08937788
+ Enable Stereo Rendering:
+ Stereo Eye Separation: 0.0599999987
+ Stereo Focal Distance: 1
+ Swap Stereo Eyes: false
+ Value: false
+ Focal Point:
+ X: 0
+ Y: 0
+ Z: 0
+ Focal Shape Fixed Size: false
+ Focal Shape Size: 0.0500000007
+ Invert Z Axis: false
+ Name: Current View
+ Near Clip Distance: 0.00999999978
+ Pitch: 0.240398735
+ Target Frame: body
+ Value: Orbit (rviz)
+ Yaw: 1.66722131
+ Saved: ~
+Window Geometry:
+ Displays:
+ collapsed: false
+ GraphPanel:
+ collapsed: false
+ Height: 1041
+ Hide Left Dock: false
+ Hide Right Dock: true
+ Image:
+ collapsed: false
+ QMainWindow State: 000000ff00000000fd00000004000000000000020c00000372fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006f00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000041000000f3000000f300fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d006100670065010000013a000001550000001600fffffffb000000140047007200610070006800500061006e0065006c01000002950000011e0000011e00ffffff000000010000010f00000372fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000004100000372000000bb00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000003bc0000003efc0100000002fb0000000800540069006d00650100000000000003bc0000027600fffffffb0000000800540069006d00650100000000000004500000000000000000000001aa0000037200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+ Selection:
+ collapsed: false
+ Time:
+ collapsed: false
+ Tool Properties:
+ collapsed: false
+ Views:
+ collapsed: true
+ Width: 956
+ X: 960
+ Y: 18
diff --git a/communications/dds_msgs/idl/AstrobeeCommandConstants.idl b/communications/dds_msgs/idl/AstrobeeCommandConstants.idl
index 005d92eeb9..912b3d88fa 100644
--- a/communications/dds_msgs/idl/AstrobeeCommandConstants.idl
+++ b/communications/dds_msgs/idl/AstrobeeCommandConstants.idl
@@ -497,6 +497,7 @@ module rapid {
const rapid::String32 SETTINGS_TELEMETRY_TYPE_GNC_STATE = "GncState";
const rapid::String32 SETTINGS_TELEMETRY_TYPE_PMC_CMD_STATE = "PmcCmdState";
const rapid::String32 SETTINGS_TELEMETRY_TYPE_POSITION = "Position";
+ const rapid::String32 SETTINGS_TELEMETRY_TYPE_SPARSE_MAPPING_POSE = "SparseMappingPose";
};
diff --git a/communications/dds_msgs/idl/TelemetryState.idl b/communications/dds_msgs/idl/TelemetryState.idl
index 5e1856e860..b0ca30bbe6 100644
--- a/communications/dds_msgs/idl/TelemetryState.idl
+++ b/communications/dds_msgs/idl/TelemetryState.idl
@@ -42,6 +42,7 @@ module rapid {
public float gncStateRate;
public float pmcCmdStateRate;
public float positionRate;
+ public float sparseMappingPoseRate;
public CameraInfoSequence8 cameras;
};
diff --git a/communications/dds_ros_bridge/include/dds_ros_bridge/dds_ros_bridge.h b/communications/dds_ros_bridge/include/dds_ros_bridge/dds_ros_bridge.h
index 81e6951790..fb814c7483 100644
--- a/communications/dds_ros_bridge/include/dds_ros_bridge/dds_ros_bridge.h
+++ b/communications/dds_ros_bridge/include/dds_ros_bridge/dds_ros_bridge.h
@@ -57,6 +57,7 @@
#include "dds_ros_bridge/ros_payload_state.h"
#include "dds_ros_bridge/ros_plan_status_rapid_plan_status.h"
#include "dds_ros_bridge/ros_pmc_cmd_state.h"
+#include "dds_ros_bridge/ros_pose_rapid_position.h"
#include "dds_ros_bridge/ros_string_rapid_text_message.h"
#include "dds_ros_bridge/ros_sub_rapid_pub.h"
#include "dds_ros_bridge/ros_telemetry_rapid_telemetry.h"
@@ -92,7 +93,8 @@ enum RateType {
EKF_STATE,
GNC_STATE,
PMC_CMD_STATE,
- POSITION
+ POSITION,
+ SPARSE_MAPPING_POSE
};
class RosSubRapidPub;
@@ -167,6 +169,8 @@ class DdsRosBridge : public ff_util::FreeFlyerNodelet {
const std::string& name);
bool BuildPmcCmdStateToRapid(const std::string& sub_topic,
const std::string& name);
+ bool BuildPoseToPosition(const std::string& sub_topic,
+ const std::string& name);
bool BuildStringToTextMessage(const std::string& name);
bool BuildTelemetryToRapid(const std::string& sub_topic,
const std::string& name);
@@ -197,6 +201,7 @@ class DdsRosBridge : public ff_util::FreeFlyerNodelet {
bool SetEkfPositionRate(float rate, std::string &err_msg, RateType type);
bool SetGncStateRate(float rate, std::string &err_msg);
bool SetPmcStateRate(float rate, std::string &err_msg);
+ bool SetSparseMappingPoseRate(float rate, std::string &err_msg);
bool SetTelemRateCallback(ff_msgs::SetRate::Request &req,
ff_msgs::SetRate::Response &res);
diff --git a/communications/dds_ros_bridge/include/dds_ros_bridge/rapid_position_provider_ros_pose_helper.h b/communications/dds_ros_bridge/include/dds_ros_bridge/rapid_position_provider_ros_pose_helper.h
new file mode 100644
index 0000000000..e909d41234
--- /dev/null
+++ b/communications/dds_ros_bridge/include/dds_ros_bridge/rapid_position_provider_ros_pose_helper.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef DDS_ROS_BRIDGE_RAPID_POSITION_PROVIDER_ROS_POSE_HELPER_H_
+#define DDS_ROS_BRIDGE_RAPID_POSITION_PROVIDER_ROS_POSE_HELPER_H_
+
+#include
+
+#include
+
+#include "dds_ros_bridge/util.h"
+
+#include "geometry_msgs/PoseStamped.h"
+
+#include "rapidIo/PositionProvider.h"
+
+namespace rapid {
+
+/**
+ * Provide a publisher which does not convert Quaternion to Rotation Matrix
+ * instead publish quaternion directly
+ * This publisher only does one copy into the RAPID data types
+ */
+class PositionProviderRosPoseHelper : public PositionProvider {
+ public:
+ PositionProviderRosPoseHelper(PositionTopicPairParameters const& params,
+ const std::string& entity_name);
+ void Publish(const geometry_msgs::PoseStamped::ConstPtr& pose);
+};
+
+} // end namespace rapid
+
+#endif // DDS_ROS_BRIDGE_RAPID_POSITION_PROVIDER_ROS_POSE_HELPER_H_
diff --git a/communications/dds_ros_bridge/include/dds_ros_bridge/ros_pose_rapid_position.h b/communications/dds_ros_bridge/include/dds_ros_bridge/ros_pose_rapid_position.h
new file mode 100644
index 0000000000..2eb2ac7a39
--- /dev/null
+++ b/communications/dds_ros_bridge/include/dds_ros_bridge/ros_pose_rapid_position.h
@@ -0,0 +1,65 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef DDS_ROS_BRIDGE_ROS_POSE_RAPID_POSITION_H_
+#define DDS_ROS_BRIDGE_ROS_POSE_RAPID_POSITION_H_
+
+#include
+
+#include "dds_ros_bridge/ros_sub_rapid_pub.h"
+#include "dds_ros_bridge/rapid_position_provider_ros_pose_helper.h"
+#include "dds_ros_bridge/util.h"
+
+#include "geometry_msgs/PoseStamped.h"
+
+#include "knDds/DdsTypedSupplier.h"
+
+#include "rapidDds/RapidConstants.h"
+
+#include "rapidIo/RapidIoParameters.h"
+
+#include "rapidUtil/RapidHelper.h"
+
+namespace ff {
+
+class RosPoseRapidPosition : public RosSubRapidPub {
+ public:
+ RosPoseRapidPosition(const std::string& subscribe_topic,
+ const std::string& pub_topic,
+ bool use_rate,
+ const ros::NodeHandle& nh,
+ const unsigned int queue_size = 10);
+
+ void DataCallback(geometry_msgs::PoseStampedConstPtr const& data);
+ void PubPosition(const ros::TimerEvent& event);
+ void SetPositionPublishRate(float rate);
+
+ private:
+ rapid::PositionTopicPairParameters params_;
+ std::shared_ptr provider_;
+
+ geometry_msgs::PoseStampedConstPtr pose_msg_;
+
+ bool use_rate_;
+
+ ros::Timer position_timer_;
+};
+
+} // end namespace ff
+
+#endif // DDS_ROS_BRIDGE_ROS_POSE_RAPID_POSITION_H_
diff --git a/communications/dds_ros_bridge/include/dds_ros_bridge/ros_telemetry_rapid_telemetry.h b/communications/dds_ros_bridge/include/dds_ros_bridge/ros_telemetry_rapid_telemetry.h
index fb48484f86..09f3cf9e81 100644
--- a/communications/dds_ros_bridge/include/dds_ros_bridge/ros_telemetry_rapid_telemetry.h
+++ b/communications/dds_ros_bridge/include/dds_ros_bridge/ros_telemetry_rapid_telemetry.h
@@ -56,6 +56,7 @@ class RosTelemetryRapidTelemetry : public RosSubRapidPub {
void SetGncStateRate(float rate);
void SetPmcCmdStateRate(float rate);
void SetPositionRate(float rate);
+ void SetSparseMappingPoseRate(float rate);
protected:
bool AssembleConfig(config_reader::ConfigReader& config_params);
diff --git a/communications/dds_ros_bridge/src/dds_ros_bridge.cc b/communications/dds_ros_bridge/src/dds_ros_bridge.cc
index 0067575136..45788de2d9 100644
--- a/communications/dds_ros_bridge/src/dds_ros_bridge.cc
+++ b/communications/dds_ros_bridge/src/dds_ros_bridge.cc
@@ -587,6 +587,34 @@ bool DdsRosBridge::BuildPmcCmdStateToRapid(const std::string& sub_topic,
return true;
}
+bool DdsRosBridge::BuildPoseToPosition(const std::string& sub_topic,
+ const std::string& name) {
+ std::string pub_topic;
+ bool use, use_rate;
+ std::string use_exp = "use_rate_" + name;
+
+ if (ReadTopicInfo(name, "pub", pub_topic, use)) {
+ if (use) {
+ if (!config_params_.GetBool(use_exp.c_str(), &use_rate)) {
+ ROS_FATAL("DDS Bridge: use rate %s not specified!", name.c_str());
+ return false;
+ }
+
+ ff::RosSubRapidPubPtr pose_to_position(
+ new ff::RosPoseRapidPosition(sub_topic,
+ pub_topic,
+ use_rate,
+ nh_));
+ components_++;
+ ros_sub_rapid_pubs_[name] = pose_to_position;
+ }
+ } else {
+ return false;
+ }
+
+ return true;
+}
+
bool DdsRosBridge::BuildStringToTextMessage(const std::string& name) {
std::string pub_topic, sub_topic;
bool use;
@@ -726,6 +754,9 @@ bool DdsRosBridge::SetTelem(float rate, std::string &err_msg, RateType type) {
case POSITION:
RTRT->SetPositionRate(rate);
break;
+ case SPARSE_MAPPING_POSE:
+ RTRT->SetSparseMappingPoseRate(rate);
+ break;
default:
err_msg = "DDS Bridge: Unknown type when setting telemetry rate!";
return false;
@@ -858,6 +889,23 @@ bool DdsRosBridge::SetPmcStateRate(float rate, std::string &err_msg) {
return true;
}
+bool DdsRosBridge::SetSparseMappingPoseRate(float rate, std::string &err_msg) {
+ if (ros_sub_rapid_pubs_.count("RSMPRP") == 0) {
+ err_msg = "DDS Bridge: Sparse mapping pose message not add but needed.";
+ return false;
+ }
+
+ if (!SetTelem(rate, err_msg, SPARSE_MAPPING_POSE)) {
+ return false;
+ }
+
+ ff::RosPoseRapidPosition *RSMP = static_cast
+ (ros_sub_rapid_pubs_["RSMPRP"].get());
+
+ RSMP->SetPositionPublishRate(rate);
+ return true;
+}
+
bool DdsRosBridge::SetTelemRateCallback(ff_msgs::SetRate::Request &req,
ff_msgs::SetRate::Response &res) {
std::string err_msg;
@@ -883,6 +931,9 @@ bool DdsRosBridge::SetTelemRateCallback(ff_msgs::SetRate::Request &req,
case ff_msgs::SetRate::Request::POSITION:
res.success = SetEkfPositionRate(req.rate, err_msg, POSITION);
break;
+ case ff_msgs::SetRate::Request::SPARSE_MAPPING_POSE:
+ res.success = SetSparseMappingPoseRate(req.rate, err_msg);
+ break;
default:
res.success = false;
err_msg = "DDS Bridge: Unknown which in set telemetry rate service.";
@@ -1291,6 +1342,16 @@ bool DdsRosBridge::ReadParams() {
return false;
}
+ // ros_sparse_mapping_pose_rapid_position => RSMPRP
+ if (!BuildPoseToPosition(TOPIC_SPARSE_MAPPING_POSE, "RSMPRP")) {
+ return false;
+ }
+
+ // ros_vive_pose_rapid_position => RVPRP
+ if (!BuildPoseToPosition("loc/truth", "RVPRP")) {
+ return false;
+ }
+
// ros_string_rapid_text_message => RSRTM
if (!BuildStringToTextMessage("RSRTM")) {
return false;
@@ -1334,6 +1395,7 @@ bool DdsRosBridge::ReadRateParams() {
float temp_rate;
std::string err_msg;
+ // Get comm status pub rate
if (!config_params_.GetReal("comm_status_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: comm state rate not specified!");
return false;
@@ -1344,6 +1406,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get cpu state pub rate
if (!config_params_.GetReal("cpu_state_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: cpu state rate not specified!");
return false;
@@ -1354,6 +1417,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get disk state pub rate
if (!config_params_.GetReal("disk_state_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: disk state rate not specified!");
return false;
@@ -1364,6 +1428,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get ekf state pub rate
if (!config_params_.GetReal("ekf_state_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: ekf state rate not specified!");
return false;
@@ -1374,6 +1439,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get gnc state pub rate
if (!config_params_.GetReal("gnc_state_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: gnc state rate not specified!");
return false;
@@ -1384,6 +1450,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get pmc command pub rate
if (!config_params_.GetReal("pmc_command_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: pmc command rate not specified!");
return false;
@@ -1394,6 +1461,7 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get position pub rate
if (!config_params_.GetReal("position_rate", &temp_rate)) {
ROS_FATAL("DDS Bridge: position rate not specified!");
return false;
@@ -1404,6 +1472,17 @@ bool DdsRosBridge::ReadRateParams() {
return false;
}
+ // Get sparse mapping pose pub rate
+ if (!config_params_.GetReal("sparse_mapping_pose_rate", &temp_rate)) {
+ ROS_FATAL("DDS Bridge: sparse mapping pose rate not specified!");
+ return false;
+ }
+
+ if (!SetSparseMappingPoseRate(temp_rate, err_msg)) {
+ ROS_FATAL("%s", err_msg.c_str());
+ return false;
+ }
+
return true;
}
diff --git a/communications/dds_ros_bridge/src/rapid_position_provider_ros_pose_helper.cc b/communications/dds_ros_bridge/src/rapid_position_provider_ros_pose_helper.cc
new file mode 100644
index 0000000000..ad9c463ba9
--- /dev/null
+++ b/communications/dds_ros_bridge/src/rapid_position_provider_ros_pose_helper.cc
@@ -0,0 +1,53 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "dds_ros_bridge/rapid_position_provider_ros_pose_helper.h"
+
+namespace rapid {
+
+PositionProviderRosPoseHelper::PositionProviderRosPoseHelper(
+ PositionTopicPairParameters const& params,
+ std::string const& entity_name)
+ : PositionProvider(params, entity_name) {
+}
+
+void PositionProviderRosPoseHelper::Publish(
+ geometry_msgs::PoseStamped::ConstPtr const& pose) {
+ rapid::PositionSample& sample = m_dataSupplier.event();
+
+ sample.hdr.timeStamp = util::RosTime2RapidTime(pose->header.stamp);
+ sample.hdr.statusCode = 0;
+
+ // pos
+ // double << float32
+ sample.pose.xyz[0] = pose->pose.position.x;
+ sample.pose.xyz[1] = pose->pose.position.y;
+ sample.pose.xyz[2] = pose->pose.position.z;
+
+ // orientation as rapid::RAPID_ROT_QUAT
+ // order specified in rapid::BaseTypesX Y Z W
+ // float << float3
+ sample.pose.rot[0] = pose->pose.orientation.x;
+ sample.pose.rot[1] = pose->pose.orientation.y;
+ sample.pose.rot[2] = pose->pose.orientation.z;
+ sample.pose.rot[3] = pose->pose.orientation.w;
+
+ m_dataSupplier.sendEvent();
+}
+
+} // end namespace rapid
diff --git a/communications/dds_ros_bridge/src/ros_pose_rapid_position.cc b/communications/dds_ros_bridge/src/ros_pose_rapid_position.cc
new file mode 100644
index 0000000000..0c58096b3d
--- /dev/null
+++ b/communications/dds_ros_bridge/src/ros_pose_rapid_position.cc
@@ -0,0 +1,80 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "dds_ros_bridge/ros_pose_rapid_position.h"
+
+namespace ff {
+
+RosPoseRapidPosition::RosPoseRapidPosition(const std::string& subscribe_topic,
+ const std::string& pub_topic,
+ bool use_rate,
+ const ros::NodeHandle& nh,
+ const unsigned int queue_size) :
+ RosSubRapidPub(subscribe_topic, pub_topic, nh, queue_size) {
+ params_.config.poseEncoding = rapid::RAPID_ROT_QUAT;
+
+ params_.topicSuffix += pub_topic;
+
+ // instantiate provider
+ provider_.reset(
+ new rapid::PositionProviderRosPoseHelper(params_, "RosPoseRapidPosition"));
+
+ // start subscriber
+ sub_ = nh_.subscribe(subscribe_topic,
+ queue_size,
+ &RosPoseRapidPosition::DataCallback,
+ this);
+
+ // Setup timers for publishing the position but don't start them until the
+ // rate is set. The bridge will set the rate at the end of its init if needed
+ position_timer_ = nh_.createTimer(ros::Rate(1.0),
+ &RosPoseRapidPosition::PubPosition,
+ this,
+ false,
+ false);
+
+ // This is used for ground testing and in those cases, we don't care about
+ // limiting the rate of the messge.
+ use_rate_ = use_rate;
+}
+
+void RosPoseRapidPosition::DataCallback(
+ geometry_msgs::PoseStampedConstPtr const& data) {
+ if (use_rate_) {
+ pose_msg_ = data;
+ } else {
+ provider_->Publish(data);
+ }
+}
+
+void RosPoseRapidPosition::PubPosition(const ros::TimerEvent& event) {
+ // Make sure we have received a pose message before trying to send it
+ if (pose_msg_ != NULL) {
+ provider_->Publish(pose_msg_);
+ }
+}
+
+void RosPoseRapidPosition::SetPositionPublishRate(float rate) {
+ if (rate == 0) {
+ position_timer_.stop();
+ } else {
+ position_timer_.setPeriod(ros::Duration(ros::Rate(rate)));
+ position_timer_.start(); // Start in case it was never started
+ }
+}
+} // end namespace ff
diff --git a/communications/dds_ros_bridge/src/ros_telemetry_rapid_telemetry.cc b/communications/dds_ros_bridge/src/ros_telemetry_rapid_telemetry.cc
index 22362f034d..ba77b20fca 100644
--- a/communications/dds_ros_bridge/src/ros_telemetry_rapid_telemetry.cc
+++ b/communications/dds_ros_bridge/src/ros_telemetry_rapid_telemetry.cc
@@ -59,6 +59,7 @@ RosTelemetryRapidTelemetry::RosTelemetryRapidTelemetry(
state_supplier_->event().ekfStateRate = 0;
state_supplier_->event().gncStateRate = 0;
state_supplier_->event().positionRate = 0;
+ state_supplier_->event().sparseMappingPoseRate = 0;
if (AssembleConfig(config_params)) {
config_supplier_->sendEvent();
@@ -165,6 +166,15 @@ void RosTelemetryRapidTelemetry::SetPositionRate(float rate) {
state_supplier_->sendEvent();
}
+void RosTelemetryRapidTelemetry::SetSparseMappingPoseRate(float rate) {
+ if (rate < 0) {
+ state_supplier_->event().sparseMappingPoseRate = 0;
+ } else {
+ state_supplier_->event().sparseMappingPoseRate = rate;
+ }
+ state_supplier_->sendEvent();
+}
+
bool RosTelemetryRapidTelemetry::AssembleConfig(
config_reader::ConfigReader& config_params) {
std::string temp_name, temp_resolution, temp_mode;
diff --git a/communications/ff_msgs/msg/CommandConstants.msg b/communications/ff_msgs/msg/CommandConstants.msg
index f970736e03..5e05585372 100644
--- a/communications/ff_msgs/msg/CommandConstants.msg
+++ b/communications/ff_msgs/msg/CommandConstants.msg
@@ -51,6 +51,7 @@ string PARAM_NAME_TELEMETRY_TYPE_EKF_STATE = EkfState
string PARAM_NAME_TELEMETRY_TYPE_GNC_STATE = GncState
string PARAM_NAME_TELEMETRY_TYPE_PMC_CMD_STATE = PmcCmdState
string PARAM_NAME_TELEMETRY_TYPE_POSITION = Position
+string PARAM_NAME_TELEMETRY_TYPE_SPARSE_MAPPING_POSE = SparseMappingPose
string CMD_NAME_GRAB_CONTROL = grabControl
string CMD_NAME_REQUEST_CONTROL = requestControl
diff --git a/communications/ff_msgs/msg/GraphState.msg b/communications/ff_msgs/msg/GraphState.msg
new file mode 100644
index 0000000000..782e5cb219
--- /dev/null
+++ b/communications/ff_msgs/msg/GraphState.msg
@@ -0,0 +1,44 @@
+# Copyright (c) 2017, United States Government, as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+#
+# All rights reserved.
+#
+# The Astrobee platform is licensed under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+std_msgs/Header header # header with timestamp
+string child_frame_id # frame ID
+# State Estimates
+geometry_msgs/Pose pose # world_T_body
+geometry_msgs/Vector3 velocity # body velocity
+geometry_msgs/Vector3 gyro_bias # estimated gyro bias
+geometry_msgs/Vector3 accel_bias # estimated accel bias
+# Covariances/Confidences
+# covariance diagonal. 1-3 orientation, 4-6 gyro bias, 7-9 velocity, 10-12 accel bias, 13-15 position
+float32[15] cov_diag
+# confidence in estimate. 0 is good, 1 is a bit confused, 2 is lost
+uint8 confidence
+uint8 CONFIDENCE_GOOD = 0 # Tracking well
+uint8 CONFIDENCE_POOR = 1 # Tracking poorly
+uint8 CONFIDENCE_LOST = 2 # We are lost
+# Stats
+uint8 of_count # optical flow feature count
+uint8 ml_count # ml feature count
+uint32 iterations # Optimization iterations
+float32 optimization_time
+float32 update_time # Include optimization_time and other operations to add data to graph
+uint32 num_factors
+uint32 num_states
+# Status
+bool standstill
+bool estimating_bias # Are we busy estimating the bias?
diff --git a/communications/ff_msgs/msg/LocalizationGraph.msg b/communications/ff_msgs/msg/LocalizationGraph.msg
new file mode 100644
index 0000000000..c40cb04674
--- /dev/null
+++ b/communications/ff_msgs/msg/LocalizationGraph.msg
@@ -0,0 +1,21 @@
+# Copyright (c) 2017, United States Government, as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+#
+# All rights reserved.
+#
+# The Astrobee platform is licensed under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+std_msgs/Header header # header with timestamp
+string child_frame_id # frame ID
+
+string serialized_graph
diff --git a/communications/ff_msgs/srv/SetRate.srv b/communications/ff_msgs/srv/SetRate.srv
index 6f21a95466..39065839da 100644
--- a/communications/ff_msgs/srv/SetRate.srv
+++ b/communications/ff_msgs/srv/SetRate.srv
@@ -17,13 +17,14 @@
#
# This message sets the rates at which certain messages are published.
-uint8 COMM_STATUS = 0 # Set the communication status message rate
-uint8 CPU_STATE = 1 # Set the cpu state message rate
-uint8 DISK_STATE = 2 # Set the disk state message rate
-uint8 EKF_STATE = 3 # Set the ekf state message rate
-uint8 GNC_STATE = 4 # Set the gnc state message rate
-uint8 PMC_CMD_STATE = 5 # Set the pmc command state message rate
-uint8 POSITION = 6 # Set the position message rate
+uint8 COMM_STATUS = 0 # Set the communication status message rate
+uint8 CPU_STATE = 1 # Set the cpu state message rate
+uint8 DISK_STATE = 2 # Set the disk state message rate
+uint8 EKF_STATE = 3 # Set the ekf state message rate
+uint8 GNC_STATE = 4 # Set the gnc state message rate
+uint8 PMC_CMD_STATE = 5 # Set the pmc command state message rate
+uint8 POSITION = 6 # Set the position message rate
+uint8 SPARSE_MAPPING_POSE = 7 # Set the sparse mapping pose message rate
uint8 which # which message we are setting the rate for
float32 rate # the rate
diff --git a/debian/changelog b/debian/changelog
index f0cf332fe6..002c09e7c0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+astrobee (0.14.0) testing; urgency=medium
+
+ * Added graph_localizer package
+ * Added supporting packages for graph localizer including imu_augmetor, imu_integation, localization_common, localization_measurements
+ * Added tools for graph localizer including graph_bag and imu_bias_tester
+ * Added rviz plugins for graph localizer and associated packages in localization_rviz_plugins
+ * Added gtsam debian
+ * Note, Perching does not work in this release, use another version for this.
+
+ -- Astrobee Flight Software Wed, 27 Jan 2021 13:43:11 -0800
+
astrobee (0.13.0) testing; urgency=medium
* Multiple updates to documentation, doxygen is exported to github pages
diff --git a/debian/control b/debian/control
index 49fb891d02..5053260b57 100644
--- a/debian/control
+++ b/debian/control
@@ -16,7 +16,7 @@ Depends: astrobee0 (= ${binary:Version}), ${misc:Depends}
libace-dev, libqt4-dev,
protobuf-compiler, libv4l-dev, libeigen3-dev, libluajit-5.1-dev,
libjsoncpp-dev, libtinyxml-dev, libyaml-cpp-dev, libusb-1.0-0-dev,
- libalvar-dev, libdbow2-dev, libopenmvg-dev, libroyale-dev, libceres-dev, rti-dev,
+ libalvar-dev, libdbow2-dev, libgtsam-dev, libopenmvg-dev, libroyale-dev, libceres-dev, rti-dev,
libsoracore-dev, libmiro-dev, libdecomputil-dev, libjps3d-dev
Description: Astrobee flight software development files.
The Astrobee flight software development files.
@@ -32,7 +32,7 @@ Package: astrobee0
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
astrobee-config (>= ${binary:Version}),
- libalvar2 (>=2.0), libdbow21 (>=0.1), libopenmvg1 (>=1.0), libroyale1 (>=1.0),
+ libalvar2 (>=2.0), libdbow21 (>=0.1), libgtsam (>=4.0), libopenmvg1 (>=1.0), libroyale1 (>=1.0),
libceres1 (>=1.0), rti (>=1.0), libmiro0 (>=0.1), libsoracore1 (>=1.0),
libdecomputil0 (>=0.1), libjps3d0 (>=0.1),
libluajit-5.1-2,
diff --git a/doc/general_documentation/flight_release.md b/doc/general_documentation/flight_release.md
index 56ae36cf8f..14d3c4d19a 100644
--- a/doc/general_documentation/flight_release.md
+++ b/doc/general_documentation/flight_release.md
@@ -75,16 +75,17 @@ fixes, recreate the debians, and repeat the release testing procedure.
## Finish Release
Once the debians pass all the required testing, it is ready to become an
-official flight release. Please make a pull request on astrobee develop and set
-Brian, Katie, or Marina as the reviewer. They will review the request and merge
-it into develop and master. You will also need to copy the debians to a
-temporary location on volar.
+official flight release. Please make two pull requests; one on astrobee develop
+and one on astrobee master. Set Brian, Katie, or Marina as the reviewer. They
+will review the request and do the merging into develop and master. You will
+also need to copy the debians to a temporary location on volar.
scp astrobee0_0.x.x_armhf.deb \
- @volar:/home/p-free-flyer/free-flyer/FSW/ars_debs/dists/xenial/main/release_candidate/
+ @volar:/home/p-free-flyer/free-flyer/FSW/ars_debs/release_candidate/
scp astrobee-config_0.x.x_all.deb \
- @volar:/home/p-free-flyer/free-flyer/FSW/ars_debs/dists/xenial/main/release_candidate/
-
+ @volar:/home/p-free-flyer/free-flyer/FSW/ars_debs/release_candidate/
+ scp astrobee-dev_0.x.x_armhf.deb \
+ @volar:/home/p-free-flyer/free-flyer/FSW/ars_debs/release_candidate/
After the debians have been copied to volar, make sure the group permissions are
set to read and right. Finally, please email Ruben Garcia Ruiz so that he can
diff --git a/gnc/ctl/CMakeLists.txt b/gnc/ctl/CMakeLists.txt
index e01a6a06f2..cd8dca1eff 100644
--- a/gnc/ctl/CMakeLists.txt
+++ b/gnc/ctl/CMakeLists.txt
@@ -28,7 +28,7 @@ create_library(TARGET ctl
INC ${catkin_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS}
DEPS ff_msgs ff_hw_msgs)
-if(CATKIN_ENABLE_TESTING)
+if(CATKIN_ENABLE_TESTING AND ENABLE_INTEGRATION_TESTING)
find_package(rostest REQUIRED)
add_rostest_gtest(test_ctl test/test_ctl.test
test/test_ctl_nominal.cc
diff --git a/gnc/ctl/test/test_ctl.test b/gnc/ctl/test/test_ctl.test
index b5383985ef..d7391d150c 100644
--- a/gnc/ctl/test/test_ctl.test
+++ b/gnc/ctl/test/test_ctl.test
@@ -19,5 +19,6 @@
+
diff --git a/gnc/ekf/include/ekf/ekf.h b/gnc/ekf/include/ekf/ekf.h
index aae175a0f7..6283d66db0 100644
--- a/gnc/ekf/include/ekf/ekf.h
+++ b/gnc/ekf/include/ekf/ekf.h
@@ -99,6 +99,8 @@ class Ekf {
Eigen::Affine3d GetNavCamToBody(void) const {return nav_cam_to_body_;}
+ bool HasPoseEstimate() const { return has_pose_estimate_; }
+
protected:
/** Functions **/
/**
@@ -159,7 +161,7 @@ class Ekf {
// only save this for writing to a file later
geometry_msgs::Pose last_estimate_pose_;
-
+ bool has_pose_estimate_ = false;
/** Configuration Constants **/
diff --git a/gnc/ekf/src/ekf.cc b/gnc/ekf/src/ekf.cc
index 8fb8ca9db7..dcdb9efb4e 100644
--- a/gnc/ekf/src/ekf.cc
+++ b/gnc/ekf/src/ekf.cc
@@ -332,7 +332,9 @@ void Ekf::VisualLandmarksUpdate(const ff_msgs::VisualLandmarks & vl) {
}
if (vl.landmarks.size() < 5)
return;
+
last_estimate_pose_= vl.pose;
+ has_pose_estimate_ = true;
// find better way to choose limited landmarks to send?
for (int i = 0; i < std::min(ml_max_features_, static_cast(vl.landmarks.size())); i++) {
vis_.cvs_landmarks[i] = vl.landmarks[i].x;
diff --git a/hardware/smart_dock/include/smart_dock/smart_dock.h b/hardware/smart_dock/include/smart_dock/smart_dock.h
index 114becf1a9..d2a8713899 100644
--- a/hardware/smart_dock/include/smart_dock/smart_dock.h
+++ b/hardware/smart_dock/include/smart_dock/smart_dock.h
@@ -155,6 +155,10 @@ class SmartDock {
FAULT_OT_CHARGER,
FAULT_OT_ACTUATOR_1,
FAULT_OT_ACTUATOR_2,
+ FAULT_WDT1_EPS_REBOOT,
+ FAULT_WDT2_DOCKCTL_REBOOT,
+ FAULT_WDT3_DOCKPC_REBOOT,
+ FAULT_WDT4_DOCKCTL_REBOOT,
NUM_FAULTS
};
diff --git a/hardware/smart_dock/tools/smart_dock_tool.cc b/hardware/smart_dock/tools/smart_dock_tool.cc
index b9b544c25d..f45c77a3b6 100644
--- a/hardware/smart_dock/tools/smart_dock_tool.cc
+++ b/hardware/smart_dock/tools/smart_dock_tool.cc
@@ -814,6 +814,10 @@ int main(int argc, char** argv) {
idxs[SD::FAULT_OT_CHARGER] = Value("Charger o/temp", {"t_chg"});
idxs[SD::FAULT_OT_ACTUATOR_1] = Value("Actuator 1 o/temp", {"t_act1"});
idxs[SD::FAULT_OT_ACTUATOR_2] = Value("Actuator 2 o/temp", {"t_act2"});
+ idxs[SD::FAULT_WDT1_EPS_REBOOT] = Value("WatchDog Timer 1 has rebooted EPS", {"wdt1_eps"});
+ idxs[SD::FAULT_WDT2_DOCKCTL_REBOOT] = Value("WatchDog Timer 2 has rebooted Dock Controller", {"wdt2_dctl"});
+ idxs[SD::FAULT_WDT3_DOCKPC_REBOOT] = Value("WatchDog Timer 3 has rebooted Dock Processor", {"wdt3_dpc"});
+ idxs[SD::FAULT_WDT4_DOCKCTL_REBOOT] = Value("WatchDog Timer 4 has rebooted Dock Controller", {"wdt4_dctl"});
if (FLAGS_list) return Print("Indexes", idxs, true);
if (FLAGS_clear) {
if (!sd.ClearFaults()) return Error("Could not clear the faults.");
diff --git a/localization/CMakeLists.txt b/localization/CMakeLists.txt
index 27a2c24a75..2c6b79981b 100644
--- a/localization/CMakeLists.txt
+++ b/localization/CMakeLists.txt
@@ -16,10 +16,16 @@
# under the License.
add_subdirectory(camera)
+add_subdirectory(imu_integration)
add_subdirectory(interest_point)
+add_subdirectory(localization_common)
+add_subdirectory(localization_measurements)
add_subdirectory(sparse_mapping)
if (USE_ROS)
+ add_subdirectory(graph_localizer)
+ add_subdirectory(ground_truth_localizer)
+ add_subdirectory(imu_augmentor)
add_subdirectory(marker_tracking)
add_subdirectory(lk_optical_flow)
add_subdirectory(handrail_detect)
diff --git a/localization/graph_localizer/CMakeLists.txt b/localization/graph_localizer/CMakeLists.txt
new file mode 100644
index 0000000000..15eebabd31
--- /dev/null
+++ b/localization/graph_localizer/CMakeLists.txt
@@ -0,0 +1,57 @@
+#Copyright(c) 2017, United States Government, as represented by the
+#Administrator of the National Aeronautics and Space Administration.
+#
+#All rights reserved.
+#
+#The Astrobee platform is licensed under the Apache License, Version 2.0
+#(the "License"); you may not use this file except in compliance with the
+#License.You may obtain a copy of the License at
+#
+#http: // www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the
+#License for the specific language governing permissions and limitations
+#under the License.
+
+project(graph_localizer)
+
+if (USE_ROS)
+
+# include ff_nodelet to get ff_util header files since these aren't exposed elsewhere
+catkin_package(
+ LIBRARIES ${PROJECT_NAME} ${GLOG_LIBRARIES} ${GTSAM_LIBRARIES} camera config_reader ff_nodelet imu_integration localization_common localization_measurements msg_conversions
+ INCLUDE_DIRS include ${GLOG_INCLUDE_DIRS} ${GTSAM_INCLUDE_DIR}
+ CATKIN_DEPENDS roscpp
+ DEPENDS gtsam ff_msgs
+)
+
+create_library(TARGET ${PROJECT_NAME}
+ LIBS ${catkin_LIBRARIES} ${GLOG_LIBRARIES} gtsam camera config_reader ff_nodelet imu_integration localization_common localization_measurements msg_conversions
+ INC ${catkin_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS}
+ DEPS ff_msgs
+)
+
+if(CATKIN_ENABLE_TESTING)
+ find_package(rostest REQUIRED)
+ add_rostest_gtest(test_rotation_factor_adder
+ test/test_rotation_factor_adder.test
+ test/test_rotation_factor_adder.cc
+ )
+ target_link_libraries(test_rotation_factor_adder
+ graph_localizer gtsam
+ )
+ add_rostest_gtest(test_rotation_factor
+ test/test_rotation_factor.test
+ test/test_rotation_factor.cc
+ )
+ target_link_libraries(test_rotation_factor
+ graph_localizer gtsam
+ )
+
+endif()
+
+install_launch_files()
+
+endif (USE_ROS)
diff --git a/localization/graph_localizer/include/graph_localizer/calibration_params.h b/localization/graph_localizer/include/graph_localizer/calibration_params.h
new file mode 100644
index 0000000000..8adb9d44b3
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/calibration_params.h
@@ -0,0 +1,34 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef GRAPH_LOCALIZER_CALIBRATION_PARAMS_H_
+#define GRAPH_LOCALIZER_CALIBRATION_PARAMS_H_
+
+#include
+#include
+
+namespace graph_localizer {
+struct CalibrationParams {
+ gtsam::Pose3 body_T_dock_cam;
+ gtsam::Pose3 body_T_nav_cam;
+ gtsam::Pose3 world_T_dock;
+ boost::shared_ptr nav_cam_intrinsics;
+ boost::shared_ptr dock_cam_intrinsics;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_CALIBRATION_PARAMS_H_
diff --git a/localization/graph_localizer/include/graph_localizer/cumulative_factor_adder.h b/localization/graph_localizer/include/graph_localizer/cumulative_factor_adder.h
new file mode 100644
index 0000000000..2a594eb1ca
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/cumulative_factor_adder.h
@@ -0,0 +1,43 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_CUMULATIVE_FACTOR_ADDER_H_
+#define GRAPH_LOCALIZER_CUMULATIVE_FACTOR_ADDER_H_
+
+#include
+
+#include
+
+namespace graph_localizer {
+template
+class CumulativeFactorAdder {
+ public:
+ explicit CumulativeFactorAdder(const PARAMS& params) : params_(params) {}
+
+ virtual ~CumulativeFactorAdder() {}
+
+ virtual std::vector AddFactors() = 0;
+
+ const PARAMS& params() const { return params_; }
+
+ private:
+ PARAMS params_;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_CUMULATIVE_FACTOR_ADDER_H_
diff --git a/localization/graph_localizer/include/graph_localizer/factor_adder.h b/localization/graph_localizer/include/graph_localizer/factor_adder.h
new file mode 100644
index 0000000000..b8e8312ae8
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/factor_adder.h
@@ -0,0 +1,43 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FACTOR_ADDER_H_
+#define GRAPH_LOCALIZER_FACTOR_ADDER_H_
+
+#include
+
+#include
+
+namespace graph_localizer {
+template
+class FactorAdder {
+ public:
+ explicit FactorAdder(const PARAMS& params) : params_(params) {}
+
+ virtual ~FactorAdder() {}
+
+ virtual std::vector AddFactors(const MEASUREMENT& measurement) = 0;
+
+ const PARAMS& params() const { return params_; }
+
+ private:
+ PARAMS params_;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FACTOR_ADDER_H_
diff --git a/localization/graph_localizer/include/graph_localizer/factor_adder_params.h b/localization/graph_localizer/include/graph_localizer/factor_adder_params.h
new file mode 100644
index 0000000000..92f4845406
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/factor_adder_params.h
@@ -0,0 +1,29 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FACTOR_ADDER_PARAMS_H_
+#define GRAPH_LOCALIZER_FACTOR_ADDER_PARAMS_H_
+
+namespace graph_localizer {
+struct FactorAdderParams {
+ bool enabled;
+ double huber_k;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FACTOR_ADDER_PARAMS_H_
diff --git a/localization/graph_localizer/include/graph_localizer/factor_params.h b/localization/graph_localizer/include/graph_localizer/factor_params.h
new file mode 100644
index 0000000000..cdbbaffff1
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/factor_params.h
@@ -0,0 +1,38 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef GRAPH_LOCALIZER_FACTOR_PARAMS_H_
+#define GRAPH_LOCALIZER_FACTOR_PARAMS_H_
+
+#include
+#include
+#include
+#include
+#include
+
+namespace graph_localizer {
+struct FactorParams {
+ RotationFactorAdderParams rotation_adder;
+ SmartProjectionFactorAdderParams smart_projection_adder;
+ StandstillFactorAdderParams standstill_adder;
+ ProjectionFactorAdderParams projection_adder;
+ LocFactorAdderParams loc_adder;
+ LocFactorAdderParams ar_tag_loc_adder;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FACTOR_PARAMS_H_
diff --git a/localization/graph_localizer/include/graph_localizer/factor_to_add.h b/localization/graph_localizer/include/graph_localizer/factor_to_add.h
new file mode 100644
index 0000000000..0c5547a339
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/factor_to_add.h
@@ -0,0 +1,67 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FACTOR_TO_ADD_H_
+#define GRAPH_LOCALIZER_FACTOR_TO_ADD_H_
+
+#include
+#include
+#include
+
+#include
+
+#include
+
+namespace graph_localizer {
+struct FactorToAdd {
+ FactorToAdd(const KeyInfos& key_infos, boost::shared_ptr factor)
+ : factor(factor), key_infos(key_infos) {}
+
+ boost::shared_ptr factor;
+ KeyInfos key_infos;
+};
+
+class FactorsToAdd {
+ public:
+ FactorsToAdd(const localization_common::Time timestamp, const std::vector& factors_to_add,
+ const GraphAction graph_action = GraphAction::kNone)
+ : timestamp_(timestamp), factors_to_add_(factors_to_add), graph_action_(graph_action) {}
+
+ explicit FactorsToAdd(const GraphAction graph_action = GraphAction::kNone) : graph_action_(graph_action) {}
+
+ void reserve(const int size) { factors_to_add_.reserve(size); }
+ size_t size() const { return factors_to_add_.size(); }
+ bool empty() const { return factors_to_add_.empty(); }
+ void push_back(FactorToAdd&& factor_to_add) { factors_to_add_.emplace_back(std::move(factor_to_add)); } // NOLINT
+ void push_back(const FactorToAdd& factor_to_add) { factors_to_add_.push_back(factor_to_add); }
+ void SetTimestamp(const localization_common::Time timestamp) { timestamp_ = timestamp; }
+
+ localization_common::Time timestamp() const { return timestamp_; }
+ const std::vector& Get() const { return factors_to_add_; }
+ std::vector& Get() { return factors_to_add_; }
+ GraphAction graph_action() const { return graph_action_; }
+
+ private:
+ // Timestamp used to sort factors when adding to graph.
+ localization_common::Time timestamp_;
+ std::vector factors_to_add_;
+ GraphAction graph_action_;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FACTOR_TO_ADD_H_
diff --git a/localization/graph_localizer/include/graph_localizer/feature_counts.h b/localization/graph_localizer/include/graph_localizer/feature_counts.h
new file mode 100644
index 0000000000..3943dc1da4
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/feature_counts.h
@@ -0,0 +1,35 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FEATURE_COUNTS_H_
+#define GRAPH_LOCALIZER_FEATURE_COUNTS_H_
+
+namespace graph_localizer {
+
+struct FeatureCounts {
+ void Reset() {
+ vl = 0;
+ of = 0;
+ }
+
+ int vl = 0;
+ int of = 0;
+};
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FEATURE_COUNTS_H_
diff --git a/localization/graph_localizer/include/graph_localizer/feature_track.h b/localization/graph_localizer/include/graph_localizer/feature_track.h
new file mode 100644
index 0000000000..39441aad52
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/feature_track.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FEATURE_TRACK_H_
+#define GRAPH_LOCALIZER_FEATURE_TRACK_H_
+
+#include
+
+#include
+#include
+
+namespace graph_localizer {
+
+struct FeatureTrack {
+ localization_measurements::FeatureId id;
+ std::deque points;
+ localization_measurements::ImageId latest_image_id;
+
+ private:
+ // Serialization function
+ friend class boost::serialization::access;
+ template
+ void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
+ ar& BOOST_SERIALIZATION_NVP(id);
+ ar& BOOST_SERIALIZATION_NVP(latest_image_id);
+ ar& BOOST_SERIALIZATION_NVP(points);
+ }
+};
+
+using FeatureTracks = std::vector;
+} // namespace graph_localizer
+
+#endif // GRAPH_LOCALIZER_FEATURE_TRACK_H_
diff --git a/localization/graph_localizer/include/graph_localizer/feature_tracker.h b/localization/graph_localizer/include/graph_localizer/feature_tracker.h
new file mode 100644
index 0000000000..606aa31537
--- /dev/null
+++ b/localization/graph_localizer/include/graph_localizer/feature_tracker.h
@@ -0,0 +1,61 @@
+/* Copyright (c) 2017, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ *
+ * All rights reserved.
+ *
+ * The Astrobee platform is licensed under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GRAPH_LOCALIZER_FEATURE_TRACKER_H_
+#define GRAPH_LOCALIZER_FEATURE_TRACKER_H_
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include