Stream.cpp
Go to the documentation of this file.
2 
4 
5  pub_acceleration = node.advertise<geometry_msgs::Vector3Stamped>("imu/acceleration", pub_queue_size);;
6  pub_angular_velocity = node.advertise<geometry_msgs::Vector3Stamped>("imu/angular_velocity", pub_queue_size);;
7  pub_imu = node.advertise<sensor_msgs::Imu>("imu/data", pub_queue_size);
8  pub_mag = node.advertise<sensor_msgs::MagneticField>("imu/mag", pub_queue_size);
9  pub_quaternion = node.advertise<geometry_msgs::QuaternionStamped>("imu/quaternion", pub_queue_size);
10  pub_rpy = node.advertise<geometry_msgs::Vector3Stamped>("imu/rpy", pub_queue_size);
11 
12 }
13 
15 
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);
22 }
23 
25  bool result = false;
26 
27  if (frequency <= MuseV2_HW::MAX_STREAM_FREQUENCY)
28  result = true;
29  else { ROS_ERROR("Invalid frequency."); }
30 
31  return result;
32 
33 }
34 
35 void muse_v2_driver::Stream::StreamRawData(const Transmission::ConstPtr& msg, MuseV2* muse_v2) {
36 
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()) {
38 
39  if (!received_command.get_imu) {
40  received_command.get_imu = true;
41  ROS_INFO("Start Imu transmission.");
42  }
43 
44  Imu imu = muse_v2->serial->getIMU(msg->frequency);
45 
46  imu_msg.header.stamp = ros::Time::now();
47  imu_msg.header.frame_id = muse_v2->params.frame_id;
48 
49  // Quaternion
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;
54 
55  // Angular velocity
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;
59 
60  // Acceleration
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;
64 
65  pub_imu.publish(imu_msg);
66  }
67 
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.");
72  }
73 
74  Quaternion quaternion = muse_v2->serial->getQuaternion(msg->frequency);
75 
76  quaternion_msg.header.stamp = ros::Time::now();
77  quaternion_msg.header.frame_id = muse_v2->params.frame_id;
78 
79  // Quaternion
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;
84 
85  pub_quaternion.publish(quaternion_msg);
86 
87  }
88 
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.");
93  }
94 
95  AngularVelocity angular_velocity = muse_v2->serial->getAngularVelocity(msg->frequency);
96 
97  angular_velocity_msg.header.stamp = ros::Time::now();
98  angular_velocity_msg.header.frame_id = muse_v2->params.frame_id;
99 
100  // Angular velocity
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;
104 
105  pub_angular_velocity.publish(angular_velocity_msg);
106  }
107 
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.");
112  }
113 
114  Acceleration acceleration = muse_v2->serial->getAcceleration(msg->frequency);
115 
116  acceleration_msg.header.stamp = ros::Time::now();
117  acceleration_msg.header.frame_id = muse_v2->params.frame_id;
118 
119  // Acceleration
120  acceleration_msg.vector.x = acceleration.x;
121  acceleration_msg.vector.y = acceleration.y;
122  acceleration_msg.vector.z = acceleration.z;
123 
124  pub_acceleration.publish(acceleration_msg);
125  }
126 
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.");
131  }
132 
133  MagneticField mag = muse_v2->serial->getMag(msg->frequency);
134 
135  mag_msg.header.stamp = ros::Time::now();
136  mag_msg.header.frame_id = muse_v2->params.frame_id;
137 
138  // Magnetic Field
139  mag_msg.magnetic_field.x = mag.x;
140  mag_msg.magnetic_field.y = mag.y;
141  mag_msg.magnetic_field.z = mag.z;
142 
143  pub_mag.publish(mag_msg);
144 
145  }
146 
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.");
151  }
152 
153  EulerAngles rpy = muse_v2->serial->getRPY(msg->frequency);
154 
155  rpy_msg.header.stamp = ros::Time::now();
156  rpy_msg.header.frame_id = muse_v2->params.frame_id;
157 
158  // RPY
159  rpy_msg.vector.x = rpy.roll;
160  rpy_msg.vector.y = rpy.pitch;
161  rpy_msg.vector.z = rpy.yaw;
162 
163  pub_rpy.publish(rpy_msg);
164  }
165 }
muse_v2_driver::MuseV2::Params::frame_id
string frame_id
Definition: MuseV2.h:27
ros::NodeHandle::getParam
bool getParam(const std::string &key, bool &b) const
muse_v2_driver::Stream::pub_angular_velocity
ros::Publisher pub_angular_velocity
Definition: Stream.h:63
muse_v2_driver::Stream::StreamRawData
void StreamRawData(const Transmission::ConstPtr &msg, MuseV2 *muse_v2)
Definition: Stream.cpp:35
muse_v2_driver::Stream::pub_acceleration
ros::Publisher pub_acceleration
Definition: Stream.h:63
ros::NodeHandle::advertise
Publisher advertise(AdvertiseOptions &ops)
muse_v2_driver::Stream::pub_mag
ros::Publisher pub_mag
Definition: Stream.h:63
muse_v2_driver::Stream::setupInputCommands
void setupInputCommands(ros::NodeHandle &node)
Definition: Stream.cpp:14
muse_v2_driver::MuseV2::params
Params params
Definition: MuseV2.h:40
ROS_ERROR
#define ROS_ERROR(...)
muse_v2_driver::MuseV2
Definition: MuseV2.h:21
muse_v2_driver::Stream::pub_imu
ros::Publisher pub_imu
Definition: Stream.h:63
muse_v2_driver::Stream::pub_rpy
ros::Publisher pub_rpy
Definition: Stream.h:63
Stream.h
muse_v2_driver::Stream::pub_quaternion
ros::Publisher pub_quaternion
Definition: Stream.h:63
muse_v2_driver::Stream::isFrequencyAdmissible
bool isFrequencyAdmissible(int frequency)
Definition: Stream.cpp:24
ROS_INFO
#define ROS_INFO(...)
muse_v2_driver::MuseV2::serial
MuseV2_SerialConnection * serial
Definition: MuseV2.h:41
ros::NodeHandle
muse_v2_driver::Stream::Stream
Stream()=default
ros::Time::now
static Time now()


muse_v2_driver
Author(s): Elisa Tosello , Roberto Bortoletto
autogenerated on Thu Jan 20 2022 03:24:53