rt_usb_9axisimu_driver.cpp
Go to the documentation of this file.
1 /*
2  * rt_usb_9axisimu_driver.cpp
3  *
4  * License: BSD-3-Clause
5  *
6  * Copyright (c) 2015-2020 RT Corporation <support@rt-net.jp>
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  * 3. Neither the name of RT Corporation nor the names of its
18  * contributors may be used to endorse or promote products derived from
19  * this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #include <string>
35 #include <vector>
36 
37 #include "ros/ros.h"
38 #include "sensor_msgs/Imu.h"
39 #include "sensor_msgs/MagneticField.h"
40 #include "std_msgs/Float64.h"
42 
43 
44 // Method to combine two separate one-byte data into one two-byte data
45 int16_t RtUsb9axisimuRosDriver::combineByteData(unsigned char data_h, unsigned char data_l)
46 {
47  int16_t short_data = 0;
48 
49  short_data = data_h;
50  short_data = short_data << 8;
51  short_data |= data_l;
52 
53  return short_data;
54 }
55 
56 // Method to extract binary sensor data from communication buffer
59 {
61 
62  imu_rawdata.firmware_ver = imu_data_buf[consts.IMU_BIN_FIRMWARE];
63  imu_rawdata.timestamp = imu_data_buf[consts.IMU_BIN_TIMESTAMP];
64  imu_rawdata.temperature = combineByteData(imu_data_buf[consts.IMU_BIN_TEMP_H], imu_data_buf[consts.IMU_BIN_TEMP_L]);
65  imu_rawdata.ax = combineByteData(imu_data_buf[consts.IMU_BIN_ACC_X_H], imu_data_buf[consts.IMU_BIN_ACC_X_L]);
66  imu_rawdata.ay = combineByteData(imu_data_buf[consts.IMU_BIN_ACC_Y_H], imu_data_buf[consts.IMU_BIN_ACC_Y_L]);
67  imu_rawdata.az = combineByteData(imu_data_buf[consts.IMU_BIN_ACC_Z_H], imu_data_buf[consts.IMU_BIN_ACC_Z_L]);
68  imu_rawdata.gx = combineByteData(imu_data_buf[consts.IMU_BIN_GYRO_X_H], imu_data_buf[consts.IMU_BIN_GYRO_X_L]);
69  imu_rawdata.gy = combineByteData(imu_data_buf[consts.IMU_BIN_GYRO_Y_H], imu_data_buf[consts.IMU_BIN_GYRO_Y_L]);
70  imu_rawdata.gz = combineByteData(imu_data_buf[consts.IMU_BIN_GYRO_Z_H], imu_data_buf[consts.IMU_BIN_GYRO_Z_L]);
71  imu_rawdata.mx = combineByteData(imu_data_buf[consts.IMU_BIN_MAG_X_H], imu_data_buf[consts.IMU_BIN_MAG_X_L]);
72  imu_rawdata.my = combineByteData(imu_data_buf[consts.IMU_BIN_MAG_Y_H], imu_data_buf[consts.IMU_BIN_MAG_Y_L]);
73  imu_rawdata.mz = combineByteData(imu_data_buf[consts.IMU_BIN_MAG_Z_H], imu_data_buf[consts.IMU_BIN_MAG_Z_L]);
74 
75  return imu_rawdata;
76 }
77 
78 bool RtUsb9axisimuRosDriver::isBinarySensorData(unsigned char* imu_data_buf)
79 {
80  if (imu_data_buf[consts.IMU_BIN_HEADER_R] == 'R' && imu_data_buf[consts.IMU_BIN_HEADER_T] == 'T')
81  {
82  return true;
83  }
84  return false;
85 }
86 
88 {
89  unsigned char imu_data_buf[256];
91 
93  int data_size_of_buf = readFromDevice(imu_data_buf, consts.IMU_BIN_DATA_SIZE);
94 
95  if (data_size_of_buf < consts.IMU_BIN_DATA_SIZE)
96  {
97  if (data_size_of_buf <= 0)
98  {
99  return false; // Raise communication error
100  }
101  return false;
102  }
103 
104  if (isBinarySensorData(imu_data_buf) == false)
105  {
106  return false;
107  }
108 
109  imu_rawdata = extractBinarySensorData(imu_data_buf); // Extract sensor data
110 
111  sensor_data_.setImuRawData(imu_rawdata); // Update raw data
112  sensor_data_.convertRawDataUnit(); // Convert raw data to physical quantity
114 
115  return true;
116 }
117 
118 bool RtUsb9axisimuRosDriver::isValidAsciiSensorData(std::vector<std::string> str_vector)
119 {
120  for (int i = 1; i < consts.IMU_ASCII_DATA_SIZE; i++)
121  {
122  if (strspn(str_vector[i].c_str(), "-.0123456789") != str_vector[i].size())
123  {
124  return false;
125  }
126  }
127  return true;
128 }
129 
131 {
132  static std::vector<std::string> imu_data_vector_buf;
133 
134  unsigned char imu_data_buf[256];
136  std::string imu_data_oneline_buf;
137 
138  has_refreshed_imu_data_ = false;
139  imu_data_oneline_buf.clear();
140 
141  int data_size_of_buf = readFromDevice(imu_data_buf, sizeof(imu_data_buf));
142 
143  if (data_size_of_buf <= 0)
144  {
145  return false; // Raise communication error
146  }
147 
148  for (int char_count = 0; char_count < data_size_of_buf; char_count++)
149  {
150  if (imu_data_buf[char_count] == ',' || imu_data_buf[char_count] == '\n')
151  {
152  imu_data_vector_buf.push_back(imu_data_oneline_buf);
153  imu_data_oneline_buf.clear();
154  }
155  else
156  {
157  imu_data_oneline_buf += imu_data_buf[char_count];
158  }
159 
160  if (imu_data_buf[char_count] == '\n' && imu_data_vector_buf.size() == consts.IMU_ASCII_DATA_SIZE &&
161  imu_data_vector_buf[0].find(".") == std::string::npos && isValidAsciiSensorData(imu_data_vector_buf))
162  {
163  imu_data.gx = std::stof(imu_data_vector_buf[consts.IMU_ASCII_GYRO_X]);
164  imu_data.gy = std::stof(imu_data_vector_buf[consts.IMU_ASCII_GYRO_Y]);
165  imu_data.gz = std::stof(imu_data_vector_buf[consts.IMU_ASCII_GYRO_Z]);
166  imu_data.ax = std::stof(imu_data_vector_buf[consts.IMU_ASCII_ACC_X]);
167  imu_data.ay = std::stof(imu_data_vector_buf[consts.IMU_ASCII_ACC_Y]);
168  imu_data.az = std::stof(imu_data_vector_buf[consts.IMU_ASCII_ACC_Z]);
169  imu_data.mx = std::stof(imu_data_vector_buf[consts.IMU_ASCII_MAG_X]);
170  imu_data.my = std::stof(imu_data_vector_buf[consts.IMU_ASCII_MAG_Y]);
171  imu_data.mz = std::stof(imu_data_vector_buf[consts.IMU_ASCII_MAG_Z]);
172  imu_data.temperature = std::stof(imu_data_vector_buf[consts.IMU_ASCII_TEMP]);
173 
174  imu_data_vector_buf.clear();
175  sensor_data_.setImuData(imu_data);
177  }
178  else if (imu_data_vector_buf.size() > consts.IMU_ASCII_DATA_SIZE)
179  {
180  imu_data_vector_buf.clear();
181  ROS_WARN("ASCII data size is incorrect.");
182  }
183  }
184 
185  return true;
186 }
187 
189  : rt_usb_9axisimu::SerialPort(port.c_str())
190 {
191  // publisher for streaming
192  imu_data_raw_pub_ = nh_.advertise<sensor_msgs::Imu>("imu/data_raw", 1);
193  imu_mag_pub_ = nh_.advertise<sensor_msgs::MagneticField>("imu/mag", 1);
194  imu_temperature_pub_ = nh_.advertise<std_msgs::Float64>("imu/temperature", 1);
195 
197  data_format_ = DataFormat::NONE;
198  has_refreshed_imu_data_ = false;
199 }
200 
202 {
203 }
204 
206 {
207  frame_id_ = frame_id;
208 }
209 
210 void RtUsb9axisimuRosDriver::setImuPortName(std::string serialport)
211 {
212  rt_usb_9axisimu::SerialPort(serialport.c_str());
213 }
214 
215 void RtUsb9axisimuRosDriver::setImuStdDev(double linear_acceleration, double angular_velocity,
216  double magnetic_field)
217 {
218  linear_acceleration_stddev_ = linear_acceleration;
219  angular_velocity_stddev_ = angular_velocity;
220  magnetic_field_stddev_ = magnetic_field;
221 }
222 
224 {
225  // returns serial port open status
226  return openSerialPort();
227 }
228 
230 {
231  closeSerialPort();
232 }
233 
235 {
236  if (data_format_ == DataFormat::NONE)
237  {
238  unsigned char data_buf[256];
239  int data_size_of_buf = readFromDevice(data_buf, consts.IMU_BIN_DATA_SIZE);
240  if (data_size_of_buf == consts.IMU_BIN_DATA_SIZE)
241  {
242  if (isBinarySensorData(data_buf))
243  {
244  data_format_ = DataFormat::BINARY;
246  }
247  else
248  {
249  data_format_ = DataFormat::NOT_BINARY;
250  }
251  }
252  }
253  else if (data_format_ == DataFormat::NOT_BINARY)
254  {
255  data_format_ = DataFormat::ASCII;
257  }
258 }
259 
261 {
263 }
264 
266 {
267  return data_format_ == DataFormat::ASCII;
268 }
269 
271 {
272  return data_format_ == DataFormat::BINARY;
273 }
274 
276 {
278 }
279 
281 {
283  sensor_msgs::Imu imu_data_raw_msg;
284  sensor_msgs::MagneticField imu_magnetic_msg;
285  std_msgs::Float64 imu_temperature_msg;
286 
287  imu = sensor_data_.getImuData(); // Get physical quantity
288 
289  // Calculate linear_acceleration_covariance diagonal elements
290  double linear_acceleration_cov = linear_acceleration_stddev_ * linear_acceleration_stddev_;
291  // Calculate angular_velocity_covariance diagonal elements
292  double angular_velocity_cov = angular_velocity_stddev_ * angular_velocity_stddev_;
293  // Calculate magnetic_field_covariance diagonal elements
294  double magnetic_field_cov = magnetic_field_stddev_ * magnetic_field_stddev_;
295 
296  // imu_data_raw_msg has no orientation values
297  imu_data_raw_msg.orientation_covariance[0] = -1;
298 
299  imu_data_raw_msg.linear_acceleration_covariance[0] = imu_data_raw_msg.linear_acceleration_covariance[4] =
300  imu_data_raw_msg.linear_acceleration_covariance[8] = linear_acceleration_cov;
301 
302  imu_data_raw_msg.angular_velocity_covariance[0] = imu_data_raw_msg.angular_velocity_covariance[4] =
303  imu_data_raw_msg.angular_velocity_covariance[8] = angular_velocity_cov;
304 
305  imu_magnetic_msg.magnetic_field_covariance[0] = imu_magnetic_msg.magnetic_field_covariance[4] =
306  imu_magnetic_msg.magnetic_field_covariance[8] = magnetic_field_cov;
307 
308  ros::Time now = ros::Time::now();
309 
310  imu_data_raw_msg.header.stamp = imu_magnetic_msg.header.stamp = now;
311 
312  imu_data_raw_msg.header.frame_id = imu_magnetic_msg.header.frame_id = frame_id_;
313 
314  // original data used the g unit, convert to m/s^2
315  imu_data_raw_msg.linear_acceleration.x = imu.ax * consts.CONVERTOR_G2A;
316  imu_data_raw_msg.linear_acceleration.y = imu.ay * consts.CONVERTOR_G2A;
317  imu_data_raw_msg.linear_acceleration.z = imu.az * consts.CONVERTOR_G2A;
318 
319  if (data_format_ == DataFormat::BINARY)
320  {
321  // original binary data used the degree/s unit, convert to radian/s
322  imu_data_raw_msg.angular_velocity.x = imu.gx * consts.CONVERTOR_D2R;
323  imu_data_raw_msg.angular_velocity.y = imu.gy * consts.CONVERTOR_D2R;
324  imu_data_raw_msg.angular_velocity.z = imu.gz * consts.CONVERTOR_D2R;
325  }
326  else if (data_format_ == DataFormat::ASCII)
327  {
328  // original ascii data used the radian/s
329  imu_data_raw_msg.angular_velocity.x = imu.gx;
330  imu_data_raw_msg.angular_velocity.y = imu.gy;
331  imu_data_raw_msg.angular_velocity.z = imu.gz;
332  }
333 
334  // original data used the uTesla unit, convert to Tesla
335  imu_magnetic_msg.magnetic_field.x = imu.mx / consts.CONVERTOR_UT2T;
336  imu_magnetic_msg.magnetic_field.y = imu.my / consts.CONVERTOR_UT2T;
337  imu_magnetic_msg.magnetic_field.z = imu.mz / consts.CONVERTOR_UT2T;
338 
339  // original data used the celsius unit
340  imu_temperature_msg.data = imu.temperature;
341 
342  // publish the IMU data
343  imu_data_raw_pub_.publish(imu_data_raw_msg);
344  imu_mag_pub_.publish(imu_magnetic_msg);
345  imu_temperature_pub_.publish(imu_temperature_msg);
346 
347  return true;
348 }
349 
350 // Method to receive IMU data, convert those units to SI, and publish to ROS
351 // topic
353 {
354  if (data_format_ == DataFormat::BINARY)
355  {
356  return readBinaryData();
357  }
358  else if (data_format_ == DataFormat::ASCII)
359  {
360  return readAsciiData();
361  }
362 
363  return false;
364 }
rt_usb_9axisimu::ImuData< int16_t >
rt_usb_9axisimu::ImuData::my
Type my
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::Consts::IMU_BIN_ACC_X_H
@ IMU_BIN_ACC_X_H
Definition: rt_usb_9axisimu.hpp:82
rt_usb_9axisimu::Consts::IMU_BIN_TEMP_H
@ IMU_BIN_TEMP_H
Definition: rt_usb_9axisimu.hpp:88
RtUsb9axisimuRosDriver::linear_acceleration_stddev_
double linear_acceleration_stddev_
Definition: rt_usb_9axisimu_driver.hpp:52
RtUsb9axisimuRosDriver::has_completed_format_check_
bool has_completed_format_check_
Definition: rt_usb_9axisimu_driver.hpp:66
rt_usb_9axisimu::Consts::CONVERTOR_D2R
const double CONVERTOR_D2R
Definition: rt_usb_9axisimu.hpp:123
RtUsb9axisimuRosDriver::isValidAsciiSensorData
bool isValidAsciiSensorData(std::vector< std::string > imu_data_vector_buf)
Definition: rt_usb_9axisimu_driver.cpp:118
RtUsb9axisimuRosDriver::nh_
ros::NodeHandle nh_
Definition: rt_usb_9axisimu_driver.hpp:43
rt_usb_9axisimu::SensorData::setImuRawData
void setImuRawData(ImuData< int16_t > &i)
Definition: rt_usb_9axisimu.hpp:312
rt_usb_9axisimu::Consts::IMU_BIN_ACC_X_L
@ IMU_BIN_ACC_X_L
Definition: rt_usb_9axisimu.hpp:81
rt_usb_9axisimu::Consts::IMU_BIN_MAG_X_H
@ IMU_BIN_MAG_X_H
Definition: rt_usb_9axisimu.hpp:96
rt_usb_9axisimu::Consts::IMU_BIN_MAG_Z_L
@ IMU_BIN_MAG_Z_L
Definition: rt_usb_9axisimu.hpp:99
RtUsb9axisimuRosDriver::readSensorData
bool readSensorData()
Definition: rt_usb_9axisimu_driver.cpp:352
rt_usb_9axisimu::Consts::IMU_ASCII_ACC_Y
@ IMU_ASCII_ACC_Y
Definition: rt_usb_9axisimu.hpp:107
ros.h
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_Y_L
@ IMU_BIN_GYRO_Y_L
Definition: rt_usb_9axisimu.hpp:91
rt_usb_9axisimu::Consts::IMU_ASCII_GYRO_Z
@ IMU_ASCII_GYRO_Z
Definition: rt_usb_9axisimu.hpp:105
RtUsb9axisimuRosDriver::hasBinaryDataFormat
bool hasBinaryDataFormat(void)
Definition: rt_usb_9axisimu_driver.cpp:270
rt_usb_9axisimu::Consts::IMU_ASCII_MAG_Y
@ IMU_ASCII_MAG_Y
Definition: rt_usb_9axisimu.hpp:110
rt_usb_9axisimu::Consts::IMU_ASCII_MAG_Z
@ IMU_ASCII_MAG_Z
Definition: rt_usb_9axisimu.hpp:111
rt_usb_9axisimu::Consts::IMU_BIN_ACC_Z_L
@ IMU_BIN_ACC_Z_L
Definition: rt_usb_9axisimu.hpp:85
RtUsb9axisimuRosDriver::magnetic_field_stddev_
double magnetic_field_stddev_
Definition: rt_usb_9axisimu_driver.hpp:54
rt_usb_9axisimu::SensorData::setImuData
void setImuData(ImuData< double > &i)
Definition: rt_usb_9axisimu.hpp:317
rt_usb_9axisimu::Consts::CONVERTOR_G2A
const double CONVERTOR_G2A
Definition: rt_usb_9axisimu.hpp:122
RtUsb9axisimuRosDriver::hasRefreshedImuData
bool hasRefreshedImuData(void)
Definition: rt_usb_9axisimu_driver.cpp:275
rt_usb_9axisimu::ImuData::gy
Type gy
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::ImuData::temperature
Type temperature
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_Y_H
@ IMU_BIN_GYRO_Y_H
Definition: rt_usb_9axisimu.hpp:92
RtUsb9axisimuRosDriver::extractBinarySensorData
rt_usb_9axisimu::ImuData< int16_t > extractBinarySensorData(unsigned char *imu_data_buf)
Definition: rt_usb_9axisimu_driver.cpp:58
rt_usb_9axisimu::Consts::IMU_BIN_DATA_SIZE
@ IMU_BIN_DATA_SIZE
Definition: rt_usb_9axisimu.hpp:101
RtUsb9axisimuRosDriver::publishImuData
bool publishImuData()
Definition: rt_usb_9axisimu_driver.cpp:280
rt_usb_9axisimu::Consts::IMU_BIN_ACC_Z_H
@ IMU_BIN_ACC_Z_H
Definition: rt_usb_9axisimu.hpp:86
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
ros::NodeHandle::advertise
Publisher advertise(AdvertiseOptions &ops)
RtUsb9axisimuRosDriver::consts
rt_usb_9axisimu::Consts consts
Definition: rt_usb_9axisimu_driver.hpp:55
RtUsb9axisimuRosDriver::readBinaryData
bool readBinaryData(void)
Definition: rt_usb_9axisimu_driver.cpp:87
rt_usb_9axisimu::ImuData::ax
Type ax
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_X_H
@ IMU_BIN_GYRO_X_H
Definition: rt_usb_9axisimu.hpp:90
RtUsb9axisimuRosDriver::startCommunication
bool startCommunication()
Definition: rt_usb_9axisimu_driver.cpp:223
RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver
RtUsb9axisimuRosDriver(std::string serialport)
Definition: rt_usb_9axisimu_driver.cpp:188
rt_usb_9axisimu::Consts::IMU_ASCII_GYRO_Y
@ IMU_ASCII_GYRO_Y
Definition: rt_usb_9axisimu.hpp:104
RtUsb9axisimuRosDriver::angular_velocity_stddev_
double angular_velocity_stddev_
Definition: rt_usb_9axisimu_driver.hpp:53
rt_usb_9axisimu::SerialPort::readFromDevice
int readFromDevice(unsigned char *buf, unsigned int buf_len)
Definition: rt_usb_9axisimu.hpp:240
rt_usb_9axisimu::ImuData::gz
Type gz
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::ImuData::ay
Type ay
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::Consts::IMU_ASCII_GYRO_X
@ IMU_ASCII_GYRO_X
Definition: rt_usb_9axisimu.hpp:103
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_Z_L
@ IMU_BIN_GYRO_Z_L
Definition: rt_usb_9axisimu.hpp:93
RtUsb9axisimuRosDriver::imu_temperature_pub_
ros::Publisher imu_temperature_pub_
Definition: rt_usb_9axisimu_driver.hpp:47
rt_usb_9axisimu::SerialPort::openSerialPort
bool openSerialPort()
Definition: rt_usb_9axisimu.hpp:201
RtUsb9axisimuRosDriver::stopCommunication
void stopCommunication(void)
Definition: rt_usb_9axisimu_driver.cpp:229
RtUsb9axisimuRosDriver::readAsciiData
bool readAsciiData(void)
Definition: rt_usb_9axisimu_driver.cpp:130
rt_usb_9axisimu::ImuData::mx
Type mx
Definition: rt_usb_9axisimu.hpp:274
RtUsb9axisimuRosDriver::has_refreshed_imu_data_
bool has_refreshed_imu_data_
Definition: rt_usb_9axisimu_driver.hpp:68
rt_usb_9axisimu::Consts::IMU_ASCII_ACC_X
@ IMU_ASCII_ACC_X
Definition: rt_usb_9axisimu.hpp:106
ROS_WARN
#define ROS_WARN(...)
rt_usb_9axisimu::ImuData::firmware_ver
int firmware_ver
Definition: rt_usb_9axisimu.hpp:272
rt_usb_9axisimu::Consts::IMU_ASCII_TEMP
@ IMU_ASCII_TEMP
Definition: rt_usb_9axisimu.hpp:112
RtUsb9axisimuRosDriver::setImuFrameIdName
void setImuFrameIdName(std::string frame_id)
Definition: rt_usb_9axisimu_driver.cpp:205
rt_usb_9axisimu::SerialPort::closeSerialPort
void closeSerialPort()
Definition: rt_usb_9axisimu.hpp:230
RtUsb9axisimuRosDriver::checkDataFormat
void checkDataFormat(void)
Definition: rt_usb_9axisimu_driver.cpp:234
RtUsb9axisimuRosDriver::isBinarySensorData
bool isBinarySensorData(unsigned char *imu_data_buf)
Definition: rt_usb_9axisimu_driver.cpp:78
rt_usb_9axisimu::Consts::IMU_BIN_MAG_Y_H
@ IMU_BIN_MAG_Y_H
Definition: rt_usb_9axisimu.hpp:98
rt_usb_9axisimu::SensorData::getImuData
ImuData< double > getImuData()
Definition: rt_usb_9axisimu.hpp:350
RtUsb9axisimuRosDriver::setImuStdDev
void setImuStdDev(double linear_acceleration, double angular_velocity, double magnetic_field)
Definition: rt_usb_9axisimu_driver.cpp:215
rt_usb_9axisimu::Consts::IMU_BIN_HEADER_R
@ IMU_BIN_HEADER_R
Definition: rt_usb_9axisimu.hpp:75
rt_usb_9axisimu::Consts::IMU_ASCII_MAG_X
@ IMU_ASCII_MAG_X
Definition: rt_usb_9axisimu.hpp:109
RtUsb9axisimuRosDriver::setImuPortName
void setImuPortName(std::string serialport)
Definition: rt_usb_9axisimu_driver.cpp:210
rt_usb_9axisimu::Consts::IMU_BIN_MAG_Y_L
@ IMU_BIN_MAG_Y_L
Definition: rt_usb_9axisimu.hpp:97
rt_usb_9axisimu::ImuData::gx
Type gx
Definition: rt_usb_9axisimu.hpp:274
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_Z_H
@ IMU_BIN_GYRO_Z_H
Definition: rt_usb_9axisimu.hpp:94
RtUsb9axisimuRosDriver::imu_data_raw_pub_
ros::Publisher imu_data_raw_pub_
Definition: rt_usb_9axisimu_driver.hpp:45
rt_usb_9axisimu::Consts::IMU_BIN_GYRO_X_L
@ IMU_BIN_GYRO_X_L
Definition: rt_usb_9axisimu.hpp:89
ros::Time
RtUsb9axisimuRosDriver::hasAsciiDataFormat
bool hasAsciiDataFormat(void)
Definition: rt_usb_9axisimu_driver.cpp:265
rt_usb_9axisimu::Consts::IMU_BIN_TIMESTAMP
@ IMU_BIN_TIMESTAMP
Definition: rt_usb_9axisimu.hpp:80
rt_usb_9axisimu
Definition: rt_usb_9axisimu.hpp:54
rt_usb_9axisimu::Consts::IMU_BIN_MAG_X_L
@ IMU_BIN_MAG_X_L
Definition: rt_usb_9axisimu.hpp:95
rt_usb_9axisimu::Consts::IMU_ASCII_ACC_Z
@ IMU_ASCII_ACC_Z
Definition: rt_usb_9axisimu.hpp:108
rt_usb_9axisimu::Consts::IMU_BIN_ACC_Y_H
@ IMU_BIN_ACC_Y_H
Definition: rt_usb_9axisimu.hpp:84
RtUsb9axisimuRosDriver::~RtUsb9axisimuRosDriver
~RtUsb9axisimuRosDriver()
Definition: rt_usb_9axisimu_driver.cpp:201
rt_usb_9axisimu::Consts::IMU_BIN_TEMP_L
@ IMU_BIN_TEMP_L
Definition: rt_usb_9axisimu.hpp:87
rt_usb_9axisimu::SensorData::convertRawDataUnit
void convertRawDataUnit()
Definition: rt_usb_9axisimu.hpp:323
rt_usb_9axisimu::Consts::IMU_BIN_HEADER_T
@ IMU_BIN_HEADER_T
Definition: rt_usb_9axisimu.hpp:76
rt_usb_9axisimu::Consts::CONVERTOR_UT2T
const double CONVERTOR_UT2T
Definition: rt_usb_9axisimu.hpp:124
RtUsb9axisimuRosDriver::sensor_data_
rt_usb_9axisimu::SensorData sensor_data_
Definition: rt_usb_9axisimu_driver.hpp:49
rt_usb_9axisimu::ImuData::az
Type az
Definition: rt_usb_9axisimu.hpp:274
RtUsb9axisimuRosDriver::imu_mag_pub_
ros::Publisher imu_mag_pub_
Definition: rt_usb_9axisimu_driver.hpp:46
rt_usb_9axisimu::Consts::IMU_ASCII_DATA_SIZE
@ IMU_ASCII_DATA_SIZE
Definition: rt_usb_9axisimu.hpp:113
rt_usb_9axisimu::ImuData::timestamp
int timestamp
Definition: rt_usb_9axisimu.hpp:273
rt_usb_9axisimu::ImuData::mz
Type mz
Definition: rt_usb_9axisimu.hpp:274
RtUsb9axisimuRosDriver::hasCompletedFormatCheck
bool hasCompletedFormatCheck(void)
Definition: rt_usb_9axisimu_driver.cpp:260
rt_usb_9axisimu_driver.hpp
RtUsb9axisimuRosDriver::data_format_
DataFormat data_format_
Definition: rt_usb_9axisimu_driver.hpp:67
rt_usb_9axisimu::SerialPort
Definition: rt_usb_9axisimu.hpp:174
rt_usb_9axisimu::Consts::IMU_BIN_ACC_Y_L
@ IMU_BIN_ACC_Y_L
Definition: rt_usb_9axisimu.hpp:83
RtUsb9axisimuRosDriver::combineByteData
int16_t combineByteData(unsigned char data_h, unsigned char data_l)
Definition: rt_usb_9axisimu_driver.cpp:45
ros::Time::now
static Time now()
rt_usb_9axisimu::Consts::IMU_BIN_FIRMWARE
@ IMU_BIN_FIRMWARE
Definition: rt_usb_9axisimu.hpp:79
RtUsb9axisimuRosDriver::frame_id_
std::string frame_id_
Definition: rt_usb_9axisimu_driver.hpp:51
rt_usb_9axisimu::Consts::IMU_BIN_MAG_Z_H
@ IMU_BIN_MAG_Z_H
Definition: rt_usb_9axisimu.hpp:100


rt_usb_9axisimu_driver
Author(s): RT Corporation
autogenerated on Wed Mar 2 2022 00:59:46