Cartographer 全パラメータ＆意訳コメント

# はじめに

Google の自己位置推定パッケージ Cartographer の全パラメータに、公式ガイドのコメント意訳を付け整理しました。
（日本語の意訳は DeepL 頼みで参考程度に…。　わかる範囲での全パラメータです。）

リファレンス的に使えると良いなと思って作りました。
公式ガイドは、ページ下部にリンクを置きました。

誤りや修正オススメなど、フィードバックのコメントを残してもらえれば嬉しいです。

# 全パラメータ＆コメント

*.lua に書くパラメータです。パラメータの次行をコメントにしています。
代入値はデフォルト値。（cartographer/configuration_files　にあるファイルより引用）

大項目として、<b>options.、POSE_GRAPH.、TRAJECTORY_BUILDER_2D.、TRAJECTORY_BUILDER_3D.、TRAJECTORY_BUILDER. </b> があります。
また、中項目として、パラメータの途中の文字列のコメントもページ下部に置いておきます。
小項目がひとつひとつのパラメータになります。

```lua
大項目.中項目.小項目 = true
-- パラメータの設定はこんな感じになります
```


通常は、必要なパラメータのみをまとめて、１つの lua ファイルに書き込む感じです。

（なお、以下は１行が長いので、横スクロールするには
　　・コード部をクリック後にキーボードの左右キーを押すか
　　・コード下部のスクロールバーを使うか
　　・マウスで右へ文字列をぐいっとドラッグするか
　　・あるいはスマホなら横スワイプ
　　　で見れます。）
（chrome なら [Ctrl + F] ページ検索なども利用してください。）




## options 設定

```lua
options = {
  map_builder = MAP_BUILDER,
    -- >  [string ?] / ???
  trajectory_builder = TRAJECTORY_BUILDER,
    -- >  [???] / ???
  map_frame = "map",
    -- >  [string ?] / The ROS frame ID to use for publishing submaps, the parent
    -- >  frame of poses, usually “map”.
    -- >       サブマップの publish に使用するROSフレームID。
    -- >       poses の親フレームで、通常は "map"。
  tracking_frame = "imu_link",
    -- >  [string ?] / The ROS frame ID of the frame that is tracked by the SLAM
    -- >  algorithm. If an IMU is used, it should be at its position, although
    -- >  it might be rotated. A common choice is “imu_link”.
    -- >       SLAM時にトラッキングされるROSフレームID。
    -- >       IMUを使用する場合は、回転するとしてもその位置であるようにする。
    -- >       通常は "imu_link "。
  published_frame = "base_link",
    -- >  [string ?] / The ROS frame ID to use as the child frame for publishing
    -- >  poses. For example “odom” if an “odom” frame is supplied by a different
    -- >  part of the system. In this case the pose of “odom” in the map_frame will
    -- >  be published. Otherwise, setting it to “base_link” is likely appropriate.
    -- >       poses を publish するための子フレームとして使用する ROS フレーム ID。
    -- >       例えば "odom" フレームが他から提供されている場合は、"odom" となります。
    -- >       この場合、map_frame 内の "odom" の pose が publish されます。
    -- >       それ以外の場合は、"base_link" に設定するのが適切と思われます。
  odom_frame = "odom",
    -- >  [string ?] / Only used if provide_odom_frame is true. The frame between
    -- >  published_frame and map_frame to be used for publishing the
    -- >  (non-loop-closed) local SLAM result. Usually “odom”.
    -- >       provide_odom_frame の設定が true の場合のみ使用される。
    -- >       （非ループクローズドの）Local SLAM の結果を Publish するために使用する
    -- >       published_frame と map_frame の間のフレーム。
    -- >       通常は "odom"。
  provide_odom_frame = false,
    -- >  [bool] / If enabled, the local, non-loop-closed, continuous pose will be
    -- >  published as the odom_frame in the map_frame.
    -- >       有効にすると、Local の non-loop-closed かつ連続的な pose が、map_frame 内
    -- >       での odom_frame として publish されます。
  publish_frame_projected_to_2d = false,
    -- >  [bool] / If enabled, the published pose will be restricted to a pure 2D
    -- >  pose (no roll, pitch, or z-offset). This prevents potentially unwanted
    -- >  out-of-plane poses in 2D mode that can occur due to the pose extrapolation
    -- >  step (e.g. if the pose shall be published as a ‘base-footprint’-like frame)
    -- >       有効にすると、publish されるpose は純粋な2Dポーズに制限されます
    -- >      （ロール、ピッチ、z-オフセットなし）。これは、pose extrapolation step によって
    -- >       発生する可能性のある、2Dモードでの不要なポーズが面外になる事を防止します。
    -- >       （例：ポーズが 'base-footprint' 等のフレームとしてパブリッシュされる場合）
  use_pose_extrapolator = true,
    -- >  [bool] / ???
  use_odometry = false,
    -- >  [bool] / 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.
    -- >       有効にすると、nav_msgs/Odometry 型の "odom" というトピックを subscribe する。
    -- >       この場合、オドメトリデータが提供されている必要があり、その情報はSLAMに利用される。
  use_nav_sat = false,
    -- >  [bool] / If enabled, subscribes to sensor_msgs/NavSatFix on the topic “fix”.
    -- >  Navigation data must be provided in this case, and the information will
    -- >  be included in the global SLAM.
    -- >       有効にすると、sensor_msgs/NavSatFix の "fix" というトピックを Subscribeする。
    -- >       この場合、ナビゲーションデータが提供されている必要があり、その情報はグローバルSLAMに利用される。
  use_landmarks = false,
    -- >  [bool] / If enabled, subscribes to cartographer_ros_msgs/LandmarkList on
    -- >  the topic “landmarks”. Landmarks must be provided, as
    -- >  cartographer_ros_msgs/LandmarkEntry within
    -- >  cartographer_ros_msgs/LandmarkList.
    -- >  If cartographer_ros_msgs/LandmarkEntry data is provided the information
    -- >  will be included in the SLAM accoding to the ID of the
    -- >  cartographer_ros_msgs/LandmarkEntry.
    -- >  The cartographer_ros_msgs/LandmarkList should be provided at a sample
    -- >  rate comparable to the other sensors. The list can be empty but has to
    -- >  be provided because Cartographer strictly time orders sensor data in
    -- >  order to make the landmarks deterministic. However it is possible to
    -- >  set the trajectory builder option “collate_landmarks” to false and
    -- >  allow for a non-deterministic but also non-blocking approach.
    -- >       有効にすると、cartographer_ros_msgs/LandmarkList 型のトピック "landmarks" を
    -- >       Subscribe するようになります。
    -- >       ランドマークは cartographer_ros_msgs/LandmarkList 内の
    -- >       cartographer_ros_msgs/LandmarkEntry として提供される必要があります。
    -- >       cartographer_ros_msgs/LandmarkEntry データが提供された場合、情報は
    -- >       cartographer_ros_msgs/LandmarkEntry の ID に従って SLAM に利用されます。
    -- >       cartographer_ros_msgs/LandmarkList は他のセンサーと同等のサンプルレートで
    -- >       提供される必要があります。リストは空でも構いませんが、Cartographer はランドマーク
    -- >       を決めるにあたりセンサーデータを厳密に時間順で並べるので、必ず提供されていなければ
    -- >       なりません。しかし、Trajectory Builderのオプション "collate_landmarks "をfalseに
    -- >       設定することで、非決定的な、しかしノンブロッキングなアプローチを可能にすることができます。
  num_laser_scans = 1,
    -- >  [int] / Number of laser scan topics to subscribe to. Subscribes to
    -- >  sensor_msgs/LaserScan on the “scan” topic for one laser scanner, or
    -- >  topics “scan_1”, “scan_2”, etc. for multiple laser scanners.
    -- >       Subscribe するレーザースキャントピックの数。
    -- >       1台のレーザースキャナの場合は "scan "トピック、複数のレーザースキャナの場合は
    -- >       "scan_1", "scan_2 "などのトピックで、sensor_msgs/LaserScan 型として Subscribe します。
  num_multi_echo_laser_scans = 0,
    -- >  [int] / Number of multi-echo laser scan topics to subscribe to.
    -- >  Subscribes to sensor_msgs/MultiEchoLaserScan on the “echoes” topic
    -- >  for one laser scanner, or topics “echoes_1”, “echoes_2”, etc. for
    -- >  multiple laser scanners.
    -- >       Subscribe するマルチエコーレーザースキャンのトピック数。
    -- >       sensor_msgs/MultiEchoLaserScan 型で、1台のレーザースキャナの場合は
    -- >       "echoes" トピック、複数台の場合は "echoes_1", "echoes_2" 等のトピックを Subscribe します。
  num_subdivisions_per_laser_scan = 1,
    -- >  [int] / Number of point clouds to split each received (multi-echo)
    -- >  laser scan into. Subdividing a scan makes it possible to unwarp scans
    -- >  acquired while the scanners are moving. There is a corresponding
    -- >  trajectory builder option to accumulate the subdivided scans into a
    -- >  point cloud that will be used for scan matching.
    -- >       受信した（マルチエコー）レーザースキャンを分割する点群の数。
    -- >       スキャンを分割することで、スキャナーの移動中に取得したスキャンを歪まないように
    -- >       することが可能になる。また、スキャンマッチングに使用する点群に分割されたスキャンを
    -- >       蓄積する Trajectory ビルダーオプションも用意されています。
  num_point_clouds = 0,
    -- >  [int] / Number of point cloud topics to subscribe to. Subscribes to
    -- >  sensor_msgs/PointCloud2 on the “points2” topic for one rangefinder,
    -- >  or topics “points2_1”, “points2_2”, etc. for multiple rangefinders.
    -- >       Subscribe する点群トピックの数。
    -- >       sensor_msgs/PointCloud2 型で、1台のレンジファインダーの場合は "points2 "トピック、
    -- >       複数台の場合は "points2_1", "point2_2" 等のトピックを Subscribe します。
  lookup_transform_timeout_sec = 0.2,
    -- >  [double] / Timeout in seconds to use for looking up transforms
    -- >  using tf2.
    -- >       tf2 の transform を検索する際のタイムアウト (秒)。
  submap_publish_period_sec = 0.3,
    -- >  [double] / Interval in seconds at which to publish the submap poses,
    -- >  e.g. 0.3 seconds.
    -- >       サブマップ poses を publish する間隔（秒）。例： 0.3 秒。
  pose_publish_period_sec = 5e-3,
    -- >  [double] / Interval in seconds at which to publish poses, e.g. 5e-3
    -- >  for a frequency of 200 Hz.
    -- >       poses を publish する間隔（秒） 例：200Hzの場合 5e-3
  trajectory_publish_period_sec = 30e-3,
    -- >  [double] / Interval in seconds at which to publish the trajectory
    -- >  markers, e.g. 30e-3 for 30 milliseconds.
    -- >       Trajectory マーカーを publish する間隔（秒）、例：30ミリ秒なら30e-3。
  rangefinder_sampling_ratio = 1.,
    -- >  [double] / Fixed ratio sampling for range finders messages.
    -- >       レンジファインダーメッセージ用のサンプリング比。
  odometry_sampling_ratio = 1.,
    -- >  [double] / Fixed ratio sampling for odometry messages.
    -- >       オドメトリメッセージ用のサンプリング比。
  fixed_frame_pose_sampling_ratio = 1.,
    -- >  [double] / ???
  imu_sampling_ratio = 1.,
    -- >  [double] / Fixed ratio sampling for IMU messages.
    -- >       IMU メッセージ用のサンプリング比。
  landmarks_sampling_ratio = 1.,
    -- >  [double] / Fixed ratio sampling for landmarks messages.
    -- >       ランドマークメッセージ用のサンプリング比。

  -- 下記ページから見つけた差分です。
  -- (https://google-cartographer-ros.readthedocs.io/en/latest/configuration.html)

  -- publish_to_tf = -- true/false, (デフォルト値は不明)
    -- >  [bool] / Enable or disable providing of TF transforms.
    -- >       TF 変換の提供の有効・無効を設定します。
  -- publish_tracked_pose = -- true/false, (デフォルト値は不明)
    -- >  [bool] / Enable publishing of tracked pose as a
    -- >  geometry_msgs/PoseStamped to topic “tracked_pose”.
    -- >       トラッキングした pose を geometry_msgs/PoseStamped 型として、
    -- >       "tracked_pose " トピックに publish できるようにします。
  -- fixed_frame_sampling_ratio = 1., (デフォルト値は不明) (使い方わからず)
    -- >  [double ?] / Fixed ratio sampling for fixed frame messages.
    -- >       fixed frame メッセージ用のサンプリング比。
}
```


## Global （大域的） SLAM 設定
（<b>POSE_GRAPH.</b> の名前で設定します。）

```lua
MAP_BUILDER.use_trajectory_builder_2d = false
  -- >  [bool] / Not yet documented.
MAP_BUILDER.use_trajectory_builder_3d = false
  -- >  [bool] / Not yet documented.
MAP_BUILDER.num_background_threads = 4
  -- >  [int32] / Number of threads to use for background computations.
  -- >       バックグラウンドでの計算に使用するスレッド数。
MAP_BUILDER.pose_graph = POSE_GRAPH
  -- >  [cartographer.mapping.proto.PoseGraphOptions] / Not yet documented.
MAP_BUILDER.collate_by_trajectory = false
  -- >  [bool] / ???
  -- >  (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/map_builder.cc)


POSE_GRAPH.optimize_every_n_nodes = 90
  -- >  [int32] / Online loop closure: If positive, will run the loop closure
  -- >  while the map is built.
  -- >       オンライン ループクロージャ：　正の値の場合、地図生成時に
  -- >       ループクロージャが実行されます。


POSE_GRAPH.constraint_builder.sampling_ratio = 0.3
  -- >  [double] / A constraint will be added if the proportion of added constraints
  -- >  to potential constraints drops below this number.
  -- >       潜在的な制約に対する追加された制約の割合が、この設定値より低くなると、
  -- >       制約が追加されることになります。
POSE_GRAPH.constraint_builder.max_constraint_distance = 15.
  -- >  [double] / Threshold for poses to be considered near a submap.
  -- >       サブマップと近い poses について、考慮する距離の閾値。
POSE_GRAPH.constraint_builder.min_score = 0.55
  -- >  [double] / Threshold for the scan match score below which a match is not
  -- >  considered. Low scores indicate that the scan and map do not look similar.
  -- >       スキャンマッチスコアの閾値で、これ以下ではマッチングが考慮されない。
  -- >       低いスコアは、スキャンとマップが似ていないことを示す。
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.6
  -- >  [double] / Threshold below which global localizations are not trusted.
  -- >       global localization を信頼しないようにするスコア閾値。
POSE_GRAPH.constraint_builder.loop_closure_translation_weight = 1.1e4
  -- >  [double] / Weight used in the optimization problem for the translational
  -- >  component of loop closure constraints.
  -- >       ループクロージャー制約の"並進"成分に対する最適化問題で使用される重み。
POSE_GRAPH.constraint_builder.loop_closure_rotation_weight = 1e5
  -- >  [double] / Weight used in the optimization problem for the rotational
  -- >  component of loop closure constraints.
  -- >       ループクロージャー制約の"回転"成分に対する最適化問題で使用される重み。
POSE_GRAPH.constraint_builder.log_matches = true
  -- >  [bool] / If enabled, logs information of loop-closing constraints for debugging.
  -- >       有効にすると、ループクロージャー制約の情報をデバッグログに出力します。


POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.linear_search_window = 7.
  -- >  [double] / Minimum linear search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントを見つけるための最小の線形探索 Window。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.angular_search_window = math.rad(30.)
  -- >  [double] / Minimum angular search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントが得られる最小の角度探索 Window。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.branch_and_bound_depth = 7
  -- >  [int32] / Number of precomputed grids to use.
  -- >       事前計算に使用するグリッドの数。


POSE_GRAPH.constraint_builder.ceres_scan_matcher.occupied_space_weight = 20.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値
POSE_GRAPH.constraint_builder.ceres_scan_matcher.translation_weight = 10.
  -- >  [double] / Not yet documented.
POSE_GRAPH.constraint_builder.ceres_scan_matcher.rotation_weight = 1.
  -- >  [double] / Not yet documented.


POSE_GRAPH.constraint_builder.ceres_scan_matcher.ceres_solver_options.use_nonmonotonic_steps = true
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for more
  -- >  information: https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
  -- >       おそらくここが参考になりそう
  -- >       http://ceres-solver.org/nnls_solving.html
POSE_GRAPH.constraint_builder.ceres_scan_matcher.ceres_solver_options.max_num_iterations = 10
  -- >  [int32] / Not yet documented.
POSE_GRAPH.constraint_builder.ceres_scan_matcher.ceres_solver_options.num_threads = 1
  -- >  [int32] / Not yet documented.


POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.branch_and_bound_depth = 8
  -- >  [int32] / Number of precomputed grids to use.
  -- >       事前計算に使用するグリッドの数。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.full_resolution_depth = 3
  -- >  [int32] / Number of full resolution grids to use, additional grids will reduce
  -- >  the resolution by half each.
  -- >       フル解像度グリッドに使う設定値。グリッドを追加すると、それぞれ解像度が半分になります。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.min_rotational_score = 0.77
  -- >  [double] / Minimum score for the rotational scan matcher.
  -- >       回転のためのスキャンマッチャーの最小スコア。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.min_low_resolution_score = 0.55
  -- >  [double] / Threshold for the score of the low resolution grid below which a match
  -- >  is not considered. Only used for 3D.
  -- >       低解像度でのグリッドにおける、これ以下ではマッチング考慮されなくなるスコア閾値。
  -- >       3D にのみ使用される。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.linear_xy_search_window = 5.
  -- >  [double] / Linear search window in the plane orthogonal to gravity in which the
  -- >  best possible scan alignment will be found.
  -- >       重力に直交する平面において、最適なスキャンアライメントが得られるための線形探索 window の数。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.linear_z_search_window = 1.
  -- >  [double] / Linear search window in the gravity direction in which the best possible
  -- >  scan alignment will be found.
  -- >       重力方向において、最適なスキャンアライメントが得られるための線形探索 window の数。
POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher_3d.angular_search_window = math.rad(15.)
  -- >  [double] / Minimum angular search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントが得られる最小の角度探索 Window。


POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.occupied_space_weight_0 = 5.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.occupied_space_weight_1 = 30.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.translation_weight = 10.
  -- >  [double] / Not yet documented.
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.rotation_weight = 1.
  -- >  [double] / Not yet documented.
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.only_optimize_yaw = false
  -- >  [bool] / Whether only to allow changes to yaw, keeping roll/pitch constant.
  -- >       ロール/ピッチを一定にして、ヨーのみを変化させるかどうか。


POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.ceres_solver_options.use_nonmonotonic_steps = false
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for more
  -- >  information: https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
  -- >       おそらくここが参考になりそう
  -- >       http://ceres-solver.org/nnls_solving.html
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.ceres_solver_options.max_num_iterations = 10
  -- >  [int32] / Not yet documented.
POSE_GRAPH.constraint_builder.ceres_scan_matcher_3d.ceres_solver_options.num_threads = 1
  -- >  [int32] / Not yet documented.


POSE_GRAPH.matcher_translation_weight = 5e2
  -- >  [double] / Weight used in the optimization problem for the translational component of
  -- >  non-loop-closure scan matcher constraints.
  -- >       非ループクロージャー制約の"並進"成分に対する最適化問題で使用される重み。
POSE_GRAPH.matcher_rotation_weight = 1.6e3
  -- >  [double] / Weight used in the optimization problem for the rotational component of
  -- >  non-loop-closure scan matcher constraints.
  -- >       非ループクロージャー制約の"回転"成分に対する最適化問題で使用される重み。


POSE_GRAPH.optimization_problem.huber_scale = 1e1
  -- >  [double] / Scaling parameter for Huber loss function.
  -- >       Huber loss function のスケーリング値
POSE_GRAPH.optimization_problem.acceleration_weight = 1.1e2
  -- >  [double] / Scaling parameter for the IMU acceleration term.
  -- >       IMU acceleration 期間のスケーリング値
POSE_GRAPH.optimization_problem.rotation_weight = 1.6e4
  -- >  [double] / Scaling parameter for the IMU rotation term.
  -- >       IMU 回転の期間のスケーリング値
POSE_GRAPH.optimization_problem.local_slam_pose_translation_weight = 1e5
  -- >  [double] / Scaling parameter for translation between consecutive nodes based
  -- >  on the local SLAM pose.
  -- >       ローカル SLAM の pose に基づく連続したノード間の"並進"のためのスケーリング値。
POSE_GRAPH.optimization_problem.local_slam_pose_rotation_weight = 1e5
  -- >  [double] / Scaling parameter for rotation between consecutive nodes based on
  -- >  the local SLAM pose.
  -- >       ローカル SLAM の pose に基づく連続したノード間の"回転"のためのスケーリング値。
POSE_GRAPH.optimization_problem.odometry_translation_weight = 1e5
  -- >  [double] / Scaling parameter for translation between consecutive nodes based
  -- >  on the odometry.
  -- >       オドメトリに基づく連続したノード間の"並進"のためのスケーリング値。
POSE_GRAPH.optimization_problem.odometry_rotation_weight = 1e5
  -- >  [double] / Scaling parameter for rotation between consecutive nodes based on
  -- >  the odometry.
  -- >       オドメトリに基づく連続したノード間の"回転"のためのスケーリング値。
POSE_GRAPH.optimization_problem.fixed_frame_pose_translation_weight = 1e1
  -- >  [double] / Scaling parameter for the FixedFramePose translation.
  -- >       FixedFramePose の"並進"のためのスケーリング値。
POSE_GRAPH.optimization_problem.fixed_frame_pose_rotation_weight = 1e2
  -- >  [double] / Scaling parameter for the FixedFramePose rotation.
  -- >       FixedFramePose の"回転"のためのスケーリング値。
POSE_GRAPH.optimization_problem.fixed_frame_pose_use_tolerant_loss = false
  -- >  [bool] / ??? (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/internal/optimization/optimization_problem_3d.cc)
POSE_GRAPH.optimization_problem.fixed_frame_pose_tolerant_loss_param_a = 1
  -- >  [int32 ?] / ??? (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/internal/optimization/optimization_problem_3d.cc)
POSE_GRAPH.optimization_problem.fixed_frame_pose_tolerant_loss_param_b = 1
  -- >  [int32 ?] / ??? (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/internal/optimization/optimization_problem_3d.cc)
POSE_GRAPH.optimization_problem.log_solver_summary = false
  -- >  [bool] / If true, the Ceres solver summary will be logged for every optimization.
  -- >       有効なら、Ceres ソルバーのサマリーはすべての最適化についてログに記録します。
POSE_GRAPH.optimization_problem.use_online_imu_extrinsics_in_3d = true
  -- >  [bool] / ??? (https://github.com/cartographer-project/cartographer_ros/issues/1486)
POSE_GRAPH.optimization_problem.fix_z_in_3d = false
  -- >  [bool] / ??? (https://github.com/cartographer-project/cartographer/issues/1160)


POSE_GRAPH.optimization_problem.ceres_solver_options.use_nonmonotonic_steps = false
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for more
  -- >  information: https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
  -- >       おそらくここが参考になりそう
  -- >       http://ceres-solver.org/nnls_solving.html
POSE_GRAPH.optimization_problem.ceres_solver_options.max_num_iterations = 50
  -- >  [int32] / Not yet documented.
POSE_GRAPH.optimization_problem.ceres_solver_options.num_threads = 7
  -- >  [int32] / Not yet documented.


POSE_GRAPH.max_num_final_iterations = 200
  -- >  [int32] / Number of iterations to use in 'optimization_problem_options'
  -- >  for the final optimization.
  -- >       'optimization_problem options' で最終的な最適化に使用する反復回数
POSE_GRAPH.global_sampling_ratio = 0.003
  -- >  [double] / Rate at which we sample a single trajectory’s nodes for global
  -- >  localization.
  -- >       グローバルな Localization 時における、1つのトラジェクトリーのノードがサンプリングする速さ。
POSE_GRAPH.log_residual_histograms = true
  -- >  [bool] / Whether to output histograms for the pose residuals.
  -- >       pose 残差のヒストグラムを出力するかどうか。


POSE_GRAPH.global_constraint_search_after_n_seconds = 10.
  -- >  [double] / If for the duration specified by this option no global contraint
  -- >  has been added between two trajectories, loop closure searches will be performed
  -- >  globally rather than in a smaller search window.
  -- >       このオプションで指定された期間中に、2つの Trajectory 間にグローバルな拘束が追加
  -- >       されない場合、ループクロージャー検索は小さな検索窓ではなく、グローバルに実行されます。
POSE_GRAPH.overlapping_submaps_trimmer_2d.fresh_submaps_count = 1
  -- >  [int16 ?] / ???
  -- >  (https://github.com/cartographer-project/cartographer_ros/issues/1678)
POSE_GRAPH.overlapping_submaps_trimmer_2d.min_covered_area = 2
  -- >  [int16 ?] / ???
  -- >  (https://github.com/cartographer-project/cartographer_ros/issues/1678)
POSE_GRAPH.overlapping_submaps_trimmer_2d.min_added_submaps_count = 5
  -- >  [int16 ?] / ???
  -- >  (https://github.com/cartographer-project/cartographer_ros/issues/1678)
```


## Local （局所的） SLAM (2D/3D 共通) 設定
（<b>TRAJECTORY_BUILDER.</b> の名前で設定します。）


```lua
TRAJECTORY_BUILDER.collate_landmarks = true  -- (デフォルト値は不明)
  -- >  [bool] / ??? 
  -- >       Options.use_landmarks = true にした場合に関わってくる。
  -- >       ページ上部の Options.use_landmarks を参照。
```


## Local （局所的） SLAM (2D) 設定
（<b>TRAJECTORY_BUILDER_2D.</b> の名前で設定します。）


```lua
TRAJECTORY_BUILDER_2D.use_imu_data = true
  -- >  [bool] / True if IMU data should be expected and used.
  -- >       IMUデータを使用する場合は True。
TRAJECTORY_BUILDER_2D.min_range = 0.
  -- >  [float] / Rangefinder points outside these ranges will be dropped.
  -- >       この範囲外のレンジファインダーポイントのデータは破棄されます。
TRAJECTORY_BUILDER_2D.max_range = 30.
  -- >  [float] / Not yet documented.
TRAJECTORY_BUILDER_2D.min_z = -0.8
  -- >  [float] / Not yet documented.
TRAJECTORY_BUILDER_2D.max_z = 2.
  -- >  [float] / Not yet documented.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5.
  -- >  [float] / Points beyond ‘max_range’ will be inserted with this length
  -- >  as empty space.
  -- >       'max_range' を超える点は、この長さで空白部として挿入される。
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1
  -- >  [int32] / Number of range data to accumulate into one unwarped, combined range 
  -- >  data to use for scan matching.
  -- >       スキャンマッチングに使用するための、歪みが無く結合された１個の範囲データに
  -- >       蓄積する範囲データの数。
TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.025
  -- >  [float] / Voxel filter that gets applied to the range data immediately
  -- >  after cropping.
  -- >       切り出し直後の範囲データに適用されるボクセルフィルタ。


TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.max_length = 0.5
  -- >  [float] / ‘max_length’ of a voxel edge.
  -- >       ボクセルフィルタの 'max_length' 。
TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.min_num_points = 200
  -- >  [float] / If there are more points and not at least 'min_num_points'
  -- >  remain, the voxel length is
  -- >  reduced trying to get this minimum number of points.
  -- >       点群数が多くありつつも、 'min_num_points' より少ない場合、この最小点数を得るために
  -- >       ボクセルフィルタ長が減少される。
TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.max_range = 50.
  -- >  [float] / Points further away from the origin are removed.
  -- >       原点から遠く削除される点の距離。


TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.max_length = 0.9
  -- >  [float] / ‘max_length’ of a voxel edge.
  -- >       ボクセルフィルタの 'max_length' 。
TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.min_num_points = 100
  -- >  [float] / If there are more points and not at least ‘min_num_points’
  -- >  remain, the voxel length is reduced trying to get this minimum number of points.
  -- >       点群数が多くありつつも、 'min_num_points' より少ない場合、この最小点数を得るために
  -- >       ボクセルフィルタ長が減少される。
TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.max_range = 50.
  -- >  [float] / Points further away from the origin are removed.
  -- >       原点から遠く削除される点の距離。


TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = false
  -- >  [bool] / Whether to solve the online scan matching first using the correlative
  -- >  scan matcher to generate a good starting point for Ceres.
  -- >       Ceres の良い出発点を生成するために、相関スキャンマッチャーを使用して、
  -- >       最初にオンラインスキャンマッチングを解くかどうか。


TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
  -- >  [double] / Minimum linear search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントを見つけるための最小の線形探索 Window。
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.angular_search_window = math.rad(20.)
  -- >  [double] / Minimum angular search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントを見つけるための最小の角度探索 Window。
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 1e-1
  -- >  [double] / Weights applied to each part of the score.
  -- >       スコアの各パートに適用される重み。
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
  -- >  [double] / Not yet documented.


TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 1.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 10.
  -- >  [double] / Not yet documented.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 40.
  -- >  [double] / Not yet documented.


TRAJECTORY_BUILDER_2D.ceres_scan_matcher.ceres_solver_options.use_nonmonotonic_steps = false
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for
  -- >  more information: https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
  -- >       おそらくここが参考になりそう
  -- >       http://ceres-solver.org/nnls_solving.html
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.ceres_solver_options.max_num_iterations = 20
  -- >  [int32] / Not yet documented.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.ceres_solver_options.num_threads = 1
  -- >  [int32] / Not yet documented.


TRAJECTORY_BUILDER_2D.motion_filter.max_time_seconds = 5.
  -- >  [double] / Threshold above which range data is inserted based on time.
  -- >       これ以上の時間の時に、範囲データが挿入される閾値（秒）。
TRAJECTORY_BUILDER_2D.motion_filter.max_distance_meters = 0.2
  -- >  [double] / Threshold above which range data is inserted based on linear motion.
  -- >       これ以上の距離の時に、線形移動に基づき範囲データが挿入される閾値。
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(1.)
  -- >  [double] / Threshold above which range data is inserted based on rotational motion.
  -- >       これ以上の角度の時に、回転に基づいて範囲データが挿入される閾値（ラジアン）。


-- TODO(schwoere,wohe): Remove this constant. This is only kept for ROS.
TRAJECTORY_BUILDER_2D.imu_gravity_time_constant = 10.
  -- >  [double] / Time constant in seconds for the orientation moving average
  -- >  based on observed gravity via the IMU. It should be chosen so that the error 1.
  -- >  from acceleration measurements not due to gravity
  -- >  (which gets worse when the constant is reduced) and 2. from integration of angular velocities
  -- >  (which gets worse when the constant is increased) is balanced.
  -- >       IMU で観測された重力に基づく方位の移動平均の時定数（秒）。
  -- >       error 1. 重力によらない加速度測定による誤差（定数を小さくすると悪化する）と、
  -- >       error 2. 角速度の積分による誤差（定数を大きくすると悪化する）がバランスよくなるように
  -- >       する必要があります。


TRAJECTORY_BUILDER_2D.pose_extrapolator.use_imu_based = false
  -- >  [bool] / ??? (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/internal/2d/local_trajectory_builder_2d.cc)


TRAJECTORY_BUILDER_2D.pose_extrapolator.constant_velocity.imu_gravity_time_constant = 10.
  -- >  [double] / Time constant in seconds for the orientation moving average
  -- >  based on observed gravity via the IMU. It should be chosen so that the error 1.
  -- >  from acceleration measurements not due to gravity
  -- >  (which gets worse when the constant is reduced) and 2. from integration of angular velocities
  -- >  (which gets worse when the constant is increased) is balanced.
  -- >       IMU で観測された重力に基づく方位の移動平均の時定数（秒）。
  -- >       error 1. 重力によらない加速度測定による誤差（定数を小さくすると悪化する）と、
  -- >       error 2. 角速度の積分による誤差（定数を大きくすると悪化する）がバランスよくなるように
  -- >       する必要があります。
TRAJECTORY_BUILDER_2D.pose_extrapolator.constant_velocity.pose_queue_duration = 0.001
  -- >  [double ?] / ??? (http://docs.ros.org/en/indigo/api/cartographer/html/pose__extrapolator_8cc_source.html)


TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.pose_queue_duration = 5.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.gravity_constant = 9.806
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.pose_translation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.pose_rotation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.imu_acceleration_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.imu_rotation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.odometry_translation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.odometry_rotation_weight = 1.
  -- >  [double ?] / ??? 


TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.solver_options.use_nonmonotonic_steps = false;
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for more information:
  -- >  https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.solver_options.max_num_iterations = 10;
  -- >  [int32] / Not yet documented.
TRAJECTORY_BUILDER_2D.pose_extrapolator.imu_based.solver_options.num_threads = 1;
  -- >  [int32] / Not yet documented.


TRAJECTORY_BUILDER_2D.submaps.num_range_data = 90
  -- >  [int32] / Number of range data before adding a new submap. Each submap will
  -- >  get twice the number of range data inserted: First for initialization without
  -- >  being matched against, then while being matched.
  -- >       新しいサブマップを追加する前の範囲データの数。各サブマップには2倍のレンジデータが挿入されます。
  -- >       最初はマッチングされずに初期化され、次にマッチングされます。


TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.grid_type = "PROBABILITY_GRID"
  -- >  [???] / ??? (https://google-cartographer-ros.readthedocs.io/en/latest/algo_walkthrough.html)
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution = 0.05
  -- >  [double] / Resolution of the map in meters.
  -- >       地図の解像度（メートル）。


TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D"
  -- >  [???] / ??? (https://github.com/cartographer-project/cartographer/issues/1518)


TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.probability_grid_range_data_inserter.insert_free_space = true
  -- >  [bool] / If ‘false’, free space will not change the probabilities in the
  -- >  occupancy grid.
  -- >       'false' の時、フリーな空間は占有グリッドの確率を変更しない。
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.probability_grid_range_data_inserter.hit_probability = 0.55
  -- >  [double] / Probability change for a hit (this will be converted to odds and
  -- >  therefore must be greater than 0.5).
  -- >       hit した場合の確率の変化（オッズに変換されるため、0.5以上でなければならない）。
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.probability_grid_range_data_inserter.miss_probability = 0.49
  -- >  [double] / Probability change for a miss (this will be converted to odds and
  -- >  therefore must be less than 0.5).
  -- >       miss した場合の確率の変化（オッズに変換されるため、0.5未満でなければならない）。


TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.truncation_distance = 0.3
  -- >  [double ?] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.maximum_weight = 10.
  -- >  [double ?] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.update_free_space = false
  -- >  [bool] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)


TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.normal_estimation_options.num_normal_samples = 4
  -- >  [int32 ?] / ???
  -- >  (https://github.com/cartographer-project/cartographer/blob/master/cartographer/mapping/internal/2d/normal_estimation_2d.cc)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.normal_estimation_options.sample_radius = 0.5
  -- >  [double ?] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)


TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.project_sdf_distance_to_scan_normal = true
  -- >  [bool] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.update_weight_range_exponent = 0
  -- >  [???] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.update_weight_angle_scan_normal_to_ray_kernel_bandwidth = 0.5
  -- >  [double ?] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
TRAJECTORY_BUILDER_2D.submaps.range_data_inserter.tsdf_range_data_inserter.update_weight_distance_cell_to_hit_kernel_bandwidth = 0.5
  -- >  [double ?] / ???
  -- >  (http://docs.ros.org/en/indigo/api/cartographer/html/tsdf__range__data__inserter__2d_8cc_source.html)
```


## Local （局所的） SLAM (3D) 設定
（<b>TRAJECTORY_BUILDER_3D.</b> の名前で設定します。）


```lua
-- define

MAX_3D_RANGE = 60.
  -- >  [float] / for [TRAJECTORY_BUILDER_3D.max_range] and [TRAJECTORY_BUILDER_3D.low_resolution_adaptive_voxel_filter.max_range]
  -- >       [TRAJECTORY_BUILDER_3D.max_range] と
  -- >       [TRAJECTORY_BUILDER_3D.low_resolution_adaptive_voxel_filter.max_range] 
  -- >       のための値。
INTENSITY_THRESHOLD = 40
  -- >  [int32 ?] / 
  -- >  for [TRAJECTORY_BUILDER_3D.ceres_scan_matcher.intensity_cost_function_options_0.intensity_threshold] and 
  -- >  [TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.intensity_threshold]
  -- >       [TRAJECTORY_BUILDER_3D.ceres_scan_matcher.intensity_cost_function_options_0.intensity_threshold] と
  -- >       [TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.intensity_threshold]
  -- >       のための値。


TRAJECTORY_BUILDER_3D.min_range = 1.
  -- >  [float] / Rangefinder points outside these ranges will be dropped.
  -- >       この範囲外のレンジファインダーポイントのデータは破棄されます。
TRAJECTORY_BUILDER_3D.max_range = MAX_3D_RANGE
  -- >  [float] / Not yet documented.
TRAJECTORY_BUILDER_3D.num_accumulated_range_data = 1
  -- >  [int32] / Number of range data to accumulate into one unwarped, combined range
  -- >  data to use for scan matching.
  -- >       スキャンマッチングに使用するための、歪みが無く結合された１個の範囲データに
  -- >       蓄積する範囲データの数。
TRAJECTORY_BUILDER_3D.voxel_filter_size = 0.15
  -- >  [float] / Voxel filter that gets applied to the range data immediately
  -- >  after cropping.
  -- >       切り出し直後の範囲データに適用されるボクセルフィルタ。


TRAJECTORY_BUILDER_3D.high_resolution_adaptive_voxel_filter.max_length = 2.
  -- >  [float] / ‘max_length’ of a voxel edge.
  -- >       ボクセルフィルタの 'max_length' 。
TRAJECTORY_BUILDER_3D.high_resolution_adaptive_voxel_filter.min_num_points = 150
  -- >  [float] / If there are more points and not at least ‘min_num_points’
  -- >  remain, the voxel length is reduced trying to get this minimum number of points.
  -- >       点群数が多くありつつも、 'min_num_points' より少ない場合、この最小点数を得るために
  -- >       ボクセルフィルタ長が減少される。
TRAJECTORY_BUILDER_3D.high_resolution_adaptive_voxel_filter.max_range = 15.
  -- >  [float] / Points further away from the origin are removed.
  -- >       原点から遠く削除される点の距離。


TRAJECTORY_BUILDER_3D.low_resolution_adaptive_voxel_filter.max_length = 4.
  -- >  [float] / ‘max_length’ of a voxel edge.
  -- >       ボクセルフィルタの 'max_length' 。
TRAJECTORY_BUILDER_3D.low_resolution_adaptive_voxel_filter.min_num_points = 200
  -- >  [float] / If there are more points and not at least ‘min_num_points’
  -- >  remain, the voxel length is reduced trying to get this minimum number of points.
  -- >       点群数が多くありつつも、 'min_num_points' より少ない場合、この最小点数を得るために
  -- >       ボクセルフィルタ長が減少される。
TRAJECTORY_BUILDER_3D.low_resolution_adaptive_voxel_filter.max_range = MAX_3D_RANGE
  -- >  [float] / Points further away from the origin are removed.
  -- >       原点から遠く削除される点の距離。


TRAJECTORY_BUILDER_3D.use_online_correlative_scan_matching = false
  -- >  [bool] / Whether to solve the online scan matching first using the correlative
  -- >  scan matcher to generate a good starting point for Ceres.
  -- >       Ceres の良い出発点を生成するために、相関スキャンマッチャーを使用して、
  -- >       最初にオンラインスキャンマッチングを解くかどうか。


TRAJECTORY_BUILDER_3D.real_time_correlative_scan_matcher.linear_search_window = 0.15
  -- >  [double] / Minimum linear search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントを見つけるための最小の線形探索 Window。
TRAJECTORY_BUILDER_3D.real_time_correlative_scan_matcher.angular_search_window = math.rad(1.)
  -- >  [double] / Minimum angular search window in which the best possible scan
  -- >  alignment will be found.
  -- >       最適なスキャンアライメントが得られる最小の角度探索 Window。
TRAJECTORY_BUILDER_3D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 1e-1
  -- >  [double] / Weights applied to each part of the score.
  -- >       スコアの各パートに適用される重み。
TRAJECTORY_BUILDER_3D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
  -- >  [double] / Not yet documented.


TRAJECTORY_BUILDER_3D.ceres_scan_matcher.occupied_space_weight_0 = 1.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.occupied_space_weight_1 = 6.
  -- >  [double] / Scaling parameters for each cost functor.
  -- >       各コスト functor のスケーリング値


TRAJECTORY_BUILDER_3D.ceres_scan_matcher.intensity_cost_function_options_0.weight = 0.5
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.intensity_cost_function_options_0.huber_scale = 0.3
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.intensity_cost_function_options_0.intensity_threshold = INTENSITY_THRESHOLD
  -- >  [int32 ?] / ??? 


TRAJECTORY_BUILDER_3D.ceres_scan_matcher.translation_weight = 5.
  -- >  [double] / Not yet documented.
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.rotation_weight = 4e2
  -- >  [double] / Not yet documented.
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.only_optimize_yaw = false
  -- >  [bool] / Whether only to allow changes to yaw, keeping roll/pitch constant.
  -- >       ロール/ピッチを一定にして、ヨーのみを変化させるかどうか。


TRAJECTORY_BUILDER_3D.ceres_scan_matcher.ceres_solver_options.use_nonmonotonic_steps = false
  -- >  [bool] / Configure the Ceres solver. See the Ceres documentation for
  -- >  more information: https://code.google.com/p/ceres-solver/
  -- >       Ceres ソルバーの設定。
  -- >       おそらくここが参考になりそう
  -- >       http://ceres-solver.org/nnls_solving.html
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.ceres_solver_options.max_num_iterations = 12
  -- >  [int32] / Not yet documented.
TRAJECTORY_BUILDER_3D.ceres_scan_matcher.ceres_solver_options.num_threads = 1
  -- >  [int32] / Not yet documented.


TRAJECTORY_BUILDER_3D.motion_filter.max_time_seconds = 0.5
  -- >  [double] / Threshold above which range data is inserted based on time..
  -- >       これ以上の時間の時に、範囲データが挿入される閾値（秒）。
TRAJECTORY_BUILDER_3D.motion_filter.max_distance_meters = 0.1
  -- >  [double] / Threshold above which range data is inserted based on linear motion.
  -- >       これ以上の距離の時に、線形移動に基づき範囲データが挿入される閾値。
TRAJECTORY_BUILDER_3D.motion_filter.max_angle_radians = 0.004
  -- >  [double] / Threshold above which range data is inserted based on rotational motion.
  -- >       これ以上の角度の時に、回転に基づいて範囲データが挿入される閾値（ラジアン）。


TRAJECTORY_BUILDER_3D.rotational_histogram_size = 120
  -- >  [int32] / Number of histogram buckets for the rotational scan matcher.
  -- >       回転スキャンマッチャーのための、ヒストグラムのバケット数。


-- TODO(schwoere,wohe): Remove this constant. This is only kept for ROS.
-- >       TODO: 削除、これはROS のためだけに残されています。

TRAJECTORY_BUILDER_3D.imu_gravity_time_constant = 10.
  -- >  [double] / Time constant in seconds for the orientation moving average
  -- >  based on observed gravity via the IMU. It should be chosen so that the error 1.
  -- >  from acceleration measurements not due to gravity
  -- >  (which gets worse when the constant is reduced) and 2. from integration of angular velocities
  -- >  (which gets worse when the constant is increased) is balanced.
  -- >       IMU で観測された重力に基づく方位の移動平均の時定数（秒）。
  -- >       error 1. 重力によらない加速度測定による誤差（定数を小さくすると悪化する）と、
  -- >       error 2. 角速度の積分による誤差（定数を大きくすると悪化する）がバランスよくなるように
  -- >       する必要があります。


TRAJECTORY_BUILDER_3D.pose_extrapolator.use_imu_based = false
  -- >  [bool] / ??? 


TRAJECTORY_BUILDER_3D.pose_extrapolator.constant_velocity.imu_gravity_time_constant = 10.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.constant_velocity.pose_queue_duration = 0.001
  -- >  [double ?] / ??? 


-- TODO(wohe): Tune these parameters on the example datasets.
-- >       TODO: これらのパラメータをサンプルデータセットで調整します。

TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.pose_queue_duration = 5.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.gravity_constant = 9.806
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.pose_translation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.pose_rotation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.imu_acceleration_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.imu_rotation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.odometry_translation_weight = 1.
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.odometry_rotation_weight = 1.
  -- >  [double ?] / ??? 


TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.solver_options.use_nonmonotonic_steps = false;
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.solver_options.max_num_iterations = 10;
  -- >  [double ?] / ??? 
TRAJECTORY_BUILDER_3D.pose_extrapolator.imu_based.solver_options.num_threads = 1;
  -- >  [double ?] / ??? 


TRAJECTORY_BUILDER_3D.submaps.high_resolution = 0.10
  -- >  [double] / Resolution of the ‘high_resolution’ map in meters used for
  -- >  local SLAM and loop closure.
  -- >       Local SLAM とループクロージャーに使用する 'high_resolution' 
  -- >       マップの解像度 （メートル）。
TRAJECTORY_BUILDER_3D.submaps.high_resolution_max_range = 20.
  -- >  [double] / Maximum range to filter the point cloud to before insertion
  -- >  into the ‘high_resolution’ map.
  -- >       'high_resolution' マップに挿入する前に、点群をフィルタする最大距離範囲。
TRAJECTORY_BUILDER_3D.submaps.low_resolution = 0.45
  -- >  [double] / Resolution of the ‘low_resolution’ version of the map in
  -- >  meters used for local SLAM only.
  -- >       Local SLAM のみに使用される 'low_resolution' 版のマップの解像度（メートル単位）。
TRAJECTORY_BUILDER_3D.submaps.num_range_data = 160
  -- >  [int32] / Number of range data before adding a new submap. Each submap will
  -- >  get twice the number of range data inserted: First for initialization without
  -- >  being matched against, then while being matched.
  -- >       新しいサブマップを追加する前の範囲データの数。各サブマップには2倍のレンジデータが挿入されます。
  -- >       最初はマッチングされずに初期化され、次にマッチングされます。


TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.hit_probability = 0.55
  -- >  [double] / Probability change for a hit (this will be converted to odds and
  -- >  therefore must be greater than 0.5).
  -- >       hit した場合の確率の変化（オッズに変換されるため、0.5以上でなければならない）。
TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.miss_probability = 0.49
  -- >  [double] / Probability change for a miss (this will be converted to odds and
  -- >  therefore must be less than 0.5).
  -- >       miss した場合の確率の変化（オッズに変換されるため、0.5未満でなければならない）。
TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.num_free_space_voxels = 2
  -- >  [int32] / Up to how many free space voxels are updated for scan matching.
  -- >  0 disables free space.
  -- >       スキャンマッチングで更新されるフリーな空間のボクセルの最大数。
  -- >       0はフリーな空間を無効にします。
TRAJECTORY_BUILDER_3D.submaps.range_data_inserter.intensity_threshold = INTENSITY_THRESHOLD
  -- >  [int32 ?] / ??? 


TRAJECTORY_BUILDER_3D.use_intensities = false
  -- >  [bool] / When setting use_intensites to true, the intensity_cost_function_options_0
  -- >  parameter in ceres_scan_matcher has to be set up as well or otherwise
  -- >  CeresScanMatcher will CHECK-fail.
  -- >       use_intensites の設定を true にする場合、ceres_scan_matcher の
  -- >       intensity_cost_function_options_0 パラメータも設定しないと CeresScanMatcher は
  -- >       CHECK-fail するようになります。
```


## pure localization mode 設定

```lua
-- for pure localization mode

TRAJECTORY_BUILDER.pure_localization_trimmer = {
        max_submaps_to_keep = 3,
    }
  -- >  [int32 ?] / ??? 
  -- >       (デフォルト値は不明) (この項目自体を追加することで、pure localization mode になるようです？)
```




## 中項目 設定

```lua
pose_graph
  -- >  型: [cartographer.mapping.proto.PoseGraphOptions]
  -- >    Not yet documented.
trajectory_builder_2d
  -- >  型: [cartographer.mapping_2d.proto.LocalTrajectoryBuilderOptions]
  -- >    Not yet documented.
trajectory_builder_3d
  -- >  型: [cartographer.mapping_3d.proto.LocalTrajectoryBuilderOptions]
  -- >    Not yet documented.

submaps
  -- >  型: [cartographer.mapping_2d.proto.SubmapsOptions]
  -- >  型: [cartographer.mapping_3d.proto.SubmapsOptions]
  -- >    Not yet documented.
constraint_builder
  -- >  型: [cartographer.mapping.pose_graph.proto.ConstraintBuilderOptions]
  -- >    Options for the constraint builder.
  -- >    制約ビルダーのオプション
optimization_problem
  -- >  型: [cartographer.mapping.pose_graph.proto.OptimizationProblemOptions]
  -- >    Options for the optimization problem.
  -- >    最適化問題のオプション
real_time_correlative_scan_matcher
  -- >  型: [cartographer.mapping_2d.scan_matching.proto.RealTimeCorrelativeScanMatcherOptions]
  -- >    Not yet documented.
loop_closure_adaptive_voxel_filter
  -- >  型: [cartographer.sensor.proto.AdaptiveVoxelFilterOptions]
  -- >    Voxel filter used to compute a sparser point cloud for finding loop closures.
  -- >    スパース（まばら？）な点群のループクローズ検索計算に用いる適応ボクセルフィルター
motion_filter
  -- >  型: [cartographer.mapping.proto.MotionFilterOptions]
  -- >    Not yet documented.
adaptive_voxel_filter
high_resolution_adaptive_voxel_filter
low_resolution_adaptive_voxel_filter
  -- >  型: [cartographer.sensor.proto.AdaptiveVoxelFilterOptions]
  -- >    Voxel filter used to compute a sparser point cloud for matching.
  -- >    スパース（まばら？）な点群のマッチング計算に用いる適応ボクセルフィルター

ceres_scan_matcher
  -- >  型: [cartographer.mapping_2d.scan_matching.proto.CeresScanMatcherOptions]
  -- >    Not yet documented.
ceres_scan_matcher_3d
  -- >  型: [cartographer.mapping_3d.scan_matching.proto.CeresScanMatcherOptions]
  -- >    Not yet documented.
ceres_solver_options
  -- >  型: [cartographer.common.proto.CeresSolverOptions]
  -- >    Configure the Ceres solver. See the Ceres documentation for more information: https://code.google.com/p/ceres-solver/
fast_correlative_scan_matcher
  -- >  型: [cartographer.mapping_2d.scan_matching.proto.FastCorrelativeScanMatcherOptions]
  -- >    Options for the internally used scan matchers.
fast_correlative_scan_matcher_3d
  -- >  型: [cartographer.mapping_3d.scan_matching.proto.FastCorrelativeScanMatcherOptions]
  -- >    Not yet documented.
range_data_inserter
  -- >  型: [cartographer.mapping_2d.proto.RangeDataInserterOptions]
  -- >  型: [cartographer.mapping_3d.proto.RangeDataInserterOptions]
  -- >    Not yet documented.
```





# 関連記事

https://qiita.com/devemin/items/1723058cf3bac85aaa0b

https://qiita.com/devemin/items/812871040d0554284101





# 公式パラメータガイド

https://google-cartographer.readthedocs.io/en/latest/configuration.html

https://google-cartographer-ros.readthedocs.io/en/latest/configuration.html

http://ceres-solver.org/nnls_solving.html

（↑　下の方に ceres solver のオプションの説明があります）

https://google-cartographer-ros.readthedocs.io/en/latest/algo_walkthrough.html

https://google-cartographer-ros.readthedocs.io/en/latest/tuning.html

# 参考になるリンク

Cartographer ROS Documentation

https://buildmedia.readthedocs.org/media/pdf/google-cartographer-ros/latest/google-cartographer-ros.pdf

### (2D)

https://daily-tech.hatenablog.com/entry/2019/11/25/062219

https://docs.google.com/presentation/d/1K8F9ppLOcYjq1tQumHexsipOj7EC-ZOCbzIhAOjc7ck/edit#slide=id.g28c867f184_1_21

https://qiita.com/nnn112358/items/c4ac948009abdb15e19c

https://qiita.com/PINTO/items/f8fa5d6ce55317ea590b

### (2D / 3D)

https://www.slideshare.net/hara-y/cartographer-3dcvtech-2019