MCPcopy Create free account
hub / github.com/Robotics-STAR-Lab/RACER / cmdCallback

Function cmdCallback

swarm_exploration/plan_manage/src/traj_server.cpp:269–384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

267}
268
269void cmdCallback(const ros::TimerEvent& e) {
270 // No publishing before receive traj data
271 if (!receive_traj_) return;
272
273 ros::Time time_now = ros::Time::now();
274 double t_cur = (time_now - start_time_).toSec();
275 Eigen::Vector3d pos, vel, acc, jer;
276 double yaw, yawdot;
277
278 if (t_cur < traj_duration_ && t_cur >= 0.0) {
279 // Current time within range of planned traj
280 pos = traj_[0].evaluateDeBoorT(t_cur);
281 vel = traj_[1].evaluateDeBoorT(t_cur);
282 acc = traj_[2].evaluateDeBoorT(t_cur);
283 yaw = traj_[3].evaluateDeBoorT(t_cur)[0];
284 yawdot = traj_[4].evaluateDeBoorT(t_cur)[0];
285 jer = traj_[5].evaluateDeBoorT(t_cur);
286 } else if (t_cur >= traj_duration_) {
287 // Current time exceed range of planned traj
288 // keep publishing the final position and yaw
289 pos = traj_[0].evaluateDeBoorT(traj_duration_);
290 vel.setZero();
291 acc.setZero();
292 yaw = traj_[3].evaluateDeBoorT(traj_duration_)[0];
293 yawdot = 0.0;
294 } else {
295 cout << "[Traj server]: invalid time." << endl;
296 }
297
298 // Report info of the whole flight
299 double len = calcPathLength(traj_cmd_);
300 double flight_t = (end_time - start_time).toSec();
301 ROS_WARN_THROTTLE(1.0, "Drone %d, [%lf,%lf,%lf,%lf], [time, length, vel, energy]", drone_id_,
302 flight_t, len, len / flight_t, energy);
303
304 if (isLoopCorrection) {
305 pos = R_loop.transpose() * (pos - T_loop);
306 vel = R_loop.transpose() * vel;
307 acc = R_loop.transpose() * acc;
308
309 Eigen::Vector3d yaw_dir(cos(yaw), sin(yaw), 0);
310 yaw_dir = R_loop.transpose() * yaw_dir;
311 yaw = atan2(yaw_dir[1], yaw_dir[0]);
312 }
313
314 cmd.header.stamp = time_now;
315 cmd.trajectory_id = traj_id_;
316 cmd.position.x = pos(0);
317 cmd.position.y = pos(1);
318 cmd.position.z = pos(2);
319 cmd.velocity.x = vel(0);
320 cmd.velocity.y = vel(1);
321 cmd.velocity.z = vel(2);
322 cmd.acceleration.x = acc(0);
323 cmd.acceleration.y = acc(1);
324 cmd.acceleration.z = acc(2);
325 cmd.yaw = yaw;
326 cmd.yaw_dot = yawdot;

Callers

nothing calls this directly

Calls 6

calcPathLengthFunction · 0.85
drawFOVFunction · 0.85
evaluateDeBoorTMethod · 0.80
setPoseMethod · 0.80
getFOVMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected