interactive_data.cpp
Go to the documentation of this file.
1 //
2 // Created by gura on 24-5-29.
3 //
4 
6 
7 namespace rm_referee
8 {
9 void InteractiveSender::sendInteractiveData(int data_cmd_id, int receiver_id, unsigned char data)
10 {
11  uint8_t tx_data[sizeof(InteractiveData)] = { 0 };
12  auto student_interactive_data = (InteractiveData*)tx_data;
13 
14  for (int i = 0; i < 127; i++)
15  tx_buffer_[i] = 0;
16  student_interactive_data->header_data.data_cmd_id = data_cmd_id;
17  student_interactive_data->header_data.sender_id = base_.robot_id_;
18  student_interactive_data->header_data.receiver_id = receiver_id;
19  student_interactive_data->data = data;
20  pack(tx_buffer_, tx_data, RefereeCmdId::INTERACTIVE_DATA_CMD, sizeof(InteractiveData));
21  tx_len_ = k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(InteractiveData) + k_tail_length_);
22 
23  sendSerial(ros::Time::now(), sizeof(InteractiveData));
24 }
25 
27 {
29 }
30 
31 void InteractiveSender::sendMapSentryData(const rm_referee::MapSentryData& data)
32 {
33  uint8_t tx_data[sizeof(rm_referee::MapSentryData)] = { 0 };
34  auto map_sentry_data = (rm_referee::MapSentryData*)tx_data;
35 
36  for (int i = 0; i < 127; i++)
37  tx_buffer_[i] = 0;
38  map_sentry_data->intention = data.intention;
39  map_sentry_data->start_position_x = data.start_position_x;
40  map_sentry_data->start_position_y = data.start_position_y;
41  for (int i = 0; i < 49; i++)
42  {
43  map_sentry_data->delta_x[i] = data.delta_x[i];
44  map_sentry_data->delta_y[i] = data.delta_y[i];
45  }
46  map_sentry_data->sender_id = base_.robot_id_;
47  pack(tx_buffer_, tx_data, rm_referee::RefereeCmdId::MAP_SENTRY_CMD, sizeof(rm_referee::MapSentryData));
48  tx_len_ = k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(rm_referee::MapSentryData) + k_tail_length_);
49 
50  try
51  {
53  }
55  {
57  }
58  clearTxBuffer();
59 }
60 
61 void CustomInfoSender::sendCustomInfoData(std::wstring data)
62 {
63  if (data == last_custom_info_ || ros::Time::now() - last_send_ < ros::Duration(0.35))
64  return;
65  else
66  last_custom_info_ = data;
67 
68  int data_len;
69  rm_referee::CustomInfo tx_data;
70  data_len = static_cast<int>(sizeof(rm_referee::CustomInfo));
71 
72  tx_data.sender_id = base_.robot_id_;
73  tx_data.receiver_id = base_.client_id_;
74 
75  uint16_t characters[15];
76  for (int i = 0; i < 15; i++)
77  {
78  if (i < static_cast<int>(data.size()))
79  characters[i] = static_cast<uint16_t>(data[i]);
80  else
81  characters[i] = static_cast<uint16_t>(L' ');
82  }
83  for (int i = 0; i < 15; i++)
84  {
85  tx_data.user_data[2 * i] = characters[i] & 0xFF;
86  tx_data.user_data[2 * i + 1] = (characters[i] >> 8) & 0xFF;
87  }
88  pack(tx_buffer_, reinterpret_cast<uint8_t*>(&tx_data), rm_referee::RefereeCmdId::CUSTOM_TO_ROBOT_CMD, data_len);
90  sendSerial(ros::Time::now(), data_len);
91 }
92 
93 void InteractiveSender::sendRadarInteractiveData(const rm_msgs::ClientMapReceiveData::ConstPtr& data)
94 {
95  uint8_t tx_data[sizeof(rm_referee::ClientMapReceiveData)] = { 0 };
96  auto radar_interactive_data = (rm_referee::ClientMapReceiveData*)tx_data;
97 
98  for (int i = 0; i < 127; i++)
99  tx_buffer_[i] = 0;
100  radar_interactive_data->hero_position_x = data->hero_position_x;
101  radar_interactive_data->hero_position_y = data->hero_position_y;
102  radar_interactive_data->engineer_position_x = data->engineer_position_x;
103  radar_interactive_data->engineer_position_y = data->engineer_position_y;
104  radar_interactive_data->infantry_3_position_x = data->infantry_3_position_x;
105  radar_interactive_data->infantry_3_position_y = data->infantry_3_position_y;
106  radar_interactive_data->infantry_4_position_x = data->infantry_4_position_x;
107  radar_interactive_data->infantry_4_position_y = data->infantry_4_position_y;
108  radar_interactive_data->infantry_5_position_x = data->infantry_5_position_x;
109  radar_interactive_data->infantry_5_position_y = data->infantry_5_position_y;
110  radar_interactive_data->sentry_position_x = data->sentry_position_x;
111  radar_interactive_data->sentry_position_y = data->sentry_position_y;
112  pack(tx_buffer_, tx_data, rm_referee::RefereeCmdId::CLIENT_MAP_CMD, sizeof(rm_referee::ClientMapReceiveData));
113  tx_len_ =
114  k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(rm_referee::ClientMapReceiveData) + k_tail_length_);
115  try
116  {
118  }
120  {
121  ROS_ERROR_STREAM(e.what());
122  }
123  clearTxBuffer();
124 }
125 
126 void InteractiveSender::sendSentryCmdData(const rm_msgs::SentryCmdConstPtr& data)
127 {
128  int data_len;
129  rm_referee::SentryCmd tx_data;
130  data_len = static_cast<int>(sizeof(rm_referee::SentryCmd));
131 
132  tx_data.header.sender_id = base_.robot_id_;
133  tx_data.header.receiver_id = REFEREE_SERVER;
134  tx_data.sentry_info = data->sentry_info;
135  tx_data.header.data_cmd_id = rm_referee::DataCmdId::SENTRY_CMD;
136  pack(tx_buffer_, reinterpret_cast<uint8_t*>(&tx_data), rm_referee::RefereeCmdId::INTERACTIVE_DATA_CMD, data_len);
137  sendSerial(ros::Time::now(), data_len);
138 }
139 
140 void InteractiveSender::sendRadarCmdData(const rm_msgs::RadarInfoConstPtr& data)
141 {
142  int data_len;
143  rm_referee::RadarInfo tx_data;
144  data_len = static_cast<int>(sizeof(rm_referee::RadarInfo));
145 
146  tx_data.header.sender_id = base_.robot_id_;
147  tx_data.header.receiver_id = REFEREE_SERVER;
148  tx_data.radar_info = data->radar_info;
149 
150  tx_data.header.data_cmd_id = rm_referee::DataCmdId::RADAR_CMD;
151  pack(tx_buffer_, reinterpret_cast<uint8_t*>(&tx_data), rm_referee::RefereeCmdId::INTERACTIVE_DATA_CMD, data_len);
152  sendSerial(ros::Time::now(), data_len);
153 }
154 
156 {
157  uint16_t receiver_id;
158  if (base_.robot_color_ == "red")
159  receiver_id = RED_HERO;
160  else
161  receiver_id = BLUE_HERO;
162  if (count_receive_time_ % 5 == 1)
164  receiver_id += count_receive_time_ % 5;
165 
166  uint8_t tx_data[sizeof(BulletNumData)] = { 0 };
167  auto bullet_num_data = (BulletNumData*)tx_data;
168 
169  for (int i = 0; i < 127; i++)
170  tx_buffer_[i] = 0;
171  bullet_num_data->header_data.data_cmd_id = rm_referee::DataCmdId::BULLET_NUM_SHARE_CMD;
172  bullet_num_data->header_data.sender_id = base_.robot_id_;
173  bullet_num_data->header_data.receiver_id = receiver_id;
174  bullet_num_data->bullet_42_mm_num = bullet_42_mm_num_;
175  bullet_num_data->bullet_17_mm_num = bullet_17_mm_num_;
176  pack(tx_buffer_, tx_data, RefereeCmdId::INTERACTIVE_DATA_CMD, sizeof(BulletNumData));
177  tx_len_ = k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(BulletNumData) + k_tail_length_);
178  sendSerial(ros::Time::now(), sizeof(BulletNumData));
181 }
182 
183 void BulletNumShare::updateBulletRemainData(const rm_msgs::BulletAllowance& data)
184 {
185  if (data.bullet_allowance_num_42_mm > 5096 || data.bullet_allowance_num_17_mm > 5096)
186  return;
187  bullet_17_mm_num_ = data.bullet_allowance_num_17_mm;
188  bullet_42_mm_num_ = data.bullet_allowance_num_42_mm;
189 }
190 
191 void SentryToRadar::updateSentryAttackingTargetData(const rm_msgs::SentryAttackingTargetConstPtr& data)
192 {
193  robot_id_ = data->target_robot_ID;
194  target_position_x_ = data->target_position_x;
195  target_position_y_ = data->target_position_y;
196 }
197 
199 {
200  uint8_t tx_data[sizeof(SentryAttackingTargetData)] = { 0 };
201  auto sentry_attacking_target_data = (SentryAttackingTargetData*)tx_data;
202 
203  for (int i = 0; i < 127; i++)
204  tx_buffer_[i] = 0;
205  sentry_attacking_target_data->header_data.data_cmd_id = rm_referee::DataCmdId::SENTRY_TO_RADAR_CMD;
206  sentry_attacking_target_data->header_data.sender_id = base_.robot_id_;
207  if (base_.robot_color_ == "red")
208  sentry_attacking_target_data->header_data.receiver_id = RED_RADAR;
209  else
210  sentry_attacking_target_data->header_data.receiver_id = BLUE_RADAR;
211  sentry_attacking_target_data->target_robot_ID = robot_id_;
212  sentry_attacking_target_data->target_position_x = target_position_x_;
213  sentry_attacking_target_data->target_position_y = target_position_y_;
214  pack(tx_buffer_, tx_data, RefereeCmdId::INTERACTIVE_DATA_CMD, sizeof(SentryAttackingTargetData));
215  tx_len_ = k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(SentryAttackingTargetData) + k_tail_length_);
216  sendSerial(ros::Time::now(), sizeof(SentryAttackingTargetData));
218 }
219 
221 {
223 }
224 
225 void RadarToSentry::updateRadarToSentryData(const rm_msgs::RadarToSentryConstPtr& data)
226 {
227  robot_id_ = data->robot_ID;
228  position_x_ = data->position_x;
229  position_y_ = data->position_y;
230  engineer_marked_ = data->engineer_marked;
231  has_new_data_ = true;
232 }
233 
235 {
236  uint8_t tx_data[sizeof(RadarToSentryData)] = { 0 };
237  auto radar_to_sentry_data = (RadarToSentryData*)tx_data;
238 
239  for (int i = 0; i < 127; i++)
240  tx_buffer_[i] = 0;
241  radar_to_sentry_data->header_data.data_cmd_id = rm_referee::DataCmdId::RADAR_TO_SENTRY_CMD;
242  radar_to_sentry_data->header_data.sender_id = base_.robot_id_;
243  if (base_.robot_color_ == "red")
244  radar_to_sentry_data->header_data.receiver_id = RED_SENTRY;
245  else
246  radar_to_sentry_data->header_data.receiver_id = BLUE_SENTRY;
247  radar_to_sentry_data->robot_ID = robot_id_;
248  radar_to_sentry_data->position_x = position_x_;
249  radar_to_sentry_data->position_y = position_y_;
250  radar_to_sentry_data->engineer_marked = engineer_marked_;
251  pack(tx_buffer_, tx_data, RefereeCmdId::INTERACTIVE_DATA_CMD, sizeof(RadarToSentryData));
252  tx_len_ = k_header_length_ + k_cmd_id_length_ + static_cast<int>(sizeof(RadarToSentryData) + k_tail_length_);
253  sendSerial(ros::Time::now(), sizeof(RadarToSentryData));
255  has_new_data_ = false;
256 }
257 
259 {
261 }
262 
263 } // namespace rm_referee
rm_referee::SentryToRadar::target_position_y_
float target_position_y_
Definition: interactive_data.h:60
rm_referee::Base::robot_id_
int robot_id_
Definition: data.h:148
rm_referee::SentryToRadar::needSendInteractiveData
bool needSendInteractiveData() override
Definition: interactive_data.cpp:220
rm_referee
Definition: data.h:100
rm_referee::BulletNumShare::count_receive_time_
int count_receive_time_
Definition: interactive_data.h:47
ROS_ERROR_STREAM
#define ROS_ERROR_STREAM(args)
rm_referee::RADAR_CMD
@ RADAR_CMD
Definition: protocol.h:97
rm_referee::UiBase::k_header_length_
const int k_header_length_
Definition: ui_base.h:68
rm_referee::MAP_SENTRY_CMD
@ MAP_SENTRY_CMD
Definition: protocol.h:76
rm_referee::InteractiveSender::needSendInteractiveData
virtual bool needSendInteractiveData()
Definition: interactive_data.cpp:26
rm_referee::SentryToRadar::updateSentryAttackingTargetData
void updateSentryAttackingTargetData(const rm_msgs::SentryAttackingTargetConstPtr &data)
Definition: interactive_data.cpp:191
rm_referee::UiBase::k_cmd_id_length_
const int k_cmd_id_length_
Definition: ui_base.h:68
rm_referee::CLIENT_MAP_CMD
@ CLIENT_MAP_CMD
Definition: protocol.h:74
rm_referee::RadarToSentry::updateRadarToSentryData
void updateRadarToSentryData(const rm_msgs::RadarToSentryConstPtr &data)
Definition: interactive_data.cpp:225
rm_referee::Base::client_id_
int client_id_
Definition: data.h:147
rm_referee::SentryToRadar::target_position_x_
float target_position_x_
Definition: interactive_data.h:60
rm_referee::InteractiveSender::last_send_time_
ros::Time last_send_time_
Definition: interactive_data.h:24
rm_referee::SentryToRadar::robot_id_
int robot_id_
Definition: interactive_data.h:59
rm_referee::Base::robot_color_
std::string robot_color_
Definition: data.h:150
rm_referee::SENTRY_TO_RADAR_CMD
@ SENTRY_TO_RADAR_CMD
Definition: protocol.h:99
rm_referee::BLUE_HERO
@ BLUE_HERO
Definition: protocol.h:115
rm_referee::REFEREE_SERVER
@ REFEREE_SERVER
Definition: protocol.h:141
rm_referee::UiBase::pack
void pack(uint8_t *tx_buffer, uint8_t *data, int cmd_id, int len) const
Definition: ui_base.cpp:339
rm_referee::InteractiveSender::sendRadarCmdData
void sendRadarCmdData(const rm_msgs::RadarInfoConstPtr &data)
Definition: interactive_data.cpp:140
rm_referee::RADAR_TO_SENTRY_CMD
@ RADAR_TO_SENTRY_CMD
Definition: protocol.h:100
rm_referee::InteractiveSender::sendRadarInteractiveData
void sendRadarInteractiveData(const rm_msgs::ClientMapReceiveData::ConstPtr &data)
Definition: interactive_data.cpp:93
rm_referee::UiBase::delay_
ros::Duration delay_
Definition: ui_base.h:67
serial::PortNotOpenedException::what
virtual const char * what() const
rm_referee::BLUE_SENTRY
@ BLUE_SENTRY
Definition: protocol.h:121
rm_referee::UiBase::clearTxBuffer
void clearTxBuffer()
Definition: ui_base.cpp:366
rm_referee::RED_HERO
@ RED_HERO
Definition: protocol.h:105
rm_referee::CustomInfoSender::sendCustomInfoData
void sendCustomInfoData(std::wstring data)
Definition: interactive_data.cpp:61
rm_referee::UiBase::last_send_
ros::Time last_send_
Definition: ui_base.h:66
rm_referee::RadarToSentry::position_y_
float position_y_
Definition: interactive_data.h:73
rm_referee::CUSTOM_TO_ROBOT_CMD
@ CUSTOM_TO_ROBOT_CMD
Definition: protocol.h:77
rm_referee::RadarToSentry::robot_id_
int robot_id_
Definition: interactive_data.h:72
rm_referee::RED_RADAR
@ RED_RADAR
Definition: protocol.h:112
rm_referee::UiBase::base_
Base & base_
Definition: ui_base.h:58
serial::Serial::write
size_t write(const std::string &data)
rm_referee::BulletNumShare::bullet_42_mm_num_
int bullet_42_mm_num_
Definition: interactive_data.h:47
rm_referee::UiBase::k_tail_length_
const int k_tail_length_
Definition: ui_base.h:68
rm_referee::InteractiveSender::sendSentryCmdData
void sendSentryCmdData(const rm_msgs::SentryCmdConstPtr &data)
Definition: interactive_data.cpp:126
rm_referee::RadarToSentry::engineer_marked_
bool engineer_marked_
Definition: interactive_data.h:74
rm_referee::UiBase::tx_buffer_
uint8_t tx_buffer_[127]
Definition: ui_base.h:54
interactive_data.h
rm_referee::INTERACTIVE_DATA_CMD
@ INTERACTIVE_DATA_CMD
Definition: protocol.h:70
rm_referee::InteractiveSender::sendMapSentryData
void sendMapSentryData(const rm_referee::MapSentryData &data)
Definition: interactive_data.cpp:31
rm_referee::SentryToRadar::sendSentryToRadarData
void sendSentryToRadarData()
Definition: interactive_data.cpp:198
rm_referee::UiBase::tx_len_
int tx_len_
Definition: ui_base.h:55
rm_referee::RED_SENTRY
@ RED_SENTRY
Definition: protocol.h:111
rm_referee::CustomInfoSender::last_custom_info_
std::wstring last_custom_info_
Definition: interactive_data.h:36
rm_referee::RadarToSentry::has_new_data_
bool has_new_data_
Definition: interactive_data.h:74
rm_referee::SENTRY_CMD
@ SENTRY_CMD
Definition: protocol.h:96
rm_referee::BulletNumShare::bullet_17_mm_num_
int bullet_17_mm_num_
Definition: interactive_data.h:47
rm_referee::InteractiveSender::sendInteractiveData
void sendInteractiveData(int data_cmd_id, int receiver_id, unsigned char data)
Definition: interactive_data.cpp:9
rm_referee::UiBase::sendSerial
void sendSerial(const ros::Time &time, int data_len)
Definition: ui_base.cpp:352
rm_referee::BulletNumShare::updateBulletRemainData
void updateBulletRemainData(const rm_msgs::BulletAllowance &data)
Definition: interactive_data.cpp:183
rm_referee::RadarToSentry::needSendInteractiveData
bool needSendInteractiveData() override
Definition: interactive_data.cpp:258
rm_referee::Base::serial_
serial::Serial serial_
Definition: data.h:145
rm_referee::BulletNumShare::sendBulletData
void sendBulletData()
Definition: interactive_data.cpp:155
ros::Duration
rm_referee::RadarToSentry::sendRadarToSentryData
void sendRadarToSentryData()
Definition: interactive_data.cpp:234
serial::PortNotOpenedException
rm_referee::RadarToSentry::position_x_
float position_x_
Definition: interactive_data.h:73
rm_referee::BULLET_NUM_SHARE_CMD
@ BULLET_NUM_SHARE_CMD
Definition: protocol.h:98
ros::Time::now
static Time now()
rm_referee::BLUE_RADAR
@ BLUE_RADAR
Definition: protocol.h:122


rm_referee
Author(s): Qiayuan Liao
autogenerated on Tue May 6 2025 02:23:49