Accelerometer data from IMU

I am using ArduPilot with IMU and ublox GPS, connected to an XBee telemetry chip. I need acceleration data from the IMU accelerometers, i.e. raw an3, an4, an5 readings. Hence I tried to modify the code in IMU as follows:

 

In arduimu code, under 'Output', I basically added the bolded code as below:

  // This section outputs the IMU orientatiom message
  Serial.print("DIYd");  // This is the message preamble
  IMU_buffer[0]=0x06;
  ck=6;
  IMU_buffer[1] = 0x02;     

  tempint=ToDeg(roll)*100;  //Roll (degrees) * 100 in 2 bytes
  IMU_buffer[2]=tempint&0xff;
  IMU_buffer[3]=(tempint>>8)&0xff;
     
  tempint=ToDeg(pitch)*100;   //Pitch (degrees) * 100 in 2 bytes
  IMU_buffer[4]=tempint&0xff;
  IMU_buffer[5]=(tempint>>8)&0xff;
     
  templong=(ToDeg(yaw)+gc_offset)*100;  //Yaw (degrees) * 100 in 2 bytes
  if(templong>18000) templong -=36000;
  if(templong<-18000) templong +=36000;
  tempint = templong;
  IMU_buffer[6]=tempint&0xff;
  IMU_buffer[7]=(tempint>>8)&0xff;

 

  tempint=Accel_Vector[0]*1000;   //AccX * 1000 in 2 bytes
  IMU_buffer[8]=tempint&0xff;
  IMU_buffer[9]=(tempint>>8)&0xff;

  tempint=Accel_Vector[1]*1000;   //AccY * 1000 in 2 bytes
  IMU_buffer[10]=tempint&0xff;
  IMU_buffer[11]=(tempint>>8)&0xff;

  tempint=Accel_Vector[2]*1000;   //AccZ * 1000 in 2 bytes
  IMU_buffer[12]=tempint&0xff;
  IMU_buffer[13]=(tempint>>8)&0xff;
      
  for (int i=0;i<ck+2;i++) Serial.print (IMU_buffer[i]);
  
  for (int i=0;i<ck+2;i++) {
   IMU_ck_a+=IMU_buffer[i];  //Calculates checksums
   IMU_ck_b+=IMU_ck_a;      
  }
  Serial.print(IMU_ck_a);
  Serial.print(IMU_ck_b);

 

Then in ArduPilot, I added in similar code to receive the data. However, when I uploaded the code and tried to start up the system, it seems to keep iterating the start up message, i.e. start up message keeps looping.

 

Does anyone have any idea whether there's an error in my code or if I did something wrong? I did not change anything else to the codes..

 

Many thanks in advance!!

You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –

Replies

  • Developer

    You did not adjust the packet length, so the checksum is probably failing on the receive end....

     

    Need to change;

    IMU_buffer[0]=0x06;
    ck=6;

This reply was deleted.

Activity

Neville Rodrigues liked Neville Rodrigues's profile
Jun 30
Santiago Perez liked Santiago Perez's profile
Jun 21
More…