optimal
This commit is contained in:
@@ -235,6 +235,105 @@ TEST(MoveBase2Config, DescribeMentionsEveryGroup)
|
||||
|
||||
} // namespace
|
||||
|
||||
// ================================================================================================
|
||||
// Schema gen-1 (legacy)
|
||||
//
|
||||
// Cây config production hiện tại là schema gen-1. Không đọc được nó thì move_base2 không chạy được
|
||||
// trên cấu hình thật, và bước 11 (chạy song song bản cũ/mới) không thực hiện được.
|
||||
// ================================================================================================
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, MapsPlannerNamesToProfiles)
|
||||
{
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
MoveBase2Config config;
|
||||
config.fromLegacyNodeHandle(nh);
|
||||
|
||||
EXPECT_EQ(config.position.local_planner_name, "HybridLocalPlanner");
|
||||
EXPECT_EQ(config.docking.local_planner_name, "DockLocalPlanner");
|
||||
|
||||
// Profile không khai global planner riêng thì rơi về khoá ở root.
|
||||
EXPECT_EQ(config.position.global_planner_name, "SBPLLatticePlanner");
|
||||
// Profile có khai riêng thì dùng bản riêng.
|
||||
EXPECT_EQ(config.docking.global_planner_name, "DockPlanner");
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, RootToleranceAppliesToEveryProfile)
|
||||
{
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
MoveBase2Config config;
|
||||
config.fromLegacyNodeHandle(nh);
|
||||
|
||||
EXPECT_DOUBLE_EQ(config.position.default_xy_tolerance, 0.25);
|
||||
EXPECT_DOUBLE_EQ(config.docking.default_yaw_tolerance, 0.30);
|
||||
EXPECT_DOUBLE_EQ(config.rotate.default_xy_tolerance, 0.25);
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, ZeroPatienceBecomesOneControlCycleNotDisabled)
|
||||
{
|
||||
// Khác biệt NGỮ NGHĨA, không phải khác biệt giá trị. Gen-1: 0 = "fail -> recovery ngay". Gen-2:
|
||||
// 0 = "tắt đồng hồ". Dịch nhầm là biến một cấu hình phản ứng-ngay thành cấu hình không-bao-giờ.
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
MoveBase2Config config;
|
||||
config.fromLegacyNodeHandle(nh);
|
||||
|
||||
EXPECT_GT(config.state_machine.planner_patience, 0.0);
|
||||
EXPECT_NEAR(config.state_machine.planner_patience, 1.0 / 20.0, 1e-9);
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, KeepsGen1DefaultForRobotBaseFrame)
|
||||
{
|
||||
// Gen-1 mặc định "base_footprint", gen-2 "base_link". Chế độ legacy giữ default gen-1 để không
|
||||
// đổi hành vi của một hệ đang chạy chỉ vì đổi runtime.
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
MoveBase2Config config;
|
||||
config.fromLegacyNodeHandle(nh);
|
||||
|
||||
EXPECT_EQ(config.robot_base_frame, "base_footprint");
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, LoadedLegacyConfigPassesValidation)
|
||||
{
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
MoveBase2Config config;
|
||||
config.fromLegacyNodeHandle(nh);
|
||||
config.state_machine.recovery_behavior_count = 2;
|
||||
|
||||
std::string error;
|
||||
EXPECT_TRUE(config.validate(error)) << error;
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, AutoDetectPrefersTheModernSchema)
|
||||
{
|
||||
// Không trộn từng khoá giữa hai schema: hai nguồn cùng có hiệu lực cho một tham số là đúng kiểu
|
||||
// lỗi "sửa config mãi không ăn" mà hai cây config trùng tên của workspace đã gây ra một lần.
|
||||
robot::NodeHandle root;
|
||||
const MoveBase2Config config = MoveBase2Config::load(root);
|
||||
|
||||
EXPECT_EQ(config.robot_base_frame, "base_link") << "chọn nhầm schema gen-1 dù có namespace mới";
|
||||
EXPECT_TRUE(config.sensors.laser_sor_enabled) << "khoá chỉ có ở schema mới không được đọc";
|
||||
}
|
||||
|
||||
TEST(MoveBase2ConfigLegacy, AutoDetectFallsBackToLegacyWhenNoModernNamespace)
|
||||
{
|
||||
robot::NodeHandle root;
|
||||
robot::NodeHandle nh(root, "legacy_move_base");
|
||||
|
||||
const MoveBase2Config config = MoveBase2Config::load(nh);
|
||||
|
||||
EXPECT_EQ(config.robot_base_frame, "base_footprint");
|
||||
EXPECT_EQ(config.position.local_planner_name, "HybridLocalPlanner");
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
#ifdef MOVE_BASE2_TEST_CONFIG_DIR
|
||||
|
||||
Reference in New Issue
Block a user