New Cartographer API, removes SensorBridgeOptions. (#180)
parent
d09c33e8f8
commit
ca5b7d1bff
|
@ -240,8 +240,7 @@ void Node::Initialize() {
|
||||||
|
|
||||||
trajectory_id_ = map_builder_.AddTrajectoryBuilder(expected_sensor_ids_);
|
trajectory_id_ = map_builder_.AddTrajectoryBuilder(expected_sensor_ids_);
|
||||||
sensor_bridge_ = carto::common::make_unique<SensorBridge>(
|
sensor_bridge_ = carto::common::make_unique<SensorBridge>(
|
||||||
options_.sensor_bridge_options, &tf_bridge_,
|
&tf_bridge_, map_builder_.GetTrajectoryBuilder(trajectory_id_));
|
||||||
map_builder_.GetTrajectoryBuilder(trajectory_id_));
|
|
||||||
|
|
||||||
submap_list_publisher_ =
|
submap_list_publisher_ =
|
||||||
node_handle_.advertise<::cartographer_ros_msgs::SubmapList>(
|
node_handle_.advertise<::cartographer_ros_msgs::SubmapList>(
|
||||||
|
@ -315,8 +314,7 @@ bool Node::HandleFinishTrajectory(
|
||||||
// Start a new trajectory.
|
// Start a new trajectory.
|
||||||
trajectory_id_ = map_builder_.AddTrajectoryBuilder(expected_sensor_ids_);
|
trajectory_id_ = map_builder_.AddTrajectoryBuilder(expected_sensor_ids_);
|
||||||
sensor_bridge_ = carto::common::make_unique<SensorBridge>(
|
sensor_bridge_ = carto::common::make_unique<SensorBridge>(
|
||||||
options_.sensor_bridge_options, &tf_bridge_,
|
&tf_bridge_, map_builder_.GetTrajectoryBuilder(trajectory_id_));
|
||||||
map_builder_.GetTrajectoryBuilder(trajectory_id_));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ NodeOptions CreateNodeOptions(
|
||||||
options.map_builder_options =
|
options.map_builder_options =
|
||||||
::cartographer::mapping::CreateMapBuilderOptions(
|
::cartographer::mapping::CreateMapBuilderOptions(
|
||||||
lua_parameter_dictionary->GetDictionary("map_builder").get());
|
lua_parameter_dictionary->GetDictionary("map_builder").get());
|
||||||
options.sensor_bridge_options = CreateSensorBridgeOptions(
|
|
||||||
lua_parameter_dictionary->GetDictionary("sensor_bridge").get());
|
|
||||||
options.map_frame = lua_parameter_dictionary->GetString("map_frame");
|
options.map_frame = lua_parameter_dictionary->GetString("map_frame");
|
||||||
options.tracking_frame =
|
options.tracking_frame =
|
||||||
lua_parameter_dictionary->GetString("tracking_frame");
|
lua_parameter_dictionary->GetString("tracking_frame");
|
||||||
|
|
|
@ -29,7 +29,6 @@ namespace cartographer_ros {
|
||||||
// Top-level options of Cartographer's ROS integration.
|
// Top-level options of Cartographer's ROS integration.
|
||||||
struct NodeOptions {
|
struct NodeOptions {
|
||||||
::cartographer::mapping::proto::MapBuilderOptions map_builder_options;
|
::cartographer::mapping::proto::MapBuilderOptions map_builder_options;
|
||||||
SensorBridgeOptions sensor_bridge_options;
|
|
||||||
string map_frame;
|
string map_frame;
|
||||||
string tracking_frame;
|
string tracking_frame;
|
||||||
string published_frame;
|
string published_frame;
|
||||||
|
|
|
@ -37,46 +37,19 @@ const string& CheckNoLeadingSlash(const string& frame_id) {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
SensorBridgeOptions CreateSensorBridgeOptions(
|
|
||||||
carto::common::LuaParameterDictionary* const lua_parameter_dictionary) {
|
|
||||||
SensorBridgeOptions options;
|
|
||||||
options.constant_odometry_translational_variance =
|
|
||||||
lua_parameter_dictionary->GetDouble(
|
|
||||||
"constant_odometry_translational_variance");
|
|
||||||
options.constant_odometry_rotational_variance =
|
|
||||||
lua_parameter_dictionary->GetDouble(
|
|
||||||
"constant_odometry_rotational_variance");
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
SensorBridge::SensorBridge(
|
SensorBridge::SensorBridge(
|
||||||
const SensorBridgeOptions& options, const TfBridge* const tf_bridge,
|
const TfBridge* const tf_bridge,
|
||||||
carto::mapping::TrajectoryBuilder* const trajectory_builder)
|
carto::mapping::TrajectoryBuilder* const trajectory_builder)
|
||||||
: options_(options),
|
: tf_bridge_(tf_bridge), trajectory_builder_(trajectory_builder) {}
|
||||||
tf_bridge_(tf_bridge),
|
|
||||||
trajectory_builder_(trajectory_builder) {}
|
|
||||||
|
|
||||||
void SensorBridge::HandleOdometryMessage(
|
void SensorBridge::HandleOdometryMessage(
|
||||||
const string& topic, const nav_msgs::Odometry::ConstPtr& msg) {
|
const string& topic, const nav_msgs::Odometry::ConstPtr& msg) {
|
||||||
const carto::common::Time time = FromRos(msg->header.stamp);
|
const carto::common::Time time = FromRos(msg->header.stamp);
|
||||||
const Eigen::Matrix3d translational =
|
|
||||||
Eigen::Matrix3d::Identity() *
|
|
||||||
options_.constant_odometry_translational_variance;
|
|
||||||
const Eigen::Matrix3d rotational =
|
|
||||||
Eigen::Matrix3d::Identity() *
|
|
||||||
options_.constant_odometry_rotational_variance;
|
|
||||||
// clang-format off
|
|
||||||
carto::kalman_filter::PoseCovariance covariance;
|
|
||||||
covariance <<
|
|
||||||
translational, Eigen::Matrix3d::Zero(),
|
|
||||||
Eigen::Matrix3d::Zero(), rotational;
|
|
||||||
// clang-format on
|
|
||||||
const auto sensor_to_tracking = tf_bridge_->LookupToTracking(
|
const auto sensor_to_tracking = tf_bridge_->LookupToTracking(
|
||||||
time, CheckNoLeadingSlash(msg->child_frame_id));
|
time, CheckNoLeadingSlash(msg->child_frame_id));
|
||||||
if (sensor_to_tracking != nullptr) {
|
if (sensor_to_tracking != nullptr) {
|
||||||
trajectory_builder_->AddOdometerData(
|
trajectory_builder_->AddOdometerData(
|
||||||
topic, time, ToRigid3d(msg->pose.pose) * sensor_to_tracking->inverse(),
|
topic, time, ToRigid3d(msg->pose.pose) * sensor_to_tracking->inverse());
|
||||||
covariance);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,19 +32,11 @@
|
||||||
|
|
||||||
namespace cartographer_ros {
|
namespace cartographer_ros {
|
||||||
|
|
||||||
struct SensorBridgeOptions {
|
|
||||||
double constant_odometry_translational_variance;
|
|
||||||
double constant_odometry_rotational_variance;
|
|
||||||
};
|
|
||||||
|
|
||||||
SensorBridgeOptions CreateSensorBridgeOptions(
|
|
||||||
::cartographer::common::LuaParameterDictionary* lua_parameter_dictionary);
|
|
||||||
|
|
||||||
// Converts ROS messages into SensorData in tracking frame for the MapBuilder.
|
// Converts ROS messages into SensorData in tracking frame for the MapBuilder.
|
||||||
class SensorBridge {
|
class SensorBridge {
|
||||||
public:
|
public:
|
||||||
explicit SensorBridge(
|
explicit SensorBridge(
|
||||||
const SensorBridgeOptions& options, const TfBridge* tf_bridge,
|
const TfBridge* tf_bridge,
|
||||||
::cartographer::mapping::TrajectoryBuilder* trajectory_builder);
|
::cartographer::mapping::TrajectoryBuilder* trajectory_builder);
|
||||||
|
|
||||||
SensorBridge(const SensorBridge&) = delete;
|
SensorBridge(const SensorBridge&) = delete;
|
||||||
|
@ -68,7 +60,6 @@ class SensorBridge {
|
||||||
const string& frame_id,
|
const string& frame_id,
|
||||||
const ::cartographer::sensor::PointCloud& ranges);
|
const ::cartographer::sensor::PointCloud& ranges);
|
||||||
|
|
||||||
const SensorBridgeOptions options_;
|
|
||||||
const TfBridge* const tf_bridge_;
|
const TfBridge* const tf_bridge_;
|
||||||
::cartographer::mapping::TrajectoryBuilder* const trajectory_builder_;
|
::cartographer::mapping::TrajectoryBuilder* const trajectory_builder_;
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,10 +16,6 @@ include "map_builder.lua"
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
map_builder = MAP_BUILDER,
|
map_builder = MAP_BUILDER,
|
||||||
sensor_bridge = {
|
|
||||||
constant_odometry_translational_variance = 0.,
|
|
||||||
constant_odometry_rotational_variance = 0.,
|
|
||||||
},
|
|
||||||
map_frame = "map",
|
map_frame = "map",
|
||||||
tracking_frame = "base_link",
|
tracking_frame = "base_link",
|
||||||
published_frame = "base_link",
|
published_frame = "base_link",
|
||||||
|
|
|
@ -16,10 +16,6 @@ include "map_builder.lua"
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
map_builder = MAP_BUILDER,
|
map_builder = MAP_BUILDER,
|
||||||
sensor_bridge = {
|
|
||||||
constant_odometry_translational_variance = 0.,
|
|
||||||
constant_odometry_rotational_variance = 0.,
|
|
||||||
},
|
|
||||||
map_frame = "map",
|
map_frame = "map",
|
||||||
tracking_frame = "base_link",
|
tracking_frame = "base_link",
|
||||||
published_frame = "base_link",
|
published_frame = "base_link",
|
||||||
|
|
|
@ -16,10 +16,6 @@ include "map_builder.lua"
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
map_builder = MAP_BUILDER,
|
map_builder = MAP_BUILDER,
|
||||||
sensor_bridge = {
|
|
||||||
constant_odometry_translational_variance = 0.,
|
|
||||||
constant_odometry_rotational_variance = 0.,
|
|
||||||
},
|
|
||||||
map_frame = "map",
|
map_frame = "map",
|
||||||
tracking_frame = "base_footprint",
|
tracking_frame = "base_footprint",
|
||||||
published_frame = "base_footprint",
|
published_frame = "base_footprint",
|
||||||
|
|
|
@ -16,10 +16,6 @@ include "map_builder.lua"
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
map_builder = MAP_BUILDER,
|
map_builder = MAP_BUILDER,
|
||||||
sensor_bridge = {
|
|
||||||
constant_odometry_translational_variance = 0.,
|
|
||||||
constant_odometry_rotational_variance = 0.,
|
|
||||||
},
|
|
||||||
map_frame = "map",
|
map_frame = "map",
|
||||||
tracking_frame = "horizontal_laser_link",
|
tracking_frame = "horizontal_laser_link",
|
||||||
published_frame = "horizontal_laser_link",
|
published_frame = "horizontal_laser_link",
|
||||||
|
|
|
@ -55,12 +55,6 @@ use_odometry_data
|
||||||
If enabled, subscribes to `nav_msgs/Odometry`_ on the topic "odom". Odometry
|
If enabled, subscribes to `nav_msgs/Odometry`_ on the topic "odom". Odometry
|
||||||
must be provided in this case, and the information will be included in SLAM.
|
must be provided in this case, and the information will be included in SLAM.
|
||||||
|
|
||||||
sensor_bridge.constant_odometry_translational_variance
|
|
||||||
The variance to use for the translational component of odometry.
|
|
||||||
|
|
||||||
sensor_bridge.constant_odometry_rotational_variance
|
|
||||||
The variance to use for the rotational component of odometry.
|
|
||||||
|
|
||||||
use_horizontal_laser
|
use_horizontal_laser
|
||||||
If enabled, the node subscribes to `sensor_msgs/LaserScan`_ on the "scan"
|
If enabled, the node subscribes to `sensor_msgs/LaserScan`_ on the "scan"
|
||||||
topic. If 2D SLAM is used, either this or *use_horizontal_multi_echo_laser*
|
topic. If 2D SLAM is used, either this or *use_horizontal_multi_echo_laser*
|
||||||
|
|
Loading…
Reference in New Issue