| 109 | } |
| 110 | |
| 111 | void updateCallback(const ros::TimerEvent& e) { |
| 112 | ros::Time time_now = ros::Time::now(); |
| 113 | |
| 114 | /* ---------- change input ---------- */ |
| 115 | double dtc = (time_now - time_change).toSec(); |
| 116 | if (dtc > _interval) { |
| 117 | for (int i = 0; i < obj_num; ++i) { |
| 118 | /* ---------- use acc input ---------- */ |
| 119 | // double r, t, z; |
| 120 | // r = rand_acc_r(eng); |
| 121 | // t = rand_acc_t(eng); |
| 122 | // z = rand_acc_z(eng); |
| 123 | // Eigen::Vector3d acc(r * cos(t), r * sin(t), z); |
| 124 | // obj_models[i].setInput(acc); |
| 125 | |
| 126 | /* ---------- use vel input ---------- */ |
| 127 | double vx, vy, vz, yd; |
| 128 | vx = rand_vel(eng); |
| 129 | vy = rand_vel(eng); |
| 130 | vz = 0.0; |
| 131 | yd = rand_yaw_dot(eng); |
| 132 | |
| 133 | obj_models[i].setInput(Eigen::Vector3d(vx, vy, vz)); |
| 134 | obj_models[i].setYawDot(yd); |
| 135 | } |
| 136 | time_change = time_now; |
| 137 | } |
| 138 | |
| 139 | /* ---------- update obj state ---------- */ |
| 140 | double dt = (time_now - time_update).toSec(); |
| 141 | time_update = time_now; |
| 142 | for (int i = 0; i < obj_num; ++i) { |
| 143 | obj_models[i].update(dt); |
| 144 | visualizeObj(i); |
| 145 | } |
| 146 | |
| 147 | /* ---------- collision ---------- */ |
| 148 | for (int i = 0; i < obj_num; ++i) |
| 149 | for (int j = i + 1; j < obj_num; ++j) { |
| 150 | bool collision = LinearObjModel::collide(obj_models[i], obj_models[j]); |
| 151 | if (collision) { |
| 152 | double yd1 = rand_yaw_dot(eng); |
| 153 | double yd2 = rand_yaw_dot(eng); |
| 154 | obj_models[i].setYawDot(yd1); |
| 155 | obj_models[j].setYawDot(yd2); |
| 156 | } |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | void visualizeObj(int id) { |
| 161 | Eigen::Vector3d pos, color, scale; |
nothing calls this directly
no test coverage detected