rm_control
Loading...
Searching...
No Matches
time_change_ui.h
Go to the documentation of this file.
1//
2// Created by llljjjqqq on 22-11-4.
3//
4
5#pragma once
6#include <std_msgs/Bool.h>
8
9#include <rm_msgs/LeggedChassisStatus.h>
10
11#include <algorithm>
12
13namespace rm_referee
14{
15class TimeChangeUi : public UiBase
16{
17public:
18 explicit TimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, const std::string& graph_name,
19 std::deque<Graph>* graph_queue, std::deque<Graph>* character_queue)
20 : UiBase(rpc_value, base, graph_queue, character_queue)
21 {
22 graph_ = new Graph(rpc_value["config"], base_, id_++);
23 }
24 void update() override;
25 void updateForQueue() override;
26 virtual void updateConfig(){};
27};
28
30{
31public:
32 explicit TimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, const std::string& graph_name,
33 std::deque<Graph>* graph_queue, std::deque<Graph>* character_queue)
34 : GroupUiBase(rpc_value, base, graph_queue, character_queue)
35 {
36 graph_name_ = graph_name;
37 }
38 void update() override;
39 void updateForQueue() override;
40 virtual void updateConfig(){};
41
42protected:
43 std::string graph_name_;
44};
45
47{
48public:
49 explicit CapacitorTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
50 std::deque<Graph>* character_queue)
51 : TimeChangeUi(rpc_value, base, "capacitor", graph_queue, character_queue){};
52 void add() override;
53 void updateRemainCharge(const double remain_charge, const ros::Time& time);
54
55private:
56 void updateConfig() override;
57 double remain_charge_;
58};
59
61{
62public:
63 explicit RelocalizeProgressTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
64 std::deque<Graph>* character_queue)
65 : TimeChangeUi(rpc_value, base, "relocalize", graph_queue, character_queue)
66 {
67 }
68 void add() override;
69 void updateRelocalizeProgress(const double data, const ros::Time& time);
70
71private:
72 void updateConfig() override;
73 double relocalize_progress_;
74};
75
77{
78public:
79 explicit EffortTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
80 std::deque<Graph>* character_queue)
81 : TimeChangeUi(rpc_value, base, "effort", graph_queue, character_queue){};
82 void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time& time);
83
84private:
85 void updateConfig() override;
86 double joint_effort_;
87 std::string joint_name_;
88};
89
91{
92public:
93 explicit ProgressTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
94 std::deque<Graph>* character_queue)
95 : TimeChangeUi(rpc_value, base, "progress", graph_queue, character_queue){};
96 void updateEngineerUiData(const rm_msgs::EngineerUi::ConstPtr data, const ros::Time& last_get_data_time);
97
98private:
99 void updateConfig() override;
100 uint32_t finished_data_, total_steps_;
101 std::string step_name_;
102};
103
105{
106public:
107 explicit DartStatusTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
108 std::deque<Graph>* character_queue)
109 : TimeChangeUi(rpc_value, base, "dart", graph_queue, character_queue){};
110 void updateDartClientCmd(const rm_msgs::DartClientCmd::ConstPtr data, const ros::Time& last_get_data_time);
111
112private:
113 void updateConfig() override;
114 uint8_t dart_launch_opening_status_;
115};
116
118{
119public:
120 explicit RotationTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
121 std::deque<Graph>* character_queue)
122 : TimeChangeUi(rpc_value, base, "rotation", graph_queue, character_queue)
123 {
124 if (rpc_value.hasMember("data"))
125 {
126 XmlRpc::XmlRpcValue data = rpc_value["data"];
127 try
128 {
129 arc_scale_ = static_cast<int>(data["scale"]);
130 gimbal_reference_frame_ = static_cast<std::string>(data["gimbal_reference_frame"]);
131 chassis_reference_frame_ = static_cast<std::string>(data["chassis_reference_frame"]);
132 }
133 catch (XmlRpc::XmlRpcException& e)
134 {
135 ROS_FATAL_STREAM("Exception raised by XmlRpc while reading the "
136 << "configuration: " << e.getMessage() << ".\n"
137 << "Please check configuration is exit");
138 }
139 }
140 else
141 ROS_WARN("RotationTimeChangeUi config 's member 'data' not defined.");
142 };
143 void updateChassisCmdData(const rm_msgs::ChassisCmd::ConstPtr data);
144
145private:
146 void updateConfig() override;
147 int arc_scale_;
148 std::string gimbal_reference_frame_, chassis_reference_frame_;
149 uint8_t chassis_mode_;
150};
151
153{
154public:
155 explicit LaneLineTimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
156 std::deque<Graph>* character_queue)
157 : TimeChangeGroupUi(rpc_value, base, "lane_line", graph_queue, character_queue)
158 {
159 if (rpc_value.hasMember("data"))
160 {
161 XmlRpc::XmlRpcValue& data = rpc_value["data"];
162 robot_radius_ = data["radius"];
163 robot_height_ = data["height"];
164 camera_range_ = data["camera_range"];
165 surface_coefficient_ = data["surface_coefficient"];
166 }
167 else
168 ROS_WARN("LaneLineTimeChangeGroupUi config 's member 'data' not defined.");
169
170 if (rpc_value.hasMember("reference_frame"))
171 {
172 reference_frame_ = static_cast<std::string>(rpc_value["reference_frame"]);
173 }
174 else
175 ROS_WARN("LaneLineTimeChangeGroupUi config 's member 'reference_frame' not defined.");
176
177 graph_vector_.insert(
178 std::pair<std::string, Graph*>(graph_name_ + "_left", new Graph(rpc_value["config"], base_, id_++)));
179 graph_vector_.insert(
180 std::pair<std::string, Graph*>(graph_name_ + "_right", new Graph(rpc_value["config"], base_, id_++)));
181
182 for (auto it : graph_vector_)
183 lane_line_double_graph_.push_back(it.second);
184 }
185 void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time& time);
186
187protected:
188 std::string reference_frame_;
189 double robot_radius_, robot_height_, camera_range_, surface_coefficient_ = 0.5;
190 double pitch_angle_ = 0., screen_x_ = 1920, screen_y_ = 1080;
191 double end_point_a_angle_, end_point_b_angle_;
192
193private:
194 void updateConfig() override;
195
196 std::vector<Graph*> lane_line_double_graph_;
197};
198
200{
201public:
202 explicit BalancePitchTimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
203 std::deque<Graph>* character_queue)
204 : TimeChangeGroupUi(rpc_value, base, "balance_pitch", graph_queue, character_queue)
205 {
206 XmlRpc::XmlRpcValue config;
207
208 config["type"] = "line";
209 if (rpc_value["config"].hasMember("color"))
210 config["color"] = rpc_value["config"]["color"];
211 else
212 config["color"] = "cyan";
213 if (rpc_value["config"].hasMember("width"))
214 config["width"] = rpc_value["config"]["width"];
215 else
216 config["width"] = 2;
217 if (rpc_value["config"].hasMember("delay"))
218 config["delay"] = rpc_value["config"]["delay"];
219 else
220 config["delay"] = 0.2;
221
222 XmlRpc::XmlRpcValue data = rpc_value["data"];
223 ROS_ASSERT(data.hasMember("centre_point") && data.hasMember("bottom_angle") && data.hasMember("length"));
224 centre_point_[0] = static_cast<int>(data["centre_point"][0]);
225 centre_point_[1] = static_cast<int>(data["centre_point"][1]);
226 bottom_angle_ = data["bottom_angle"];
227 length_ = data["length"];
228 triangle_left_point_[0] = centre_point_[0] - length_ * sin(bottom_angle_ / 2);
229 triangle_left_point_[1] = centre_point_[1] + length_ * cos(bottom_angle_ / 2);
230 triangle_right_point_[0] = centre_point_[0] + length_ * sin(bottom_angle_ / 2);
231 triangle_right_point_[1] = centre_point_[1] + length_ * cos(bottom_angle_ / 2);
232
233 config["start_position"][0] = centre_point_[0] - length_;
234 config["start_position"][1] = centre_point_[1];
235 config["end_position"][0] = centre_point_[0] + length_;
236 config["end_position"][1] = centre_point_[1];
237 graph_vector_.insert(std::make_pair<std::string, Graph*>("bottom", new Graph(config, base_, id_++)));
238
239 config["start_position"][0] = centre_point_[0];
240 config["start_position"][1] = centre_point_[1];
241 config["end_position"][0] = triangle_left_point_[0];
242 config["end_position"][1] = triangle_left_point_[1];
243 graph_vector_.insert(std::make_pair<std::string, Graph*>("triangle_left_side", new Graph(config, base_, id_++)));
244
245 config["start_position"][0] = centre_point_[0];
246 config["start_position"][1] = centre_point_[1];
247 config["end_position"][0] = triangle_right_point_[0];
248 config["end_position"][1] = triangle_right_point_[1];
249 graph_vector_.insert(std::make_pair<std::string, Graph*>("triangle_right_side", new Graph(config, base_, id_++)));
250 }
251
252 void calculatePointPosition(const rm_msgs::BalanceStateConstPtr& data, const ros::Time& time);
253
254private:
255 void updateConfig() override;
256
257 int centre_point_[2], triangle_left_point_[2], triangle_right_point_[2], length_;
258 double bottom_angle_;
259};
260
262{
263public:
264 explicit PitchAngleTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
265 std::deque<Graph>* character_queue)
266 : TimeChangeUi(rpc_value, base, "pitch", graph_queue, character_queue){};
267 void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time& time);
268
269private:
270 void updateConfig() override;
271 double pitch_angle_ = 0.;
272};
273
275{
276public:
277 explicit ImageTransmissionAngleTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base,
278 std::deque<Graph>* graph_queue, std::deque<Graph>* character_queue)
279 : TimeChangeUi(rpc_value, base, "image_transmission", graph_queue, character_queue){};
280 void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time& time);
281
282private:
283 void updateConfig() override;
284 double image_transmission_angle_ = 0.;
285};
286
288{
289public:
290 explicit JointPositionTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
291 std::deque<Graph>* character_queue, std::string name)
292 : TimeChangeUi(rpc_value, base, name, graph_queue, character_queue)
293 {
294 if (rpc_value.hasMember("data"))
295 {
296 XmlRpc::XmlRpcValue data = rpc_value["data"];
297 min_val_ = static_cast<double>(data["min_val"]);
298 max_val_ = static_cast<double>(data["max_val"]);
299 direction_ = static_cast<std::string>(data["direction"]);
300 length_ = static_cast<double>(data["line_length"]);
301 }
302 name_ = name;
303 };
304 void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time& time);
305
306private:
307 void updateConfig() override;
308 std::string name_, direction_;
309 double max_val_, min_val_, current_val_, length_;
310};
311
313{
314public:
315 explicit BulletTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
316 std::deque<Graph>* character_queue)
317 : TimeChangeUi(rpc_value, base, "remaining_bullet", graph_queue, character_queue){};
318 void updateBulletData(const rm_msgs::BulletAllowance& data, const ros::Time& time);
319 void reset();
320
321private:
322 void updateConfig() override;
323 int bullet_allowance_num_17_mm_, bullet_allowance_num_42_mm_, bullet_num_17_mm_{ 0 }, bullet_num_42_mm_{ 0 };
324};
325
327{
328public:
329 explicit TargetDistanceTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
330 std::deque<Graph>* character_queue)
331 : TimeChangeUi(rpc_value, base, "target_distance", graph_queue, character_queue){};
332 void updateTargetDistanceData(const rm_msgs::TrackData::ConstPtr& data);
333
334private:
335 void updateConfig() override;
336 double target_distance_;
337};
339{
340public:
341 explicit EnemyColorTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
342 std::deque<Graph>* character_queue)
343 : TimeChangeUi(rpc_value, base, "enemy_color", graph_queue, character_queue){};
344 void updateEnemyColorData(const std_msgs::Bool::ConstPtr& data);
345
346private:
347 void updateConfig() override;
348 int enemy_color_{};
349};
351{
352public:
353 explicit DeployDistanceTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
354 std::deque<Graph>* character_queue)
355 : TimeChangeUi(rpc_value, base, "deploy_distance", graph_queue, character_queue){};
356 void updateDeployDistanceData(const geometry_msgs::PointConstPtr& data);
357
358private:
359 void updateConfig() override;
360 double deploy_distance_{};
361};
362
364{
365public:
366 explicit HeroLegTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
367 std::deque<Graph>* character_queue)
368 : TimeChangeUi(rpc_value, base, "hero_leg_feedforward_countdown", graph_queue, character_queue)
369 {
370 }
371 void updateFeedforwardCountdown(int feedforward_countdown);
372
373private:
374 void updateConfig() override;
375 int feedforward_countdown_{};
376};
378{
379public:
380 explicit DroneTowardsTimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
381 std::deque<Graph>* character_queue)
382 : TimeChangeGroupUi(rpc_value, base, "drone_towards", graph_queue, character_queue)
383 {
384 if (rpc_value.hasMember("data"))
385 {
386 XmlRpc::XmlRpcValue& data = rpc_value["data"];
387 ori_x_ = static_cast<int>(data["ori_x"]);
388 ori_y_ = static_cast<int>(data["ori_y"]);
389 }
390 else
391 ROS_WARN("DroneTowardsTimeChangeGroupUi config 's member 'data' not defined.");
392
393 graph_vector_.insert(
394 std::pair<std::string, Graph*>(graph_name_ + "_mid", new Graph(rpc_value["config"], base_, id_++)));
395 graph_vector_.insert(
396 std::pair<std::string, Graph*>(graph_name_ + "_left", new Graph(rpc_value["config"], base_, id_++)));
397 graph_vector_.insert(
398 std::pair<std::string, Graph*>(graph_name_ + "_right", new Graph(rpc_value["config"], base_, id_++)));
399 };
400 void updateTowardsData(const geometry_msgs::PoseStampedConstPtr& data);
401
402private:
403 void updateConfig() override;
404 int ori_x_, ori_y_;
405 double angle_;
406 int mid_line_x1_, mid_line_y1_, mid_line_x2_, mid_line_y2_, left_line_x2_, left_line_y2_, right_line_x2_,
407 right_line_y2_;
408};
409
411{
412public:
413 explicit FriendBulletsTimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
414 std::deque<Graph>* character_queue)
415 : TimeChangeGroupUi(rpc_value, base, "friend_bullets", graph_queue, character_queue)
416 {
417 graph_vector_.insert(std::pair<std::string, Graph*>("hero", new Graph(rpc_value["config"], base_, id_++)));
418 graph_vector_.insert(std::pair<std::string, Graph*>("standard3", new Graph(rpc_value["config"], base_, id_++)));
419 graph_vector_.insert(std::pair<std::string, Graph*>("standard4", new Graph(rpc_value["config"], base_, id_++)));
420 graph_vector_.insert(std::pair<std::string, Graph*>("standard5", new Graph(rpc_value["config"], base_, id_++)));
421 int ui_start_y = 0;
422 for (auto it = graph_vector_.begin(); it != graph_vector_.end(); ++it)
423 {
424 if (it == graph_vector_.begin())
425 ui_start_y = it->second->getConfig().start_y;
426 else
427 {
428 ui_start_y -= 40;
429 it->second->setStartY(ui_start_y);
430 }
431 }
432 };
433 void updateBulletsData(const rm_referee::BulletNumData& data);
434
435private:
436 void updateConfig() override;
437 int hero_bullets_{ 1 }, standard3_bullets_{ 3 }, standard4_bullets_{ 4 }, standard5_bullets_{ 5 };
438};
439
441{
442public:
443 explicit TargetHpTimeChangeUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
444 std::deque<Graph>* character_queue)
445 : TimeChangeUi(rpc_value, base, "target_hp", graph_queue, character_queue)
446 {
447 if (rpc_value.hasMember("enemy_id"))
448 {
449 XmlRpc::XmlRpcValue& enemy_id = rpc_value["enemy_id"];
450 for (int i = 0; i < enemy_id.size(); i++)
451 {
452 int id = static_cast<int>(enemy_id[i]);
453 enemy_robot_hp_[id] = 0;
454 }
455 }
456 }
457 void setEnemyHp(const rm_msgs::GameRobotHp& data);
458 void updateTrackID(int id);
459 void updateTargeHptData();
460
461private:
462 void updateConfig() override;
463 std::map<int, int> enemy_robot_hp_;
464 int target_hp_{}, target_id_{};
465};
466
468{
469public:
470 explicit LegThetaTimeChangeGroupUi(XmlRpc::XmlRpcValue& rpc_value, Base& base, std::deque<Graph>* graph_queue,
471 std::deque<Graph>* character_queue)
472 : TimeChangeGroupUi(rpc_value, base, "leg_theta", graph_queue, character_queue)
473 {
474 XmlRpc::XmlRpcValue line_config;
475 line_config["type"] = "line";
476 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("color"))
477 line_config["color"] = rpc_value["config"]["color"];
478 else
479 line_config["color"] = "cyan";
480 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("width"))
481 line_config["width"] = rpc_value["config"]["width"];
482 else
483 line_config["width"] = 2;
484 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("delay"))
485 line_config["delay"] = rpc_value["config"]["delay"];
486 else
487 line_config["delay"] = 0.2;
488
489 // Virtual rod is rendered as multiple short segments (dash effect).
490 XmlRpc::XmlRpcValue virtual_rod_config = line_config;
491 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("virtual_rod_color"))
492 virtual_rod_config["color"] = rpc_value["config"]["virtual_rod_color"];
493 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("virtual_rod_width"))
494 virtual_rod_config["width"] = rpc_value["config"]["virtual_rod_width"];
495 else
496 virtual_rod_config["width"] = 1;
497
498 XmlRpc::XmlRpcValue rect_config;
499 rect_config["type"] = "rectangle";
500 if (rpc_value.hasMember("config") && rpc_value["config"].hasMember("chassis_color"))
501 rect_config["color"] = rpc_value["config"]["chassis_color"];
502 else
503 rect_config["color"] = line_config["color"];
504 rect_config["width"] = line_config["width"];
505 rect_config["delay"] = line_config["delay"];
506
507 if (rpc_value.hasMember("data"))
508 {
509 XmlRpc::XmlRpcValue data = rpc_value["data"];
510 if (data.hasMember("draw_chassis"))
511 draw_chassis_ = static_cast<bool>(data["draw_chassis"]);
512 if (data.hasMember("chassis_start") && data.hasMember("chassis_end"))
513 {
514 chassis_start_[0] = static_cast<int>(data["chassis_start"][0]);
515 chassis_start_[1] = static_cast<int>(data["chassis_start"][1]);
516 chassis_end_[0] = static_cast<int>(data["chassis_end"][0]);
517 chassis_end_[1] = static_cast<int>(data["chassis_end"][1]);
518 }
519 else
520 {
521 ROS_WARN("LegThetaTimeChangeGroupUi: 'data.chassis_start/end' not defined, using default rectangle.");
522 chassis_start_[0] = 800;
523 chassis_start_[1] = 600;
524 chassis_end_[0] = 1120;
525 chassis_end_[1] = 720;
526 }
527
528 if (data.hasMember("origin_point"))
529 {
530 origin_point_[0] = static_cast<int>(data["origin_point"][0]);
531 origin_point_[1] = static_cast<int>(data["origin_point"][1]);
532 }
533 else
534 {
535 // Default: rectangle center.
536 origin_point_[0] = (chassis_start_[0] + chassis_end_[0]) / 2;
537 origin_point_[1] = (chassis_start_[1] + chassis_end_[1]) / 2;
538 }
539
540 if (data.hasMember("link1_length"))
541 link1_length_m_ = static_cast<double>(data["link1_length"]);
542 if (data.hasMember("link2_length"))
543 link2_length_m_ = static_cast<double>(data["link2_length"]);
544 if (data.hasMember("pixels_per_meter"))
545 pixels_per_meter_ = static_cast<double>(data["pixels_per_meter"]);
546 if (data.hasMember("leg_side"))
547 leg_side_ = static_cast<std::string>(data["leg_side"]);
548 }
549 else
550 {
551 ROS_WARN("LegThetaTimeChangeGroupUi config 's member 'data' not defined.");
552 }
553
554 // Chassis rectangle (left=rear, right=front).
555 if (draw_chassis_)
556 {
557 rect_config["start_position"][0] = chassis_start_[0];
558 rect_config["start_position"][1] = chassis_start_[1];
559 rect_config["end_position"][0] = chassis_end_[0];
560 rect_config["end_position"][1] = chassis_end_[1];
561 graph_vector_.insert(std::make_pair<std::string, Graph*>("chassis", new Graph(rect_config, base_, id_++)));
562 }
563
564 // Link 1 and Link 2.
565 line_config["start_position"][0] = origin_point_[0];
566 line_config["start_position"][1] = origin_point_[1];
567 line_config["end_position"][0] = origin_point_[0];
568 line_config["end_position"][1] = origin_point_[1];
569 graph_vector_.insert(std::make_pair<std::string, Graph*>("link1", new Graph(line_config, base_, id_++)));
570 graph_vector_.insert(std::make_pair<std::string, Graph*>("link2", new Graph(line_config, base_, id_++)));
571 }
572
573 void calculatePointPosition(const rm_msgs::LeggedChassisStatusConstPtr& data, const ros::Time& time);
574
575private:
576 void updateConfig() override;
577
578 int chassis_start_[2]{ 800, 600 };
579 int chassis_end_[2]{ 1120, 720 };
580 int origin_point_[2]{ 960, 660 }; // hip/pivot point in screen coordinates
581
582 bool draw_chassis_{ true };
583
584 // IK config
585 double link1_length_m_{ 0.21 };
586 double link2_length_m_{ 0.248 };
587 double pixels_per_meter_{ 600.0 };
588 std::string leg_side_{ "left" }; // "left" or "right"
589
590 // Latest input (virtual rod)
591 double virtual_rod_length_m_{ 0.0 };
592 double virtual_rod_theta_rad_{ 0.0 };
593
594 // Solved points (screen coordinates)
595 int knee_point_[2]{ 960, 660 };
596 int foot_point_[2]{ 960, 660 };
597
598 // Keep IK solution continuous across updates (avoid knee flipping between the two possible IK branches).
599 bool knee_initialized_{ false };
600};
601
602} // namespace rm_referee
Definition time_change_ui.h:200
BalancePitchTimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:202
Definition data.h:120
Definition time_change_ui.h:313
BulletTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:315
Definition time_change_ui.h:47
CapacitorTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:49
void updateRemainCharge(const double remain_charge, const ros::Time &time)
Definition time_change_ui.cpp:76
void add() override
Definition time_change_ui.cpp:50
Definition time_change_ui.h:105
void updateDartClientCmd(const rm_msgs::DartClientCmd::ConstPtr data, const ros::Time &last_get_data_time)
Definition time_change_ui.cpp:183
DartStatusTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:107
Definition time_change_ui.h:351
DeployDistanceTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:353
Definition time_change_ui.h:378
DroneTowardsTimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:380
Definition time_change_ui.h:77
void updateJointStateData(const sensor_msgs::JointState::ConstPtr data, const ros::Time &time)
Definition time_change_ui.cpp:125
EffortTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:79
Definition time_change_ui.h:339
EnemyColorTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:341
Definition time_change_ui.h:411
FriendBulletsTimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:413
Definition graph.h:13
Definition ui_base.h:72
Definition time_change_ui.h:364
HeroLegTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:366
Definition time_change_ui.h:275
ImageTransmissionAngleTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:277
Definition time_change_ui.h:288
JointPositionTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue, std::string name)
Definition time_change_ui.h:290
Definition time_change_ui.h:153
double end_point_a_angle_
Definition time_change_ui.h:191
double camera_range_
Definition time_change_ui.h:189
LaneLineTimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:155
std::string reference_frame_
Definition time_change_ui.h:188
Definition time_change_ui.h:468
LegThetaTimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:470
Definition time_change_ui.h:262
PitchAngleTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:264
Definition time_change_ui.h:91
void updateEngineerUiData(const rm_msgs::EngineerUi::ConstPtr data, const ros::Time &last_get_data_time)
Definition time_change_ui.cpp:154
ProgressTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:93
Definition time_change_ui.h:61
RelocalizeProgressTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:63
void add() override
Definition time_change_ui.cpp:81
void updateRelocalizeProgress(const double data, const ros::Time &time)
Definition time_change_ui.cpp:107
Definition time_change_ui.h:118
RotationTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:120
Definition time_change_ui.h:327
TargetDistanceTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:329
Definition time_change_ui.h:441
TargetHpTimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:443
Definition time_change_ui.h:30
std::string graph_name_
Definition time_change_ui.h:43
virtual void updateConfig()
Definition time_change_ui.h:40
TimeChangeGroupUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, const std::string &graph_name, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:32
void update() override
Definition time_change_ui.cpp:18
void updateForQueue() override
Definition time_change_ui.cpp:40
Definition time_change_ui.h:16
TimeChangeUi(XmlRpc::XmlRpcValue &rpc_value, Base &base, const std::string &graph_name, std::deque< Graph > *graph_queue, std::deque< Graph > *character_queue)
Definition time_change_ui.h:18
void updateForQueue() override
Definition time_change_ui.cpp:28
virtual void updateConfig()
Definition time_change_ui.h:26
void update() override
Definition time_change_ui.cpp:11
Definition ui_base.h:20
Graph * graph_
Definition ui_base.h:59
static int id_
Definition ui_base.h:60
Base & base_
Definition ui_base.h:58
Definition data.h:109