Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
imu
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CdF
modules
imu
Commits
0713cde6
Commit
0713cde6
authored
4 years ago
by
Paul D'Angio
Browse files
Options
Downloads
Patches
Plain Diff
updated to use new sensor_msgs_ext messages
parent
6c73d6fe
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
CMakeLists.txt
+1
-1
1 addition, 1 deletion
CMakeLists.txt
package.xml
+1
-1
1 addition, 1 deletion
package.xml
src/ros_node.cpp
+31
-39
31 additions, 39 deletions
src/ros_node.cpp
src/ros_node.h
+8
-26
8 additions, 26 deletions
src/ros_node.h
with
41 additions
and
67 deletions
CMakeLists.txt
+
1
−
1
View file @
0713cde6
...
@@ -9,7 +9,7 @@ add_compile_options(-std=c++11)
...
@@ -9,7 +9,7 @@ add_compile_options(-std=c++11)
## is used, also find other catkin packages
## is used, also find other catkin packages
find_package
(
catkin REQUIRED COMPONENTS
find_package
(
catkin REQUIRED COMPONENTS
roscpp
roscpp
sensor_msgs
sensor_msgs
_ext
)
)
## System dependencies are found with CMake's conventions
## System dependencies are found with CMake's conventions
...
...
This diff is collapsed.
Click to expand it.
package.xml
+
1
−
1
View file @
0713cde6
...
@@ -10,6 +10,6 @@
...
@@ -10,6 +10,6 @@
<buildtool_depend>
catkin
</buildtool_depend>
<buildtool_depend>
catkin
</buildtool_depend>
<depend>
roscpp
</depend>
<depend>
roscpp
</depend>
<depend>
sensor_msgs
</depend>
<depend>
sensor_msgs
_ext
</depend>
</package>
</package>
This diff is collapsed.
Click to expand it.
src/ros_node.cpp
+
31
−
39
View file @
0713cde6
#include
"ros_node.h"
#include
"ros_node.h"
#include
<sensor_msgs/Imu.h>
#include
<sensor_msgs_ext/accelerometer.h>
#include
<sensor_msgs/MagneticField.h>
#include
<sensor_msgs_ext/gyroscope.h>
#include
<sensor_msgs/Temperature.h>
#include
<sensor_msgs_ext/magnetometer.h>
#include
<sensor_msgs_ext/temperature.h>
#include
<cmath>
#include
<cmath>
...
@@ -35,9 +36,10 @@ ros_node::ros_node(driver *driver, int argc, char **argv)
...
@@ -35,9 +36,10 @@ ros_node::ros_node(driver *driver, int argc, char **argv)
private_node
.
param
<
int
>
(
"accel_fsr"
,
param_accel_fsr
,
0
);
private_node
.
param
<
int
>
(
"accel_fsr"
,
param_accel_fsr
,
0
);
// Set up publishers.
// Set up publishers.
ros_node
::
m_publisher_imu
=
ros_node
::
m_node
->
advertise
<
sensor_msgs
::
Imu
>
(
"imu/imu"
,
1
);
ros_node
::
m_publisher_accelerometer
=
ros_node
::
m_node
->
advertise
<
sensor_msgs_ext
::
accelerometer
>
(
"imu/accelerometer"
,
1
);
ros_node
::
m_publisher_mag
=
ros_node
::
m_node
->
advertise
<
sensor_msgs
::
MagneticField
>
(
"imu/magneto"
,
1
);
ros_node
::
m_publisher_gyroscope
=
ros_node
::
m_node
->
advertise
<
sensor_msgs_ext
::
gyroscope
>
(
"imu/gyroscope"
,
1
);
ros_node
::
m_publisher_temp
=
ros_node
::
m_node
->
advertise
<
sensor_msgs
::
Temperature
>
(
"imu/temperature"
,
1
);
ros_node
::
m_publisher_magnetometer
=
ros_node
::
m_node
->
advertise
<
sensor_msgs_ext
::
magnetometer
>
(
"imu/magnetometer"
,
1
);
ros_node
::
m_publisher_temperature
=
ros_node
::
m_node
->
advertise
<
sensor_msgs_ext
::
temperature
>
(
"imu/temperature"
,
1
);
// Initialize the driver and set parameters.
// Initialize the driver and set parameters.
try
try
...
@@ -93,50 +95,40 @@ void ros_node::deinitialize_driver()
...
@@ -93,50 +95,40 @@ void ros_node::deinitialize_driver()
void
ros_node
::
data_callback
(
driver
::
data
data
)
void
ros_node
::
data_callback
(
driver
::
data
data
)
{
{
// Create IMU message.
// Create accelerometer message.
sensor_msgs
::
Imu
message_imu
;
sensor_msgs_ext
::
accelerometer
message_accel
;
message_imu
.
header
.
stamp
=
ros
::
Time
::
now
();
message_imu
.
header
.
frame_id
=
"mpu9250"
;
// Set blank orientation.
message_imu
.
orientation
.
w
=
std
::
numeric_limits
<
double
>::
quiet_NaN
();
message_imu
.
orientation
.
x
=
std
::
numeric_limits
<
double
>::
quiet_NaN
();
message_imu
.
orientation
.
y
=
std
::
numeric_limits
<
double
>::
quiet_NaN
();
message_imu
.
orientation
.
z
=
std
::
numeric_limits
<
double
>::
quiet_NaN
();
// Covariances of -1 indicate orientation not calculated.
message_imu
.
orientation_covariance
.
fill
(
-
1.0
);
// Set accelerations (convert from g's to m/s^2)
// Set accelerations (convert from g's to m/s^2)
message_imu
.
linear_acceleration
.
x
=
static_cast
<
double
>
(
data
.
accel_x
)
*
9.80665
;
message_accel
.
x
=
static_cast
<
double
>
(
data
.
accel_x
)
*
9.80665
;
message_imu
.
linear_acceleration
.
y
=
static_cast
<
double
>
(
data
.
accel_y
)
*
9.80665
;
message_accel
.
y
=
static_cast
<
double
>
(
data
.
accel_y
)
*
9.80665
;
message_imu
.
linear_acceleration
.
z
=
static_cast
<
double
>
(
data
.
accel_z
)
*
9.80665
;
message_accel
.
z
=
static_cast
<
double
>
(
data
.
accel_z
)
*
9.80665
;
// Publish message.
ros_node
::
m_publisher_accelerometer
.
publish
(
message_accel
);
// Create gyroscope message.
sensor_msgs_ext
::
gyroscope
message_gyro
;
// Set rotation rates (convert from deg/sec to rad/sec)
// Set rotation rates (convert from deg/sec to rad/sec)
message_imu
.
angular_velocity
.
x
=
static_cast
<
double
>
(
data
.
gyro_x
)
*
M_PI
/
180.0
;
message_gyro
.
x
=
static_cast
<
double
>
(
data
.
gyro_x
)
*
M_PI
/
180.0
;
message_imu
.
angular_velocity
.
y
=
static_cast
<
double
>
(
data
.
gyro_y
)
*
M_PI
/
180.0
;
message_gyro
.
y
=
static_cast
<
double
>
(
data
.
gyro_y
)
*
M_PI
/
180.0
;
message_imu
.
angular_velocity
.
z
=
static_cast
<
double
>
(
data
.
gyro_z
)
*
M_PI
/
180.0
;
message_gyro
.
z
=
static_cast
<
double
>
(
data
.
gyro_z
)
*
M_PI
/
180.0
;
// Leave covariance matrices at zero.
// Publish message.
// Publish IMU message.
ros_node
::
m_publisher_gyroscope
.
publish
(
message_gyro
);
ros_node
::
m_publisher_imu
.
publish
(
message_imu
);
// Check if there was a magneto overflow.
// Check if there was a magneto overflow.
if
(
isnan
(
data
.
magneto_x
)
==
false
)
if
(
isnan
(
data
.
magneto_x
)
==
false
)
{
{
// Create magneto message.
// Create magneto message.
sensor_msgs
::
MagneticField
message_mag
;
sensor_msgs_ext
::
magnetometer
message_mag
;
message_mag
.
header
=
message_imu
.
header
;
// Fill magnetic field strengths (convert from uT to T)
// Fill magnetic field strengths (convert from uT to T)
message_mag
.
magnetic_field
.
x
=
static_cast
<
double
>
(
data
.
magneto_x
)
*
0.000001
;
message_mag
.
x
=
static_cast
<
double
>
(
data
.
magneto_x
)
*
0.000001
;
message_mag
.
magnetic_field
.
y
=
static_cast
<
double
>
(
data
.
magneto_y
)
*
0.000001
;
message_mag
.
y
=
static_cast
<
double
>
(
data
.
magneto_y
)
*
0.000001
;
message_mag
.
magnetic_field
.
z
=
static_cast
<
double
>
(
data
.
magneto_z
)
*
0.000001
;
message_mag
.
z
=
static_cast
<
double
>
(
data
.
magneto_z
)
*
0.000001
;
// Leave covariance matrices at zero.
// Publish message.
ros_node
::
m_publisher_magnetometer
.
publish
(
message_mag
);
// Publish magneto message.
ros_node
::
m_publisher_mag
.
publish
(
message_mag
);
}
}
// Create temperature message.
// Create temperature message.
sensor_msgs
::
Temperature
message_temp
;
sensor_msgs_ext
::
temperature
message_temp
;
message_temp
.
header
=
message_imu
.
header
;
message_temp
.
temperature
=
static_cast
<
double
>
(
data
.
temp
);
message_temp
.
temperature
=
static_cast
<
double
>
(
data
.
temp
);
message_temp
.
variance
=
0.0
;
// Publish temperature message.
// Publish temperature message.
ros_node
::
m_publisher_temp
.
publish
(
message_temp
);
ros_node
::
m_publisher_temp
erature
.
publish
(
message_temp
);
}
}
This diff is collapsed.
Click to expand it.
src/ros_node.h
+
8
−
26
View file @
0713cde6
...
@@ -7,61 +7,43 @@
...
@@ -7,61 +7,43 @@
#include
<ros/ros.h>
#include
<ros/ros.h>
///
/// \brief Implements the driver's ROS node functionality.
/// \brief Implements the driver's ROS node functionality.
///
class
ros_node
class
ros_node
{
{
public:
public:
// CONSTRUCTORS
// CONSTRUCTORS
///
/// \brief ros_node Initializes the ROS node.
/// \brief ros_node Initializes the ROS node.
/// \param driver The MPU9250 driver instance.
/// \param driver The MPU9250 driver instance.
/// \param argc Number of main() args.
/// \param argc Number of main() args.
/// \param argv The main() args.
/// \param argv The main() args.
///
ros_node
(
driver
*
driver
,
int
argc
,
char
**
argv
);
ros_node
(
driver
*
driver
,
int
argc
,
char
**
argv
);
~
ros_node
();
~
ros_node
();
// METHODS
// METHODS
///
/// \brief spin Runs the node.
/// \brief spin Runs the node.
///
void
spin
();
void
spin
();
private:
private:
// VARIABLES
// VARIABLES
///
/// \brief m_driver The driver instance.
/// \brief m_driver The driver instance.
///
driver
*
m_driver
;
driver
*
m_driver
;
///
/// \brief m_node The node's handle.
/// \brief m_node The node's handle.
///
ros
::
NodeHandle
*
m_node
;
ros
::
NodeHandle
*
m_node
;
///
/// \brief Publisher for accelerometer data.
/// \brief m_publisher_imu The publisher for IMU messages.
ros
::
Publisher
m_publisher_accelerometer
;
///
/// \brief Publisher for gyroscope data.
ros
::
Publisher
m_publisher_imu
;
ros
::
Publisher
m_publisher_gyroscope
;
///
/// \brief Publisher for magnetometer data.
/// \brief m_publisher_mag The publisher for MagneticField messages.
ros
::
Publisher
m_publisher_magnetometer
;
///
/// \brief Publisher for temperature data.
ros
::
Publisher
m_publisher_mag
;
ros
::
Publisher
m_publisher_temperature
;
///
/// \brief m_publisher_temp The publisher for Temperature messages.
///
ros
::
Publisher
m_publisher_temp
;
// METHODS
// METHODS
///
/// \brief deinitialize_driver Deinitializes the driver.
/// \brief deinitialize_driver Deinitializes the driver.
///
void
deinitialize_driver
();
void
deinitialize_driver
();
///
/// \brief data_callback The callback function for when new data is available.
/// \brief data_callback The callback function for when new data is available.
/// \param data The latest data read from the MPU9250/AK8963.
/// \param data The latest data read from the MPU9250/AK8963.
///
void
data_callback
(
driver
::
data
data
);
void
data_callback
(
driver
::
data
data
);
};
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment