diff --git a/.dockerignore b/.dockerignore
index 2d44942185..231d1ed0cc 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,4 @@
-.git/
+# .git/ This entry was unignored for scripts/docker/astrobee_quick.Dockerfile to retain git history
scripts/docker/
submodules/android/
submodules/avionics/
diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml
index db0e990aef..5a3306cc96 100644
--- a/.github/workflows/ci_pr.yml
+++ b/.github/workflows/ci_pr.yml
@@ -12,6 +12,8 @@ jobs:
steps:
- uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
- name: Checkout submodule
run: git submodule update --init --depth 1 description/media
@@ -35,6 +37,8 @@ jobs:
steps:
- uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
- name: Checkout submodule
run: git submodule update --init --depth 1 description/media
@@ -58,6 +62,8 @@ jobs:
steps:
- uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
- name: Checkout submodule
run: git submodule update --init --depth 1 description/media
diff --git a/.github/workflows/ci_release.yml b/.github/workflows/ci_release.yml
index 449de2001a..b0e97618da 100644
--- a/.github/workflows/ci_release.yml
+++ b/.github/workflows/ci_release.yml
@@ -21,7 +21,7 @@ jobs:
--build-arg UBUNTU_VERSION=16.04
--build-arg ROS_VERSION=kinetic
--build-arg PYTHON=''
- -t astrobee/astrobee:base-latest-ubuntu16.04
+ -t astrobee/astrobee:latest-base-ubuntu16.04
- name: Build code for Ubuntu 16
run: docker build . -f ./scripts/docker/astrobee.Dockerfile
@@ -61,7 +61,7 @@ jobs:
--build-arg UBUNTU_VERSION=18.04
--build-arg ROS_VERSION=melodic
--build-arg PYTHON=''
- -t astrobee/astrobee:base-latest-ubuntu18.04
+ -t astrobee/astrobee:latest-base-ubuntu18.04
- name: Build code for Ubuntu 18
run: docker build . -f ./scripts/docker/astrobee.Dockerfile
@@ -101,7 +101,7 @@ jobs:
--build-arg UBUNTU_VERSION=20.04
--build-arg ROS_VERSION=noetic
--build-arg PYTHON=3
- -t astrobee/astrobee:base-latest-ubuntu20.04
+ -t astrobee/astrobee:latest-base-ubuntu20.04
- name: Build code for Ubuntu 20
run: docker build . -f ./scripts/docker/astrobee.Dockerfile
diff --git a/README.md b/README.md
index 747c431e9b..0fb8c70fa0 100644
--- a/README.md
+++ b/README.md
@@ -42,6 +42,8 @@ due to NASA legal requirements. Thank you for your understanding.
["A Brief Guide to Astrobee’s Flight Software"](https://github.com/albee/a-brief-guide-to-astrobee/raw/master/a_brief_guide_to_astrobee_latest.pdf) is a good tutorial, with a particular emphasis on the advanced topic of modifying Astrobee's flight software to enable Guidance, Navigation, & Control (GN&C) research. (Note that most guest science can be implemented as an app that uses the [Astrobee Command API](https://nasa.github.io/astrobee/html/command_dictionary.html) without modifying the flight software.)
+The ["Astrobee ROS Demo"](https://github.com/Pedro-Roque/astrobee_ros_demo) package provides a C++/Python interface to implement custom control methods in ROS.
+
For more information, read [Astrobee-related publications](https://www.nasa.gov/content/research-publications-0).
Learning about the Astrobee [platform](https://www.nasa.gov/sites/default/files/atoms/files/bualat_spaceops_2018_paper.pdf),
[software](https://www.nasa.gov/sites/default/files/atoms/files/fluckiger2018astrobee.pdf),
diff --git a/RELEASE.md b/RELEASE.md
index 6df6b794e7..6d37518387 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,5 +1,11 @@
# Releases
+## Release 0.16.1
+
+ * depth odometry
+ * better performance evaluation
+ * multiple other fixes and improvements
+
## Release 0.16.0
* project compiles with catkin
diff --git a/astrobee.doxyfile b/astrobee.doxyfile
index 0876902677..d2ae0d7d60 100644
--- a/astrobee.doxyfile
+++ b/astrobee.doxyfile
@@ -39,7 +39,7 @@ PROJECT_NAME = "NASA Astrobee Robot Software"
# control system is used.
-PROJECT_NUMBER = 0.16.0
+PROJECT_NUMBER = 0.16.1
# 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
@@ -789,7 +789,7 @@ INPUT = README.md \
astrobee \
simulation \
tools \
- description \
+ description/description \
licenses.csv
diff --git a/astrobee/CMakeLists.txt b/astrobee/CMakeLists.txt
index bb6271bb59..574d4d1eed 100644
--- a/astrobee/CMakeLists.txt
+++ b/astrobee/CMakeLists.txt
@@ -18,7 +18,7 @@
cmake_minimum_required(VERSION 3.0)
project(astrobee)
-set(ASTROBEE_VERSION 0.16.0)
+set(ASTROBEE_VERSION 0.16.1)
## Compile as C++14, supported in ROS Kinetic and newer
add_compile_options(-std=c++14)
diff --git a/astrobee/config/cameras.config b/astrobee/config/cameras.config
index 05ac92d952..0d6dcb3aed 100644
--- a/astrobee/config/cameras.config
+++ b/astrobee/config/cameras.config
@@ -56,13 +56,11 @@ dock_cam = {
bayer_throttle_ratio = 3
};
--- The haz and perch cam params below are ignored for the time being.
--- The distortion_coeff, etc, must be set in each bot's config file.
haz_cam = {
width = 224,
height = 171,
- undistorted_width = 600,
- undistorted_height = 500,
+ undistorted_width = 250,
+ undistorted_height = 200,
distortion_coeff = robot_camera_calibrations.haz_cam.distortion_coeff,
intrinsic_matrix = robot_camera_calibrations.haz_cam.intrinsic_matrix,
device = "/dev/haz_cam",
@@ -73,15 +71,15 @@ haz_cam = {
};
perch_cam = {
- width=224,
- height=171,
- undistorted_width=600,
- undistorted_height=500,
- distortion_coeff=robot_camera_calibrations.perch_cam.distortion_coeff,
- intrinsic_matrix=robot_camera_calibrations.perch_cam.intrinsic_matrix,
- device="/dev/perch_cam",
- gain= robot_camera_calibrations.perch_cam.gain,
- exposure= robot_camera_calibrations.perch_cam.exposure,
+ width = 224,
+ height = 171,
+ undistorted_width = 250,
+ undistorted_height = 200,
+ distortion_coeff = robot_camera_calibrations.perch_cam.distortion_coeff,
+ intrinsic_matrix = robot_camera_calibrations.perch_cam.intrinsic_matrix,
+ device = "/dev/perch_cam",
+ gain = robot_camera_calibrations.perch_cam.gain,
+ exposure = robot_camera_calibrations.perch_cam.exposure,
calibration_gain = 105,
calibration_exposure = 30
};
@@ -100,6 +98,9 @@ sci_cam = {
calibration_exposure = 30
};
+nav_cam_to_haz_cam_timestamp_offset = robot_camera_calibrations.nav_cam_to_haz_cam_timestamp_offset;
+nav_cam_to_sci_cam_timestamp_offset = robot_camera_calibrations.nav_cam_to_sci_cam_timestamp_offset;
+
-----------------------------------------------------
-- PicoFlexx cameras support the following modes
-----------------------------------------------------
@@ -120,21 +121,24 @@ picoflexx = {
device = robot_perch_cam_device, -- camera uuid ("" : automatic)
exposure = 0, -- exposure time (0: automatic)
mode = "MODE_9_5FPS_2000", -- use case
- required = true -- is camera required
+ required = true, -- is camera required
+ amplitude_factor = 100.0
},{
name = "haz_cam", -- frame
topic = "haz", -- frame
device = robot_haz_cam_device, -- camera uuid ("" : automatic)
exposure = 0, -- exposure time (0: automatic)
mode = "MODE_9_5FPS_2000", -- use case
- required = true -- is camera required
+ required = true, -- is camera required
+ amplitude_factor = 100.0
},{
name = "test_cam", -- special name
topic = "test", -- frame
device = "0005-4805-0050-1520", -- camera uuid ("" : automatic)
exposure = 0, -- exposure time (0: automatic)
mode = "MODE_5_45FPS_500", -- use case
- required = false -- is camera required
+ required = false, -- is camera required
+ amplitude_factor = 100.0
}
}
}
diff --git a/astrobee/config/geometry.config b/astrobee/config/geometry.config
index 02cc1e8061..21e5a88350 100644
--- a/astrobee/config/geometry.config
+++ b/astrobee/config/geometry.config
@@ -34,11 +34,10 @@ nav_cam_transform = robot_geometry.nav_cam_transform;
dock_cam_transform = robot_geometry.dock_cam_transform;
sci_cam_transform = robot_geometry.sci_cam_transform;
imu_transform = robot_geometry.imu_transform;
-hazcam_to_navcam_transform = robot_geometry.hazcam_to_navcam_transform;
-scicam_to_hazcam_transform = robot_geometry.scicam_to_hazcam_transform;
-navcam_to_hazcam_timestamp_offset = robot_geometry.navcam_to_hazcam_timestamp_offset;
-scicam_to_hazcam_timestamp_offset = robot_geometry.scicam_to_hazcam_timestamp_offset;
-hazcam_depth_to_image_transform = robot_geometry.hazcam_depth_to_image_transform;
+
+nav_cam_to_haz_cam_transform = robot_geometry.nav_cam_to_haz_cam_transform;
+nav_cam_to_sci_cam_transform = robot_geometry.nav_cam_to_sci_cam_transform;
+haz_cam_depth_to_image_transform = robot_geometry.haz_cam_depth_to_image_transform;
-- These will maybe be robot-specific post-calibration
flashlight_front_transform = transform(vec3(0.1345, 0, .0369), quat4(0.0, 0.0, 0.0, 1.0));
diff --git a/astrobee/config/graph_localizer.config b/astrobee/config/graph_localizer.config
index 897c5647fc..e0e0912015 100644
--- a/astrobee/config/graph_localizer.config
+++ b/astrobee/config/graph_localizer.config
@@ -145,6 +145,15 @@ handrail_adder_min_num_plane_matches = 1
handrail_adder_point_to_line_stddev = 0.1
handrail_adder_point_to_plane_stddev = 0.1
handrail_adder_use_silu_for_point_to_line_segment_factor = false
+-- Depth Odometry Factor
+depth_odometry_adder_enabled = true
+depth_odometry_adder_noise_scale = 10
+depth_odometry_adder_use_points_between_factor = false
+depth_odometry_adder_point_to_point_error_threshold = 10.0
+depth_odometry_adder_position_covariance_threshold = 1
+depth_odometry_adder_orientation_covariance_threshold = 1
+depth_odometry_adder_pose_translation_norm_threshold = 3.0
+depth_odometry_adder_max_num_points_between_factors = 10
-- IMU integration
-- none, ButterOxSxLpxNx, where O is order, S is sample rate, Lp is low pass cutoff, N is notch
-- Note that notch depends on the sample rate and aliasing
@@ -171,6 +180,8 @@ max_optical_flow_buffer_size = 20
max_vl_buffer_size = 10
-- AR ~1 Hz
max_ar_buffer_size = 10
+-- Depth Odometry ~2 Hz
+max_depth_odometry_buffer_size = 10
-- DL ~1 Hz
max_dl_buffer_size = 10
-- Other
diff --git a/astrobee/config/localization/depth_odometry.config b/astrobee/config/localization/depth_odometry.config
new file mode 100644
index 0000000000..be72977dbb
--- /dev/null
+++ b/astrobee/config/localization/depth_odometry.config
@@ -0,0 +1,140 @@
+-- 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"
+
+-- Max time diff between successive depth measurements
+max_time_diff = 0.7
+
+-- Max time diff for correlating image and point cloud measurements to create a depth measurement
+-- This ideally have the same timestamp but sometimes vary slightly even though they are from
+-- the same measurement
+max_image_and_point_cloud_time_diff = 0.05
+
+-- Covariance thresholds for rejecting relative odometry result
+position_covariance_threshold = 100
+orientation_covariance_threshold = 100
+
+-- icp or image_feature
+depth_odometry_method = "image_feature"
+
+-- ICP options
+
+-- Search radius for each point in ICP
+search_radius = 0.04
+
+symmetric_objective = true
+-- Only applicable for symmetric objective
+enforce_same_direction_normals = true
+
+-- ICP fitness score threshold for rejecting ICP result
+use_fitness_threshold_rejection = false
+fitness_threshold = 1
+max_iterations = 1
+
+-- Use RANSAC AI algorithm to compute initial estimate
+inital_estimate_with_ransac_ia = false
+
+correspondence_rejector_surface_normal = true
+-- Threshold for cos(theta) where theta is the angle between two normals. Range from [0,1]
+-- The closer to 1, the more aligned the normals are
+correspondence_rejector_surface_normal_threshold = 0.75
+
+correspondence_rejector_median_distance = false
+-- Correspondences with distance > median_distance*factor are rejected
+correspondence_rejector_median_distance_factor = 1.0
+
+-- Organized normal estimation
+use_organized_normal_estimation = true
+-- avg_3d_gradient, covariance, avg_depth_change
+organized_normal_method = "avg_3d_gradient"
+use_depth_dependent_smoothing = false
+max_depth_change_factor = 0.02
+normal_smoothing_size = 10.0
+
+-- Normal space sampling
+use_normal_space_sampling = true
+bins_per_axis = 12
+num_samples = 3500
+
+-- Downsample options
+downsample = false
+downsample_leaf_size = 0.02
+
+-- coarse to fine options for ICP
+coarse_to_fine = false
+num_coarse_to_fine_levels = 1
+coarse_to_fine_downsample_ratio = 0.5
+-- Final (smallest) leaf size
+coarse_to_fine_final_leaf_size = 0.02
+downsample_last_coarse_to_fine_iteration = true
+
+-- Depth image aligner options
+
+-- brisk, surf, lk_optical_flow
+detector = "lk_optical_flow"
+-- Brisk detector options
+brisk_threshold = 120
+brisk_octaves = 4
+brisk_float_pattern_scale = 1
+-- Brisk matching options
+brisk_max_match_hamming_distance = 100
+brisk_flann_table_number = 3
+brisk_flann_key_size = 18
+brisk_flann_multi_probe_level = 2
+-- Surf options
+surf_threshold = 1000
+surf_max_match_distance = 0.25
+-- LK optical flow options
+lk_max_iterations = 10
+lk_termination_epsilon = 0.03
+lk_window_length = 10
+lk_max_level = 3
+lk_min_eigen_threshold = 0.2
+lk_max_flow_distance = 50
+lk_max_backward_match_distance = 0.1
+-- Good features to track options
+lk_max_corners = 100
+lk_quality_level = 0.01
+lk_min_distance = 10
+lk_block_size = 5
+lk_use_harris_detector = false
+lk_k = 0.04
+
+-- CLAHE histogram equalization options
+use_clahe = true
+clahe_grid_length = 8
+clahe_clip_limit = 40
+-- Other
+min_x_distance_to_border = 10
+min_y_distance_to_border = 10
+min_num_inliers = 5
+-- Refine estimate with PointToPlaneICP
+refine_estimate = true
+
+-- Point cloud with known correspondences aligner
+pcwkca_max_num_iterations = 100
+pcwkca_function_tolerance = 1e-6
+pcwkca_max_num_match_sets = 10000000
+pcwkca_normal_search_radius = 0.03
+pcwkca_use_umeyama_initial_guess = false
+pcwkca_use_single_iteration_umeyama = false
+pcwkca_use_point_to_plane_cost = false
+pcwkca_use_symmetric_point_to_plane_cost = false
+pcwkca_verbose_optimization = false
+
+publish_point_clouds = false
diff --git a/astrobee/config/management/cpu_mem_monitor.config b/astrobee/config/management/cpu_mem_monitor.config
index b172b91c2a..3bdae428a1 100644
--- a/astrobee/config/management/cpu_mem_monitor.config
+++ b/astrobee/config/management/cpu_mem_monitor.config
@@ -18,6 +18,7 @@
-- frequency to check and publish cpu stats
llp = {
+ update_pid_hz = 0.1,
update_freq_hz = 1,
temperature_scale = 0.001,
cpu_avg_load_limit = 100,
@@ -27,10 +28,19 @@ llp = {
--trigger
assert_load_high_fault_timeout_sec = 5,
clear_load_high_fault_timeout_sec = 5,
- nodes = {},
+ nodes = {{name="llp_cpu_mem_monitor"},
+ {name="llp_disk_monitor"},
+ {name="llp_gnc"},
+ {name="llp_i2c"},
+ {name="llp_imu"},
+ {name="llp_imu_aug"},
+ {name="llp_lights"},
+ {name="llp_pmc"},
+ {name="llp_serial"}},
}
mlp = {
+ update_pid_hz = 0.1,
update_freq_hz = 1,
temperature_scale = 1.0,
cpu_avg_load_limit = 100,
@@ -40,5 +50,22 @@ mlp = {
--trigger
assert_load_high_fault_timeout_sec = 10,
clear_load_high_fault_timeout_sec = 10,
- nodes = {},
+ nodes = {{name="mlp_arm"},
+ {name="mlp_communications"},
+ {name="mlp_cpu_mem_monitor"},
+ {name="mlp_depth_cam"},
+ {name="mlp_disk_monitor"},
+ {name="mlp_dock"},
+ {name="mlp_graph_localization"},
+ {name="mlp_localization"},
+ {name="mlp_management"},
+ {name="mlp_mapper"},
+ {name="mlp_mobility"},
+ {name="mlp_monitors"},
+ {name="mlp_multibridge"},
+ {name="mlp_perch"},
+ {name="mlp_recording"},
+ {name="mlp_serial"},
+ {name="mlp_states"},
+ {name="mlp_vision"}},
}
diff --git a/astrobee/config/management/data_bagger.config b/astrobee/config/management/data_bagger.config
index e8d52e25b3..bed1f15835 100644
--- a/astrobee/config/management/data_bagger.config
+++ b/astrobee/config/management/data_bagger.config
@@ -26,7 +26,7 @@
startup_time_secs = 20
bags_save_directory = "/data/bags/"
-bag_size_bytes = 96*1024*1024
+bag_size_bytes = 5*96*1024*1024
default_topics = {{topic="gnc/ctl/traj", downlink="immediate", frequency=-1},
{topic="gnc/ekf", downlink="immediate", frequency=-1},
diff --git a/astrobee/config/robots/bsharp.config b/astrobee/config/robots/bsharp.config
index 21663eac5b..191cfbd2bb 100644
--- a/astrobee/config/robots/bsharp.config
+++ b/astrobee/config/robots/bsharp.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
-- Calibrated transforms
-- nav_cam_transform = transform(vec3(0.1157+0.002, -0.0422, -0.0826), quat4(-0.46938154, -0.52978318, -0.5317378, -0.46504373)),
@@ -93,7 +98,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/bsharp2.config b/astrobee/config/robots/bsharp2.config
index ed4d527a14..2d04ee189b 100644
--- a/astrobee/config/robots/bsharp2.config
+++ b/astrobee/config/robots/bsharp2.config
@@ -34,14 +34,12 @@ 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.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.21,
- hazcam_depth_to_image_transform = {
- 0.94687664237117, -0.00042839578619649, -0.0009798676950181, 0.001373455007722,
- 0.00042815681004901, 0.94687712204638, -0.00023113888106316, 0.00046083490888393,
- 0.0009799721467424, 0.00023069565137983, 0.9468767108962, 0.00056469038710861,
+ nav_cam_to_haz_cam_transform = transform(vec3(0.079350378, 0.0020932693, -0.025811147), quat4(0.0045827434, -0.00067115432, 0.99998583, 0.0026256072)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.041219515, 0.019857798, 0.015677018), quat4(0.0019155044, 0.00092629811, -0.0019321095, 0.99999587)),
+ haz_cam_depth_to_image_transform = {
+ 0.94713911, 0.00063710851, 0.0043044568, 0.0084247659,
+ -0.00057512557, 0.94311399, 0.032836596, 0.00075736623,
+ -0.016608396, -0.036455481, 0.95435862, -0.026870438,
0, 0, 0, 1},
-- Engineering positions with idealized orientations
@@ -56,10 +54,10 @@ robot_geometry = {
robot_camera_calibrations = {
nav_cam = {
- distortion_coeff = 1.0033897,
+ distortion_coeff = 1.0092039,
intrinsic_matrix = {
- 620.67509, 0.0, 580.25394,
- 0.0, 620.67509, 494.45803,
+ 621.04422, 0.0, 580.56427,
+ 0.0, 621.04422, 495.51236,
0.0, 0.0, 1.0
},
gain=100,
@@ -86,25 +84,27 @@ nav_cam = {
exposure=150
},
haz_cam = {
- distortion_coeff = {-0.36056524, 0.063303105, 0.0017514406, 3.3229736e-05},
+ distortion_coeff = {-0.34478639, 0.029176425, 0.0061109035, 0.0011360463},
intrinsic_matrix = {
- 219.1313, 0.0, 110.9028,
- 0.0, 219.1313, 90.52451,
+ 215.92492, 0.0, 108.00909,
+ 0.0, 215.92492, 82.795963,
0.0, 0.0, 1.0
},
gain=100,
exposure=150
},
sci_cam = {
- distortion_coeff = {0.00013126118, 0.011836873, 0.0014470664, -0.00011076796},
+ distortion_coeff = {-0.011275619, 0.049569258, -0.00085412642, 0.0016215327},
intrinsic_matrix = {
- 1040.0823, 0.0, 663.45304,
- 0.0, 1040.0823, 523.50871,
+ 1056.7224, 0.0, 668.60496,
+ 0.0, 1056.7224, 507.31654,
0.0, 0.0, 1.0
},
gain=100,
exposure=150
},
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = -0.01
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/bumble.config b/astrobee/config/robots/bumble.config
index c1f73031e8..6d88929620 100644
--- a/astrobee/config/robots/bumble.config
+++ b/astrobee/config/robots/bumble.config
@@ -15,7 +15,7 @@
-- License for the specific language governing permissions and limitations
-- under the License.
--- bumblebee config
+-- bumble config
robot_llp_address = "10.42.0.8"
robot_mlp_address = "10.42.0.9"
@@ -25,14 +25,12 @@ robot_i2c_bus = "/dev/i2c-1"
robot_imu_drdy_pin = 4
robot_geometry = {
- hazcam_to_navcam_transform = transform(vec3(0.07142937, 0.00058221217, -0.001373669), quat4(-0.0030431141, 0.0092646368, 0.99993195, -0.0064039206)),
- scicam_to_hazcam_transform = transform(vec3(-0.0052887445, 0.010298013, -0.043606689), quat4(0.0018545621, 0.012796392, 0.99991616, -0.00069204825)),
- navcam_to_hazcam_timestamp_offset = -0.02,
- scicam_to_hazcam_timestamp_offset = 0.5,
- hazcam_depth_to_image_transform = {
- 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
- 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
- 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ nav_cam_to_haz_cam_transform = transform(vec3(0.072789474, 0.0010512418, -0.048805003), quat4(-0.00014444836, 0.020741299, 0.99976044, 0.006988339)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.035350038, 0.019131216, 0.0083921009), quat4(0.0007718104, -0.0043221056, -0.0069533111, 0.99996619)),
+ haz_cam_depth_to_image_transform = {
+ 0.91037857, 8.4134405e-05, 0.0050848035, 0.0020508297,
+ -0.0003594422, 0.9113776, 0.023508033, -0.0011003268,
+ -0.0044235394, -0.018620972, 0.88773717, -0.028333293,
0, 0, 0, 1},
-- Engineering positions with idealized orientations
@@ -42,7 +40,7 @@ robot_geometry = {
dock_cam_transform = transform(vec3(-0.1032-0.0029, -0.0540, -0.0064), quat4(0.500, -0.500, -0.500, 0.500) ),
--imu_transform = transform(vec3(0.0247, 0.0183, 0.0094), quat4(0.000, 0.000, 0.70710678118, 0.70710678118) ),
imu_transform = transform(vec3(0.0386, 0.0247, -0.01016), quat4(0.000, 0.000, 0.70710678118, 0.70710678118) ),
- -- Not accurate only for sim purposes
+ -- Not accurate, only for sim purposes
sci_cam_transform = transform(vec3(0.118, 0.0, -0.096), quat4(0.500, 0.500, 0.500, 0.500) )
};
@@ -78,25 +76,27 @@ robot_camera_calibrations = {
exposure=150
},
haz_cam = {
- distortion_coeff = {-0.050689743, -1.1461691, -0.001373226, -0.00056427513},
+ distortion_coeff = {-0.259498, -0.08484934, 0.0032980311, -0.00024045673},
intrinsic_matrix = {
- 215.88697, 0.0, 114.12908,
- 0.0, 215.88697, 86.547331,
+ 206.19095, 0.0, 112.48999,
+ 0.0, 206.19095, 81.216598,
0.0, 0.0, 1.0
},
gain=50,
exposure=150
},
sci_cam = {
- distortion_coeff = {0.029948958, -0.056854916, -0.00077885482, -0.0039909885},
+ distortion_coeff = {-0.025598438, 0.048258987, -0.00041380657, 0.0056673533},
intrinsic_matrix = {
- 1048.499, 0.0, 705.22914,
- 0.0, 1048.499, 511.03079,
+ 1023.6054, 0.0, 683.97547,
+ 0.0, 1023.6054, 511.2185,
0.0, 0.0, 1.0
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.08
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/flatsat.config b/astrobee/config/robots/flatsat.config
index 6ca9b5b433..6be2ca7292 100644
--- a/astrobee/config/robots/flatsat.config
+++ b/astrobee/config/robots/flatsat.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
perch_cam_transform = transform(vec3(-0.1375, 0.055, -0.03), quat4(0, -0.70711, 0, 0.70711)),
haz_cam_transform = transform(vec3(0, 0, 0), quat4(0, 0, 0, 1)), -- placeholder, not valid!
@@ -96,7 +101,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- robot_perch_cam_device = "0004-3608-0024-1107"
diff --git a/astrobee/config/robots/honey.config b/astrobee/config/robots/honey.config
index 50fa9cb504..fc8b814061 100644
--- a/astrobee/config/robots/honey.config
+++ b/astrobee/config/robots/honey.config
@@ -26,8 +26,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 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!
@@ -92,7 +97,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/killer.config b/astrobee/config/robots/killer.config
index 0284d6aa01..b983162f8a 100644
--- a/astrobee/config/robots/killer.config
+++ b/astrobee/config/robots/killer.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
perch_cam_transform = transform(vec3(-0.1375, 0.055, -0.03), quat4(0, -0.70711, 0, 0.70711)),
haz_cam_transform = transform(vec3(0, 0, 0), quat4(0, 0, 0, 1)), -- placeholder, not valid!
@@ -96,7 +101,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
robot_perch_cam_device = "0005-4805-0050-1520"
diff --git a/astrobee/config/robots/melissa.config b/astrobee/config/robots/melissa.config
index 139e6f5edc..04d4dd5ce1 100644
--- a/astrobee/config/robots/melissa.config
+++ b/astrobee/config/robots/melissa.config
@@ -26,8 +26,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 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!
@@ -90,7 +95,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/p4c.config b/astrobee/config/robots/p4c.config
index c94d56757e..ba6adeb600 100644
--- a/astrobee/config/robots/p4c.config
+++ b/astrobee/config/robots/p4c.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 101
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
perch_cam_transform = transform(vec3(-0.1375, 0.055, -0.03), quat4(0, -0.70711, 0, 0.70711)),
haz_cam_transform = transform(vec3(0, 0, 0), quat4(0, 0, 0, 1)), -- placeholder, not valid!
@@ -92,7 +97,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/p4d.config b/astrobee/config/robots/p4d.config
index d70a64669d..127d96dc9d 100644
--- a/astrobee/config/robots/p4d.config
+++ b/astrobee/config/robots/p4d.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 101
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
perch_cam_transform = transform(vec3(-0.17520466, 0.040140345, -0.049281679), quat4(0.027207383, -0.71130843, 0.013260087, 0.70222806)),
haz_cam_transform = transform(vec3(0.092136082, 0.041911327, -0.11237338), quat4(-0.51485943, 0.49197658, -0.47825571, 0.51395553)), -- placeholder, not valid!
@@ -94,7 +99,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/queen.config b/astrobee/config/robots/queen.config
index fe5953c911..1ce9fe35ef 100644
--- a/astrobee/config/robots/queen.config
+++ b/astrobee/config/robots/queen.config
@@ -26,8 +26,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 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!
@@ -91,7 +96,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/robots/sim.config b/astrobee/config/robots/sim.config
index 58f4c80869..2510117a97 100644
--- a/astrobee/config/robots/sim.config
+++ b/astrobee/config/robots/sim.config
@@ -25,8 +25,13 @@ robot_imu_drdy_pin = 4
-- Engineering positions and idealized orientations
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
perch_cam_transform = transform(vec3(-0.1331, 0.0509, -0.0166), quat4(0.000, -0.70710678118, 0.000, 0.70710678118)),-- placeholder, not valid!
haz_cam_transform = transform(vec3(0.1328, 0.0362, -0.0826), quat4(-0.500, 0.500, -0.500, 0.500)), -- placeholder, not valid!
@@ -89,7 +94,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
robot_perch_cam_device = ""
diff --git a/astrobee/config/robots/wannabee.config b/astrobee/config/robots/wannabee.config
index 937dec68f5..c78ebfcc4e 100644
--- a/astrobee/config/robots/wannabee.config
+++ b/astrobee/config/robots/wannabee.config
@@ -24,8 +24,13 @@ robot_imu_drdy_pin = 4
robot_geometry = {
-- Placeholder transforms, not accurate!
- hazcam_to_navcam_transform = transform(vec3(0.079356943, 0.00019413532, -0.0019157775), quat4(0.076822296, -0.009733734, 0.99698419, 0.0051110388)),
- scicam_to_hazcam_transform = transform(vec3(0.0070938664, 0.061024816, -0.11184277), quat4(0.065639737, -0.031237584, 0.99720414, -0.017307023)),
+ nav_cam_to_haz_cam_transform = transform(vec3(0.071421481, -0.00030319673, 0.0018058249), quat4(-0.0030431141, 0.0092646368, 0.99993195, 0.0064039206)),
+ nav_cam_to_sci_cam_transform = transform(vec3(-0.076526224, 0.011869553, 0.045409155), quat4(-0.0035414316, 0.0048089362, -0.0071515076, 0.99995659)),
+ haz_cam_depth_to_image_transform = {
+ 0.91602851, -0.00031586647, -0.0028485861, 0.0029767338,
+ 0.00032189197, 0.91603089, 0.0019373744, -0.0020741879,
+ 0.0028479115, -0.0019383659, 0.91602652, -0.0042296964,
+ 0, 0, 0, 1},
-- Calibrated transforms
-- nav_cam_transform = transform(vec3(0.1157+0.002, -0.0422, -0.0826), quat4(-0.46938154, -0.52978318, -0.5317378, -0.46504373)),
@@ -93,7 +98,9 @@ robot_camera_calibrations = {
},
gain=50,
exposure=150
- }
+ },
+ nav_cam_to_haz_cam_timestamp_offset = -0.02,
+ nav_cam_to_sci_cam_timestamp_offset = 0.18
}
-- PMC bus ordering and i2c trims {stbd, port}
diff --git a/astrobee/config/tools/graph_bag.config b/astrobee/config/tools/graph_bag.config
index 55969624f5..3008537967 100644
--- a/astrobee/config/tools/graph_bag.config
+++ b/astrobee/config/tools/graph_bag.config
@@ -21,6 +21,9 @@ imu_min_msg_spacing = 0
-- flight_mode
flight_mode_msg_delay = 0
flight_mode_min_msg_spacing = 0
+-- depth odometry
+depth_odometry_msg_delay = 0
+depth_odometry_min_msg_spacing = 0
-- optical flow
of_msg_delay = 0
of_min_msg_spacing = 0
diff --git a/astrobee/config/transforms.config b/astrobee/config/transforms.config
index 92642622e0..01750605d4 100644
--- a/astrobee/config/transforms.config
+++ b/astrobee/config/transforms.config
@@ -41,13 +41,6 @@ transforms = {
{ global = false, parent = "body", child = "sci_cam",
transform = sci_cam_transform },
- -- TRANSFORMS BETWEEN CAMERAS
- -- For some reason this interfers with placing the bot in the right location
- -- { global = false, parent = "haz_cam", child = "nav_cam",
- -- transform = hazcam_to_navcam_transform },
- -- { global = false, parent = "sci_cam", child = "haz_cam",
- -- transform = scicam_to_hazcam_transform },
-
-- IMU
{ global = false, parent = "body", child = "imu",
diff --git a/astrobee/launch/offline_localization/enable_localization b/astrobee/launch/offline_localization/enable_localization
new file mode 100755
index 0000000000..5fe9311f96
--- /dev/null
+++ b/astrobee/launch/offline_localization/enable_localization
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Run the command to enable localization. If it fails, try again after a short time.
+
+while [ 1 ]; do
+ rosservice call --wait /loc/ml/enable true
+ ans=$?
+ if [ "$ans" -eq 0 ]; then
+ break
+ fi
+ sleep 0.25
+done
+
+
+
diff --git a/astrobee/launch/offline_localization/loc_rviz.launch b/astrobee/launch/offline_localization/loc_rviz.launch
index 58001c1cf0..b0317858a9 100644
--- a/astrobee/launch/offline_localization/loc_rviz.launch
+++ b/astrobee/launch/offline_localization/loc_rviz.launch
@@ -31,8 +31,6 @@
-
-
diff --git a/astrobee/launch/offline_localization/localization_from_bag.launch b/astrobee/launch/offline_localization/localization_from_bag.launch
index 20305126c0..54fbd81976 100644
--- a/astrobee/launch/offline_localization/localization_from_bag.launch
+++ b/astrobee/launch/offline_localization/localization_from_bag.launch
@@ -24,13 +24,14 @@
-
+
+
-
+
@@ -79,6 +80,13 @@
+
+
+
+
+
+
+
diff --git a/astrobee/launch/offline_localization/record_localization.launch b/astrobee/launch/offline_localization/record_localization.launch
index 2df4d712bb..a5ab1c75d8 100644
--- a/astrobee/launch/offline_localization/record_localization.launch
+++ b/astrobee/launch/offline_localization/record_localization.launch
@@ -18,5 +18,5 @@
-
+
diff --git a/astrobee/launch/offline_localization/replay_localization.launch b/astrobee/launch/offline_localization/replay_localization.launch
index f5756ebcae..7f822936c9 100644
--- a/astrobee/launch/offline_localization/replay_localization.launch
+++ b/astrobee/launch/offline_localization/replay_localization.launch
@@ -29,5 +29,5 @@
-
+
diff --git a/astrobee/launch/offline_localization/sparse_mapping_matching_from_bag.launch b/astrobee/launch/offline_localization/sparse_mapping_matching_from_bag.launch
new file mode 100644
index 0000000000..b4b9d841f3
--- /dev/null
+++ b/astrobee/launch/offline_localization/sparse_mapping_matching_from_bag.launch
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/robot/MLP.launch b/astrobee/launch/robot/MLP.launch
index 1381bea27a..b2a8fe6e7c 100644
--- a/astrobee/launch/robot/MLP.launch
+++ b/astrobee/launch/robot/MLP.launch
@@ -38,7 +38,7 @@
+ name="mlp_mapper" output="$(arg output)" launch-prefix="nice -n 10"/>
+
+
+
+
+
+
+
+
+
+
@@ -387,7 +397,16 @@
-
+
+
+
+
+
+
+
+
+
+
diff --git a/astrobee/launch/sim.launch b/astrobee/launch/sim.launch
index d390178151..6f27924d7f 100644
--- a/astrobee/launch/sim.launch
+++ b/astrobee/launch/sim.launch
@@ -65,13 +65,16 @@
name="pose"
default="0 0 -0.7 0 0 0 1" />
-
-
+
+
+
+
+
@@ -168,7 +171,10 @@
-
+
+
@@ -209,7 +215,10 @@
-
+
+
diff --git a/astrobee/readme.md b/astrobee/readme.md
index 55df00836b..aac20de4ba 100644
--- a/astrobee/readme.md
+++ b/astrobee/readme.md
@@ -131,6 +131,9 @@ connection to the LLP (in case it is absent from the test rig):
`roslaunch astrobee spawn.launch world:=iss ns:=bumble`
+See more details in \ref running-the-sim for how to run the robot in
+simulation.
+
4. Do a processor-in-the-loop simulation
`roslaunch astrobee sim.launch llp:=10.42.0.10 mlp:=10.42.0.11`
diff --git a/astrobee/resources/rviz/iss.rviz b/astrobee/resources/rviz/iss.rviz
index 9b3b76074f..60279c7f72 100644
--- a/astrobee/resources/rviz/iss.rviz
+++ b/astrobee/resources/rviz/iss.rviz
@@ -531,7 +531,7 @@ Visualization Manager:
Name: "DEBUG: SciCam"
Normalize Range: true
Queue Size: 2
- Transport Hint: raw
+ Transport Hint: compressed
Unreliable: false
Value: false
- Class: rviz/Image
diff --git a/astrobee/resources/rviz/iss_viz.rviz b/astrobee/resources/rviz/iss_viz.rviz
index e1481638f6..b35796e36c 100644
--- a/astrobee/resources/rviz/iss_viz.rviz
+++ b/astrobee/resources/rviz/iss_viz.rviz
@@ -475,7 +475,7 @@ Visualization Manager:
Name: "DEBUG: SciCam"
Normalize Range: true
Queue Size: 2
- Transport Hint: raw
+ Transport Hint: compressed
Unreliable: false
Value: false
- Class: rviz/Image
diff --git a/communications/dds_msgs/CMakeLists.txt b/communications/dds_msgs/CMakeLists.txt
index c593054aa4..025c41089d 100644
--- a/communications/dds_msgs/CMakeLists.txt
+++ b/communications/dds_msgs/CMakeLists.txt
@@ -35,7 +35,17 @@ if (USE_DDS)
set(MIRO_ROOT_DIR ${SORACORE_ROOT_DIR})
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../cmake")
- find_package(Qt4 4.6.0 REQUIRED QtXml)
+
+ # find Qt version according to OS
+ find_program(LSB_RELEASE_EXEC lsb_release)
+ execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if (${LSB_RELEASE_VERSION_SHORT} VERSION_GREATER 18.04)
+ find_package(Qt5Xml REQUIRED)
+ else ()
+ find_package(Qt4 4.6.0 REQUIRED QtXml)
+ endif ()
+
find_package(Miro REQUIRED)
find_package(RtiDds REQUIRED)
diff --git a/communications/dds_ros_bridge/CMakeLists.txt b/communications/dds_ros_bridge/CMakeLists.txt
index c0ee7aa106..b86f728931 100644
--- a/communications/dds_ros_bridge/CMakeLists.txt
+++ b/communications/dds_ros_bridge/CMakeLists.txt
@@ -49,8 +49,16 @@ set(MIRO_ROOT_DIR ${SORACORE_ROOT_DIR})
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-# just calls the normal one
-find_package(Qt4 4.6.0 REQUIRED QtXml)
+# find Qt version according to OS
+find_program(LSB_RELEASE_EXEC lsb_release)
+execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+if (${LSB_RELEASE_VERSION_SHORT} VERSION_GREATER 18.04)
+ find_package(Qt5Xml REQUIRED)
+else ()
+ find_package(Qt4 4.6.0 REQUIRED QtXml)
+endif ()
+
find_package(Miro REQUIRED)
find_package(RtiDds REQUIRED)
find_package(Soracore REQUIRED)
@@ -88,15 +96,22 @@ add_library(dds_ros_bridge
)
target_compile_definitions(dds_ros_bridge PUBLIC ${RTIDDS_DEFINE_FLAGS})
add_dependencies(dds_ros_bridge ${catkin_EXPORTED_TARGETS})
-target_link_libraries(dds_ros_bridge rapidIo ${Boost_LIBRARIES} ${catkin_LIBRARIES})
-
+if (${LSB_RELEASE_VERSION_SHORT} VERSION_GREATER 18.04)
+ target_link_libraries(dds_ros_bridge rapidIo Qt5::Xml ${Boost_LIBRARIES} ${catkin_LIBRARIES})
+else ()
+ target_link_libraries(dds_ros_bridge rapidIo ${Boost_LIBRARIES} ${catkin_LIBRARIES})
+endif ()
add_library(astrobee_astrobee_bridge
src/astrobee_astrobee_bridge.cc
)
target_compile_definitions(astrobee_astrobee_bridge PUBLIC ${RTIDDS_DEFINE_FLAGS})
add_dependencies(astrobee_astrobee_bridge ${catkin_EXPORTED_TARGETS})
-target_link_libraries(astrobee_astrobee_bridge Qt4::QtXml rapidIo ${Boost_LIBRARIES} ${catkin_LIBRARIES})
+if (${LSB_RELEASE_VERSION_SHORT} VERSION_GREATER 18.04)
+ target_link_libraries(astrobee_astrobee_bridge Qt5::Xml rapidIo ${Boost_LIBRARIES} ${catkin_LIBRARIES})
+else ()
+ target_link_libraries(astrobee_astrobee_bridge rapidIo ${Boost_LIBRARIES} ${catkin_LIBRARIES})
+endif ()
#############
diff --git a/communications/ff_msgs/msg/CpuNodeState.msg b/communications/ff_msgs/msg/CpuNodeState.msg
new file mode 100644
index 0000000000..f9e9ad345c
--- /dev/null
+++ b/communications/ff_msgs/msg/CpuNodeState.msg
@@ -0,0 +1,24 @@
+# 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.
+#
+# State of a CPU load for a node.
+
+# Node name
+string name
+
+# The load (in percentages) of the cpu
+float32 load
diff --git a/communications/ff_msgs/msg/CpuStateStamped.msg b/communications/ff_msgs/msg/CpuStateStamped.msg
index 4df093f118..2a6e2402f5 100644
--- a/communications/ff_msgs/msg/CpuStateStamped.msg
+++ b/communications/ff_msgs/msg/CpuStateStamped.msg
@@ -45,3 +45,5 @@ float32 temp
# or not all of them are enabled.
ff_msgs/CpuState[] cpus
+# Load usage of individual ROS nodes
+ff_msgs/CpuNodeState[] load_nodes
\ No newline at end of file
diff --git a/communications/ff_msgs/msg/DepthCorrespondence.msg b/communications/ff_msgs/msg/DepthCorrespondence.msg
new file mode 100644
index 0000000000..2ef1b765ec
--- /dev/null
+++ b/communications/ff_msgs/msg/DepthCorrespondence.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.
+#
+ImagePoint source_image_point
+ImagePoint target_image_point
+geometry_msgs/Point source_3d_point
+geometry_msgs/Point target_3d_point
diff --git a/communications/ff_msgs/msg/DepthOdometry.msg b/communications/ff_msgs/msg/DepthOdometry.msg
new file mode 100644
index 0000000000..d6461babfa
--- /dev/null
+++ b/communications/ff_msgs/msg/DepthOdometry.msg
@@ -0,0 +1,24 @@
+# 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.
+#
+
+Header header
+ff_msgs/Odometry odometry
+ff_msgs/DepthCorrespondence[] correspondences
+bool valid_image_points
+bool valid_points_3d
+float32 runtime
diff --git a/communications/ff_msgs/msg/ImagePoint.msg b/communications/ff_msgs/msg/ImagePoint.msg
new file mode 100644
index 0000000000..7dddac685a
--- /dev/null
+++ b/communications/ff_msgs/msg/ImagePoint.msg
@@ -0,0 +1,20 @@
+# 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.
+#
+
+float32 x
+float32 y
diff --git a/communications/ff_msgs/msg/Odometry.msg b/communications/ff_msgs/msg/Odometry.msg
new file mode 100644
index 0000000000..c8d7c86fb0
--- /dev/null
+++ b/communications/ff_msgs/msg/Odometry.msg
@@ -0,0 +1,22 @@
+# 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.
+#
+
+time source_time
+time target_time
+geometry_msgs/PoseWithCovariance sensor_F_source_T_target
+geometry_msgs/PoseWithCovariance body_F_source_T_target
diff --git a/debian/changelog b/debian/changelog
index 5cd459ed68..3c09cf9b41 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+astrobee (0.16.1) testing; urgency=medium
+
+ * depth odometry
+ * better performance evaluation
+ * multiple other fixes and improvements
+
+ -- Astrobee Flight Software Wed, 12 Jan 2022 14:55:11 -0800
+
astrobee (0.16.0) testing; urgency=medium
* project compiles with catkin
diff --git a/doc/general_documentation/INSTALL.md b/doc/general_documentation/INSTALL.md
index ef25d418c3..215ef7ad4b 100644
--- a/doc/general_documentation/INSTALL.md
+++ b/doc/general_documentation/INSTALL.md
@@ -102,7 +102,14 @@ of turning on and off options. To see which options are supported, simply run
source ~/.bashrc
popd
-The configure script modifies your ``.bashrc`` to source ``setup.bash`` for
+In you run a Zsh session, then
+
+ pushd $ASTROBEE_WS
+ ./src/scripts/configure.sh -l -F -D
+ source ~/.zshrc
+ popd
+
+The configure script modifies your ``.bashrc``/``.zshrc`` to source ``setup.bash``/``setup.zsh`` for
the current ROS distribution and to set CMAKE_PREFIX_PATH. It is suggested
to examine it and see if all changes were made correctly.
diff --git a/doc/general_documentation/astrobee_usage.md b/doc/general_documentation/astrobee_usage.md
index 618adaf4ca..3fe5b8ba53 100644
--- a/doc/general_documentation/astrobee_usage.md
+++ b/doc/general_documentation/astrobee_usage.md
@@ -3,6 +3,8 @@
\subpage astrobee
+\subpage astrobee-code-style
+
\subpage teleop
\subpage release
diff --git a/hardware/pico_driver/CMakeLists.txt b/hardware/pico_driver/CMakeLists.txt
index 18bdfc62cd..2d1a7215f3 100644
--- a/hardware/pico_driver/CMakeLists.txt
+++ b/hardware/pico_driver/CMakeLists.txt
@@ -59,8 +59,9 @@ add_library(pico_driver
add_dependencies(pico_driver ${catkin_EXPORTED_TARGETS})
target_link_libraries(pico_driver ${royale_LIBRARIES} ${EIGEN_LIBRARIES} ${catkin_LIBRARIES})
-## Declare a C++ executable: bag_to_csv
-add_executable(pico_proxy tools/pico_proxy.cc)
+add_library(pico_proxy
+ src/pico_proxy.cc
+)
add_dependencies(pico_proxy ${catkin_EXPORTED_TARGETS})
target_link_libraries(pico_proxy
pico_driver gflags glog ${catkin_LIBRARIES})
@@ -94,6 +95,11 @@ install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
+install(TARGETS pico_proxy
+ ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+)
# Mark nodelet_plugin for installation
install(FILES nodelet_plugins.xml
@@ -101,10 +107,8 @@ install(FILES nodelet_plugins.xml
)
# Install C++ executables
-install(TARGETS pico_proxy DESTINATION bin)
install(TARGETS pico_tool DESTINATION bin)
install(CODE "execute_process(
- COMMAND ln -s ../../bin/pico_proxy share/${PROJECT_NAME}
COMMAND ln -s ../../bin/pico_tool share/${PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}
OUTPUT_QUIET
diff --git a/hardware/pico_driver/launch/pico_proxy.launch b/hardware/pico_driver/launch/pico_proxy.launch
index 1a06461447..45f7766df0 100644
--- a/hardware/pico_driver/launch/pico_proxy.launch
+++ b/hardware/pico_driver/launch/pico_proxy.launch
@@ -15,12 +15,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/hardware/pico_driver/nodelet_plugins.xml b/hardware/pico_driver/nodelet_plugins.xml
index 2ac4fa2928..9c65bb3490 100644
--- a/hardware/pico_driver/nodelet_plugins.xml
+++ b/hardware/pico_driver/nodelet_plugins.xml
@@ -1,5 +1,12 @@
-
-
- Nodelet for pico_driver::PicoDriverNodelet
-
-
\ No newline at end of file
+
+
+
+ Nodelet for pico_driver::PicoDriverNodelet
+
+
+
+
+ Nodelet for pico_proxy::PicoProxyNodelet
+
+
+
\ No newline at end of file
diff --git a/hardware/pico_driver/src/pico_proxy.cc b/hardware/pico_driver/src/pico_proxy.cc
new file mode 100644
index 0000000000..291a5e6302
--- /dev/null
+++ b/hardware/pico_driver/src/pico_proxy.cc
@@ -0,0 +1,246 @@
+/* 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.
+ */
+
+// Core ROS
+#include
+#include
+#include
+
+// Shared libraries
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+// Messages
+#include
+#include
+
+#include
+#include