97 auto app_setting_record = LoadApplicationSettingRecord();
100 InitOutputSetting(app_setting_record);
104 "Free Gait Planning for a Hexapod Walking Robot by Graph Search",
true);
111 boost::thread graphic_thread(&GraphicSystem::Main, &graphic_system);
113 cmdio::SystemOutput(
"Now Waiting for Dxlib to start.");
119 cmdio::SystemOutput(
"Dxlib has started.");
120 cmdio::OutputNewLine(1, kSystem);
125 BootMode boot_mode = app_setting_record->default_mode;
127 if (app_setting_record->ask_about_modes) {
138 std::unique_ptr<ISystemMain> system_main;
141 case BootMode::kSimulation: {
143 auto phantomx_mk2 = LoadXrR1();
145 const auto gpg_builder = std::make_unique<GpgBuilderFlat>(
146 phantomx_mk2, phantomx_mk2, phantomx_mk2);
147 auto gait_pattern_generator = gpg_builder->Build();
149 const auto sim_setting_record =
151 "./simulation_condition/simulation_setting.toml");
154 auto simulation_end_checker =
155 SimulationEndCheckerFactory::Create(sim_setting_record);
156 auto robot_operator = RobotOperatorFactory::Create(sim_setting_record);
157 auto node_initializer = std::make_unique<NodeInitializer>(
158 sim_setting_record.initial_positions,
159 sim_setting_record.initial_posture,
160 sim_setting_record.initial_move);
161 auto result_exporter =
162 std::make_shared<ResultFileExporter>(phantomx_mk2, phantomx_mk2);
164 const auto graphic_data_broker = std::make_shared<GraphicDataBroker>();
166 system_main = std::make_unique<SystemMainSimulation>(
167 std::move(gait_pattern_generator), std::move(map_creator),
168 std::move(simulation_end_checker), std::move(robot_operator),
169 std::move(node_initializer), graphic_data_broker,
170 app_setting_record, result_exporter);
172 auto graphic_main = std::make_unique<GraphicMainBasic>(
173 graphic_data_broker, phantomx_mk2, phantomx_mk2, phantomx_mk2,
180 case BootMode::kViewer: {
186 "./simulation_condition/simulation_setting.toml");
188 auto hexapod_param = LoadXrR1();
189 auto graphic_data_broker = std::make_shared<GraphicDataBroker>();
193 auto node_creator_builder = std::make_unique<NodeCreatorBuilderBodyRot>(
194 hexapod_param, hexapod_param, hexapod_param);
195 auto graph_tree_creator =
196 std::make_unique<GraphTreeCreator>(std::move(node_creator_builder));
198 system_main = std::make_unique<SystemMainGraphViewer>(
199 std::move(graph_tree_creator), std::move(map_creator),
200 graphic_data_broker, app_setting_record);
202 std::unique_ptr<IGraphicMain> graphic_main_viewer =
203 std::make_unique<GraphicMainGraphViewer>(
204 graphic_data_broker, hexapod_param, hexapod_param,
205 hexapod_param, app_setting_record);
211 case BootMode::kDisplayModel: {
212 auto phantomx_mk2 = LoadXrR1();
214 std::unique_ptr<IGraphicMain> graphic_main_test =
215 std::make_unique<GraphicMainDisplayModel>(
216 phantomx_mk2, phantomx_mk2, phantomx_mk2, app_setting_record);
222 case BootMode::kResultViewer: {
224 auto phantomx_mk2 = LoadXrR1();
225 auto graphic_data_broker = std::make_shared<GraphicDataBroker>();
227 system_main = std::make_unique<SystemMainResultViewer>(
228 graphic_data_broker, app_setting_record, phantomx_mk2,
231 std::unique_ptr<IGraphicMain> graphic_main =
232 std::make_unique<GraphicMainBasic>(
233 graphic_data_broker, phantomx_mk2, phantomx_mk2, phantomx_mk2,
240 case BootMode::kRobotControl: {
241 auto graphic_data_broker = std::make_shared<GraphicDataBroker>();
242 auto phantomx_mk2 = LoadPhantomXMkII();
244 std::make_unique<SystemMainRobotControl>(graphic_data_broker);
246 std::unique_ptr<IGraphicMain> graphic_main_robot_control =
247 std::make_unique<GraphicMainRobotControl>(
248 graphic_data_broker, phantomx_mk2, phantomx_mk2, phantomx_mk2,
266 cmdio::OutputHorizontalLine(
"=", kSystem);
267 cmdio::OutputNewLine(1, kSystem);
269 if (!cmdio::InputYesNo(
"Continue?")) {
273 cmdio::OutputNewLine(1, kSystem);
274 cmdio::OutputHorizontalLine(
"=", kSystem);
275 cmdio::OutputNewLine(1, kSystem);
279 "Waiting for Dxlib to exit; press the X button on the GUI.");
280 graphic_thread.join();