8 pub_mag = node.
advertise<sensor_msgs::MagneticField>(
"imu/mag", pub_queue_size);
10 pub_rpy = node.
advertise<geometry_msgs::Vector3Stamped>(
"imu/rpy", pub_queue_size);
16 node.
getParam(
"get_imu", input_command.get_imu);
17 node.
getParam(
"get_quaternion", input_command.get_quaternion);
18 node.
getParam(
"get_angular_velocity", input_command.get_angular_velocity);
19 node.
getParam(
"get_acceleration", input_command.get_acceleration);
20 node.
getParam(
"get_mag", input_command.get_mag);
21 node.
getParam(
"get_rpy", input_command.get_rpy);
27 if (frequency <= MuseV2_HW::MAX_STREAM_FREQUENCY)
37 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_IMU)) != msg->transmission.data.end()) {
39 if (!received_command.get_imu) {
40 received_command.get_imu =
true;
44 Imu imu = muse_v2->
serial->getIMU(msg->frequency);
50 imu_msg.orientation.w = imu.quaternion.w;
51 imu_msg.orientation.x = imu.quaternion.x;
52 imu_msg.orientation.y = imu.quaternion.y;
53 imu_msg.orientation.z = imu.quaternion.z;
56 imu_msg.angular_velocity.x = imu.gyroscope.x;
57 imu_msg.angular_velocity.y = imu.gyroscope.y;
58 imu_msg.angular_velocity.z = imu.gyroscope.z;
61 imu_msg.linear_acceleration.x = imu.linear_acceleration.x;
62 imu_msg.linear_acceleration.y = imu.linear_acceleration.y;
63 imu_msg.linear_acceleration.z = imu.linear_acceleration.z;
65 pub_imu.publish(imu_msg);
68 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_QUATERNION)) != msg->transmission.data.end()) {
69 if (!received_command.get_quaternion) {
70 received_command.get_quaternion =
true;
71 ROS_INFO(
"Start Quaternion transmission.");
74 Quaternion quaternion = muse_v2->
serial->getQuaternion(msg->frequency);
80 quaternion_msg.quaternion.w = quaternion.w;
81 quaternion_msg.quaternion.x = quaternion.x;
82 quaternion_msg.quaternion.y = quaternion.y;
83 quaternion_msg.quaternion.z = quaternion.z;
85 pub_quaternion.publish(quaternion_msg);
89 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_ANGULAR_VELOCITY)) != msg->transmission.data.end()) {
90 if (!received_command.get_angular_velocity) {
91 received_command.get_angular_velocity =
true;
92 ROS_INFO(
"Start Angular Velocity transmission.");
95 AngularVelocity angular_velocity = muse_v2->
serial->getAngularVelocity(msg->frequency);
101 angular_velocity_msg.vector.x = angular_velocity.x;
102 angular_velocity_msg.vector.y = angular_velocity.y;
103 angular_velocity_msg.vector.z = angular_velocity.z;
105 pub_angular_velocity.publish(angular_velocity_msg);
108 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_ACCELERATION)) != msg->transmission.data.end()) {
109 if (!received_command.get_acceleration) {
110 received_command.get_acceleration =
true;
111 ROS_INFO(
"Start Acceleration transmission.");
114 Acceleration acceleration = muse_v2->
serial->getAcceleration(msg->frequency);
120 acceleration_msg.vector.x = acceleration.x;
121 acceleration_msg.vector.y = acceleration.y;
122 acceleration_msg.vector.z = acceleration.z;
124 pub_acceleration.publish(acceleration_msg);
127 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_MAG)) != msg->transmission.data.end()) {
128 if (!received_command.get_mag) {
129 received_command.get_mag =
true;
130 ROS_INFO(
"Start Mag transmission.");
133 MagneticField mag = muse_v2->
serial->getMag(msg->frequency);
139 mag_msg.magnetic_field.x = mag.x;
140 mag_msg.magnetic_field.y = mag.y;
141 mag_msg.magnetic_field.z = mag.z;
143 pub_mag.publish(mag_msg);
147 if (!msg->transmission.data.empty() && std::find(msg->transmission.data.begin(), msg->transmission.data.end(),
static_cast<int>(CommandType::GET_RPY)) != msg->transmission.data.end()) {
148 if (!received_command.get_rpy) {
149 received_command.get_rpy =
true;
150 ROS_INFO(
"Start RPY transmission.");
153 EulerAngles rpy = muse_v2->
serial->getRPY(msg->frequency);
159 rpy_msg.vector.x = rpy.roll;
160 rpy_msg.vector.y = rpy.pitch;
161 rpy_msg.vector.z = rpy.yaw;
163 pub_rpy.publish(rpy_msg);