26 static const std::array<std::string, 5>
MOTOR_NAMES = {
"motor0",
"motor1",
"motor2",
"motor3",
"ICE"};
37 if (uavDynamicsSim_ ==
nullptr) {
45 motorsForcesPub[1] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Fmotor1", 1);
46 motorsForcesPub[2] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Fmotor2", 1);
47 motorsForcesPub[3] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Fmotor3", 1);
48 motorsForcesPub[4] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Fmotor4", 1);
58 motorsMomentsPub[1] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Mmotor1", 1);
59 motorsMomentsPub[2] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Mmotor2", 1);
60 motorsMomentsPub[3] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Mmotor3", 1);
61 motorsMomentsPub[4] =
node.
advertise<visualization_msgs::Marker>(
"/uav/Mmotor4", 1);
71 const Eigen::Vector3d MOMENT_COLOR(0.5, 0.5, 0.0);
72 const Eigen::Vector3d MOTORS_FORCES_COLOR(0.0, 0.5, 0.5);
73 const Eigen::Vector3d SPEED_COLOR(0.7, 0.5, 1.3);
74 const Eigen::Vector3d LIFT_FORCE(0.8, 0.2, 0.3);
75 const Eigen::Vector3d DRAG_FORCE(0.2, 0.8, 0.3);
76 const Eigen::Vector3d SIDE_FORCE(0.2, 0.3, 0.8);
84 for(
size_t motorIdx = 0; motorIdx < 5; motorIdx++){
101 for(
size_t motorIdx = 0; motorIdx < 5; motorIdx++){
118 const Eigen::Vector3d& rgbColor,
142 geometry_msgs::Point startPoint;
148 geometry_msgs::Point endPoint;
159 geometry_msgs::TransformStamped transform;
165 Eigen::Vector3d enuPosition;
166 Eigen::Quaterniond fluAttitude;
171 enuPosition = position;
172 fluAttitude = attitude;
175 transform.transform.translation.x = enuPosition[0];
176 transform.transform.translation.y = enuPosition[1];
177 transform.transform.translation.z = enuPosition[2];
178 transform.transform.rotation.x = fluAttitude.x();
179 transform.transform.rotation.y = fluAttitude.y();
180 transform.transform.rotation.z = fluAttitude.z();
181 transform.transform.rotation.w = fluAttitude.w();
185 transform.transform.rotation.x = 0;
186 transform.transform.rotation.y = 0;
187 transform.transform.rotation.z = 0;
188 transform.transform.rotation.w = 1;
Vtol dynamics simulator class.
std::array< ros::Publisher, 5 > motorsForcesPub
static const std::array< std::string, 5 > MOTOR_NAMES
static const char GLOBAL_FRAME_ID[]
Eigen::Vector3d nedToEnu(Eigen::Vector3d ned)
static const char UAV_FRAME_ID[]
Eigen::Vector3d frdToFlu(Eigen::Vector3d frd)
ros::Publisher drugForcePub
visualization_msgs::Marker arrowMarkers
ros::Publisher velocityPub
Eigen::Quaterniond frdNedTofluEnu(const Eigen::Quaterniond &q_frd_to_ned)
static const constexpr uint8_t PX4_NED_FRD
void publish(uint8_t dynamicsNotation)
void publish(const boost::shared_ptr< M > &message) const
ros::Publisher totalMomentPub
static const constexpr uint8_t ROS_ENU_FLU
ros::Publisher sideForcePub
visualization_msgs::Marker & makeArrow(const Eigen::Vector3d &vector3D, const Eigen::Vector3d &rgbColor, const char *frameId)
ros::Publisher aeroForcePub
ros::Publisher aoaMomentPub
RvizVisualizator(ros::NodeHandle &nh)
tf2_ros::TransformBroadcaster tfPub
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
ros::Publisher controlSurfacesMomentPub
ros::Publisher totalForcePub
static const char UAV_FIXED_FRAME_ID[]
ros::Publisher liftForcePub
std::array< ros::Publisher, 5 > motorsMomentsPub
void publishTf(uint8_t dynamicsNotation)
Perform TF transform between GLOBAL_FRAME -> UAV_FRAME in ROS (enu/flu) format.
int8_t init(const std::shared_ptr< UavDynamicsSimBase > &uavDynamicsSim_)
std::shared_ptr< UavDynamicsSimBase > uavDynamicsSim
ros::Publisher aeroMomentPub