29 #include <RDBHandler.hh> 31 #include <VtdToolkit/RDBHandler.hh> 86 uint8_t base_category{RDB_OBJECT_CATEGORY_PLAYER};
89 uint8_t base_type{RDB_OBJECT_TYPE_NONE};
92 uint16_t base_vis_mask{RDB_OBJECT_VIS_FLAG_TRAFFIC | RDB_OBJECT_VIS_FLAG_RECORDER};
122 {cloe::Object::Class::Car, RDB_OBJECT_TYPE_PLAYER_CAR},
123 {cloe::Object::Class::Truck, RDB_OBJECT_TYPE_PLAYER_TRUCK},
124 {cloe::Object::Class::Motorbike, RDB_OBJECT_TYPE_PLAYER_MOTORBIKE},
125 {cloe::Object::Class::Trailer, RDB_OBJECT_TYPE_PLAYER_TRAILER},
142 RDB_COORD_t rdb_coord_from_vector3d(
const Eigen::Vector3d& position,
143 const Eigen::Vector3d& angle_rph) {
145 coord.x = position.x();
146 coord.y = position.y();
147 coord.z = position.z();
148 coord.r = angle_rph.x();
149 coord.p = angle_rph.y();
150 coord.h = angle_rph.z();
151 coord.flags = RDB_COORD_FLAG_POINT_VALID | RDB_COORD_FLAG_ANGLES_VALID;
152 coord.type = RDB_COORD_TYPE_INERTIAL;
156 RDB_COORD_t rdb_coord_from_object(
const cloe::Object& obj) {
157 Eigen::Vector3d hpr = obj.
pose.rotation().matrix().eulerAngles(2, 1, 0);
158 return rdb_coord_from_vector3d(obj.
pose.translation(),
159 Eigen::Vector3d(hpr.z(), hpr.y(), hpr.x()));
162 RDB_COORD_t rdb_coord_pos_from_vector3d(
const Eigen::Vector3d& position) {
164 coord.x = position.x();
165 coord.y = position.y();
166 coord.z = position.z();
167 coord.flags = RDB_COORD_FLAG_POINT_VALID;
168 coord.type = RDB_COORD_TYPE_INERTIAL;
209 explicit TaskControl(std::unique_ptr<RdbTransceiver>&& rdb_transceiver)
210 :
VtdOmniSensor(std::move(rdb_transceiver), UNDEFINED_OWNER_ID) {
217 void process(RDB_DRIVER_CTRL_t* driver_ctrl)
override {
219 if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_STEERING_SPEED) {
220 steering_wheel_speed_[driver_ctrl->playerId] = driver_ctrl->steeringSpeed;
222 vtd_logger()->warn(
"{}: steeringSpeed missing in RDB_DRIVER_CTRL_t", this->get_name());
223 steering_wheel_speed_[driver_ctrl->playerId] = 0.0;
227 if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_TGT_ACCEL) {
228 driver_request_accel_[driver_ctrl->playerId] = driver_ctrl->accelTgt;
230 vtd_logger()->warn(
"{}: accelTgt missing in RDB_DRIVER_CTRL_t", this->get_name());
231 driver_request_accel_[driver_ctrl->playerId] = 0.0;
234 if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_TGT_STEERING) {
235 driver_request_steering_angle_[driver_ctrl->playerId] = driver_ctrl->steeringTgt;
237 vtd_logger()->warn(
"{}: steeringTgt missing in RDB_DRIVER_CTRL_t", this->get_name());
238 driver_request_steering_angle_[driver_ctrl->playerId] = 0.0;
244 steering_wheel_speed_.clear();
245 driver_request_accel_.clear();
246 driver_request_steering_angle_.clear();
253 RDB_DRIVER_CTRL_t* driverCtrl =
254 reinterpret_cast<RDB_DRIVER_CTRL_t*
>(handler_.addPackage(0.0, 0, RDB_PKG_ID_DRIVER_CTRL));
255 if (driverCtrl ==
nullptr) {
256 vtd_logger()->error(
"TaskControl: cannot add RDB_PKG_ID_DRIVER_CTRL package");
270 handler_.addPackage(0.0, 0, RDB_PKG_ID_START_OF_FRAME);
271 RDB_OBJECT_STATE_t* objState =
reinterpret_cast<RDB_OBJECT_STATE_t*
>(
272 handler_.addPackage(0.0, 0, RDB_PKG_ID_OBJECT_STATE, 1,
274 if (objState ==
nullptr) {
275 vtd_logger()->error(
"TaskControl: cannot add RDB_OBJECT_STATE package");
278 objState->base.id = os.
base_id;
282 std::strcpy(objState->base.name, os.
base_name.c_str());
287 handler_.addPackage(0.0, 0, RDB_PKG_ID_END_OF_FRAME);
294 RDB_TRIGGER_t* trigger =
295 reinterpret_cast<RDB_TRIGGER_t*
>(handler_.addPackage(0.0, 0, RDB_PKG_ID_TRIGGER));
296 if (trigger ==
nullptr) {
297 vtd_logger()->error(
"TaskControl: cannot add RDB_PKG_ID_DRIVER_CTRL package");
301 vtd_logger()->trace(
"TaskControl: setting trigger={} ns", delta_t.count());
302 trigger->deltaT = std::chrono::duration_cast<std::chrono::duration<float>>(delta_t).count();
303 trigger->frameNo = 0;
304 trigger->features = 0;
311 rdb_->send(handler_.getMsg(), handler_.getMsgTotalSize());
322 this->add_trigger(delta_t);
323 this->send_packages();
340 return driver_request_accel_.find(
id) != driver_request_accel_.end();
347 return driver_request_steering_angle_.at(
id);
354 return driver_request_steering_angle_.find(
id) != driver_request_steering_angle_.end();
357 friend void to_json(cloe::Json& j,
const TaskControl& tc) {
358 j = cloe::Json{{
"rdb_connection", tc.
rdb_}};
364 std::map<int, double> steering_wheel_speed_;
365 std::map<int, double> driver_request_accel_;
366 std::map<int, double> driver_request_steering_angle_;
void reset() override
Definition: omni_sensor_component.hpp:163
uint32_t validity_flags
Definition: task_control.hpp:68
uint32_t driver_flags
Definition: task_control.hpp:59
RDB_COORD_t ext_accel
Object acceleration and angular acceleration.
Definition: task_control.hpp:107
Definition: task_control.hpp:43
Eigen::Vector3d cog_offset
Center of geometry offset in [m].
Definition: object.hpp:75
Eigen::Isometry3d pose
Pose in [m] and [rad].
Definition: object.hpp:69
Framework::RDBHandler handler_
RDBHandler helps us conveniently construct RDB messages.
Definition: task_control.hpp:363
uint16_t base_vis_mask
Visibility mask (e.g. visible for traffic and visible for data recorder).
Definition: task_control.hpp:92
float target_acceleration
Target acceleration in [m/s^2].
Definition: task_control.hpp:48
void process(RDB_START_OF_FRAME_t *) override
Definition: omni_sensor_component.hpp:85
RDB_COORD_t base_pos
Object position and orientation.
Definition: task_control.hpp:101
Definition: task_control.hpp:81
double get_driver_request_acceleration(uint64_t id) const
Definition: task_control.hpp:334
Definition: actuator_component.hpp:35
void add_trigger(cloe::Duration delta_t)
Definition: task_control.hpp:293
Definition: omni_sensor_component.hpp:72
Definition: object.hpp:51
Definition: task_control.hpp:207
uint8_t base_type
Object type (car, truck, ...).
Definition: task_control.hpp:89
const std::map< cloe::Object::Class, uint8_t > cloe_vtd_obj_class_map
Definition: task_control.hpp:121
void send_packages()
Definition: task_control.hpp:310
void add_trigger_and_send(cloe::Duration delta_t)
Definition: task_control.hpp:321
std::string base_name
Player name.
Definition: task_control.hpp:95
std::chrono::nanoseconds Duration
Definition: duration.hpp:45
bool has_driver_request_steering_angle(uint64_t id)
Definition: task_control.hpp:353
double get_driver_request_steering_angle(uint64_t id) const
Definition: task_control.hpp:346
void reset() override
Definition: task_control.hpp:242
uint32_t player_id
VTD player ID.
Definition: task_control.hpp:45
RDB_GEOMETRY_t rdb_geometry_from_object(const cloe::Object &obj)
Definition: task_control.hpp:131
Eigen::Vector3d dimensions
Dimensions in [m].
Definition: object.hpp:72
RDB_COORD_t ext_speed
Object velocity and angular velocity.
Definition: task_control.hpp:104
std::unique_ptr< RdbTransceiver > rdb_
Definition: rdb_codec.hpp:156
void add_driver_control(const DriverControl &dc)
Definition: task_control.hpp:252
uint8_t base_category
Object category (player, sensor, ...).
Definition: task_control.hpp:86
float target_steering
Target steering angle in [rad].
Definition: task_control.hpp:51
double get_steering_wheel_speed(uint64_t id) const
Definition: task_control.hpp:329
uint32_t base_id
Object id.
Definition: task_control.hpp:83
RDB_GEOMETRY_t base_geo
Object dimension and offset to cog.
Definition: task_control.hpp:98
bool has_driver_request_acceleration(uint64_t id)
Definition: task_control.hpp:339