Ask Your Question

Any microstrain imu driver supporting 3DM-GX3 protocol? [closed]

asked 2011-04-11 21:42:47 -0500

Antonio Franchi gravatar image

Until now, only the 3DM-GX2 protocol is supported for microstrain IMUs.

Is anybody working on the 3DM-GX3 procol?

edit retag flag offensive reopen merge delete

Closed for the following reason the question is answered, right answer was accepted by mmwise
close date 2011-06-08 12:08:11


Was a solution ever found here? If not I am going to write/modify an existing package to support the 3DM-GX3 series, specifically our new 3DM-GX3-25 unit.
William gravatar image William  ( 2011-04-14 11:00:17 -0500 )edit
if you supply a patch I can push it into the existing released ROS driver
mmwise gravatar image mmwise  ( 2011-04-26 06:11:21 -0500 )edit

3 Answers

Sort by ยป oldest newest most voted

answered 2011-06-08 12:07:50 -0500

mmwise gravatar image

I have released the patch for the 3DM-GX3 protocol into diamondback and unstable under imu_drivers 1.2.4

edit flag offensive delete link more

answered 2011-04-14 14:39:48 -0500

robz gravatar image

updated 2011-04-14 16:55:39 -0500

The "stop continuous mode" message has changed between the GX2 and GX3 versions to include two user confirm bytes. If you add these to microstrain_3dmgx2_imu::IMU::stopContinuous() it should work.

uint8_t cmd[3];


cmd[1] = 0x75; // gx3 - confirms user intent

cmd[2] = 0xb4; // gx3 - confirms user intent

edit flag offensive delete link more


mwise_wg: The 4 lines above should suffice as a patch. If you want to make the driver general, then just grab the device ID string when you initialize and check whether it is a gx2 or gx3, then wrap an if statement to choose between the 4 lines above for gx3 or the existing 2 lines for gx2.
robz gravatar image robz  ( 2011-05-04 13:38:50 -0500 )edit
This has been patched into the existing driver.
tfoote gravatar image tfoote  ( 2011-05-16 12:18:54 -0500 )edit
And released into diamondback and unstable under imu_drivers 1.2.3
mmwise gravatar image mmwise  ( 2011-05-16 13:03:45 -0500 )edit
Sorry, didn't notice this was responded to a couple days ago. Please see my additional comment on this gx3 thread for a more complete description of the required patch, including a critical update to the imu timer.
robz gravatar image robz  ( 2011-05-18 13:50:24 -0500 )edit

answered 2011-05-17 20:22:02 -0500

robz gravatar image

Addendum to my answer above...

The timing is a bit different too. You need to switch the scale factor for the gx3.

in 3dmgx2.h:

static const int TICKS_PER_SEC_GX2  = 19660800;

static const int TICKS_PER_SEC_GX3  = 62500;

in, extractTime() function:


return start_time + (is_gx3 ? (uint64_t)(all_ticks * (1000000000.0 / TICKS_PER_SEC_GX3)) : (uint64_t)(all_ticks * (1000000000.0 / TICKS_PER_SEC_GX2))); // syntax a bit funny because of C++ compiler

Finally, to make the previous change mentioned above more generic:

In, getDeviceIdentifierString():


if( type==ID_DEVICE_NAME ){

is_gx3 = (strstr(id,"GX3") != NULL);


is_gx3 should be declared in 3dmgx2.h and set to false in the constructor.

Finally, in stopContinuous:

uint8_t cmd[3];


cmd[1] = 0x75; // gx3 - confirms user intent

cmd[2] = 0xb4; // gx3 - confirms user intent

send(cmd, is_gx3 ? 3 : 1);

edit flag offensive delete link more


Please edit your existing answer to include any new info instead of posting a new answer. This will help keep things organized for the next person that views this question. If you want to emphasize that it's new info, just put some sort of "UPDATE" or "EDIT" into your answer and insert afterwards.
Eric Perko gravatar image Eric Perko  ( 2011-05-17 20:24:23 -0500 )edit

Question Tools

1 follower


Asked: 2011-04-11 21:42:47 -0500

Seen: 855 times

Last updated: Jun 08 '11