14 Node(
"SimulationAdapter") {
16 log(
"SimulationAdapterNode initializing:");
34 rclcpp::QoS qos_params = get_qos_profile(QOS_BEST_EFFORT);
35 m_simulationCarRealStatePubSPtr = this->create_publisher<gazebo_simulation::msg::SetModelPose>(
"/simulation/gazebo/model/dr_drift/set_pose", qos_params);
36 log(
"Added gazebo_simulation::msg::SetModelPose Publisher.");
40 log(
"Start simulationUpdateLoop and updatePose in second thread and detach");
51 auto time = rclcpp::Clock().now();
52 log(
"[",
static_cast<int>(time.seconds()) % 160742000000000,
"] Send random message.");
54 auto msgCarRealStateUPtr = std::make_unique<gazebo_simulation::msg::SetModelPose>();
59 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::POSITION_X);
60 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::POSITION_Y);
62 msgCarRealStateUPtr->values.push_back(
m_carPose->position[0]);
63 msgCarRealStateUPtr->values.push_back(
m_carPose->position[1]);
66 Eigen::AngleAxisf rollAngle(0, Eigen::Vector3f::UnitY());
67 Eigen::AngleAxisf yawAngle(
m_carPose->orientation, Eigen::Vector3f::UnitZ());
68 Eigen::AngleAxisf pitchAngle(0, Eigen::Vector3f::UnitX());
70 Eigen::Quaternionf quaternion = rollAngle * yawAngle * pitchAngle;
72 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::ORIENTATION_W);
73 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::ORIENTATION_X);
74 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::ORIENTATION_Y);
75 msgCarRealStateUPtr->keys.push_back(gazebo_simulation::msg::SetModelPose::ORIENTATION_Z);
77 msgCarRealStateUPtr->values.push_back(quaternion.w());
78 msgCarRealStateUPtr->values.push_back(quaternion.x());
79 msgCarRealStateUPtr->values.push_back(quaternion.y());
80 msgCarRealStateUPtr->values.push_back(quaternion.z());
93 if(msg->remote_control == 1) {
94 log(
"[REMOTECONTROL] Enabled. Only drive with remote control.");
99 else if(msg->remote_control == 0) {
110 if(msg->reset ==
true) {
126 rclcpp::Time lastUpdateTime = rclcpp::Clock().now();
131 auto currentTime = rclcpp::Clock().now();
132 float distanceTravelled =
m_speedPerSecond * (currentTime - lastUpdateTime).seconds();
133 log(
"UpdatePose - DistanceTravelled: ", distanceTravelled);
134 lastUpdateTime = currentTime;