19 divided_map_point_(math_util::Squared(kDividedNum)),
20 divided_map_top_z_(math_util::Squared(kDividedNum))
34 global_robot_com_ = global_robot_com;
39 for (
size_t i = 0; i < kMapPointSize; ++i)
45 if (!
IsInMap(point)) {
continue; }
51 if (IsValidIndex(x) && IsValidIndex(y))
53 divided_map_point_[GetDividedMapIndex(x, y)].push_back(point);
56 divided_map_top_z_[GetDividedMapIndex(x, y)] =
57 (std::max)(point.
z, divided_map_top_z_[GetDividedMapIndex(x, y)]);
65 for (
auto& i : divided_map_point_)
71 for (
auto& i : divided_map_top_z_)
80 if (!IsValidIndex(x_index) || !IsValidIndex(y_index))
85 return static_cast<int>(divided_map_point_[GetDividedMapIndex(x_index, y_index)].size());
91 if (!IsValidIndex(x_index) || !IsValidIndex(y_index))
96 const size_t size = divided_map_point_[GetDividedMapIndex(x_index, y_index)].size();
98 if (devide_map_index < 0 ||
static_cast<int>(size) <= devide_map_index)
104 return divided_map_point_[GetDividedMapIndex(x_index, y_index)][devide_map_index];
108 std::vector<Vector3>* point_vec)
const
110 if (point_vec ==
nullptr)
116 if (!IsValidIndex(x_index) || !IsValidIndex(y_index))
121 (*point_vec) = divided_map_point_[GetDividedMapIndex(x_index, y_index)];
127 if (!IsValidIndex(x_index) || !IsValidIndex(y_index))
132 return divided_map_top_z_[GetDividedMapIndex(x_index, y_index)];
constexpr int GetDividedMapIndexX(const float pos_x) const noexcept
指定した座標を DividedMap のインデックスに変換する. 範囲外の値を指定した場合でも,値を丸めずに返す. そのため,IsInMap で範囲内に存在するかどうかを確認する必要がある.
Vector3 GetPointPos(int x_index, int y_index, int divided_map_index) const
格子状に切り分けられたマップから,脚設置可能点の実際の座標を取得する. 範囲外の値を指定した場合は,(0,0,0)を返す.
void Init(const MapState &map_state, const Vector3 global_robot_com)
マップのデータを初期化する. ロボットの重心座標を中心にマップのデータを格子状に分割し, その中に存在する脚設置可能点を集める.
constexpr bool IsInMap(const float x, const float y) const
指定した座標がマップの範囲内に存在するかどうかを返す.
void Clear()
マップのデータを消去する.
constexpr int GetDividedMapIndexY(const float pos_y) const noexcept
指定した座標を DividedMap のインデックスに変換する. 範囲外の値を指定した場合でも,値を丸めずに返す. そのため,IsInMap で範囲内に存在するかどうかを確認する必要がある.
int GetPointNum(int x_index, int y_index) const
格子状に切り分けられたマップから,脚設置可能点の数を取得する. 範囲外の値を指定した場合は,0を返す.
float GetTopZ(int x_index, int y_index) const
格子状に切り分けられたマップから,最も高いZ座標を返す.
void GetPointVector(int x_index, int y_index, std::vector< Vector3 > *point_vec) const
格子状に切り分けられたマップから,脚設置可能点の vector を取得する 範囲外の値を指定した場合は,空の vector を返す.
DividedMapState(float min_z=MapState::kMapMinZ)
static constexpr int kDividedNum
格子の数.
size_t GetMapPointSize() const noexcept
脚設置可能点の総数を返す.
Vector3 GetMapPoint(const size_t index) const noexcept
脚設置可能点の座標を返す.
constexpr T Squared(const T num) noexcept
2乗した値を返す関数.
static constexpr Vector3 GetZeroVec() noexcept
零ベクトルを返す. 静的な関数なので,Vector3::GetZeroVec() と呼び出せる.