Skip to main content

Python serial interface for the Easy IMU (EIMU)

Project description

Easy IMU (EIMU) Python Library

Python serial interface for the Easy IMU (EIMU).

you can use it in your microcomputer robotics project (e.g Raspberry Pi, PC, etc.)

Install

  • you'll need to pip install the pyserial library
      pip3 install eimu-serial   //linux or mac
    
      pip install eimu-serial  //windows
    

Uninstall

  • you'll need to pip install the pyserial library
      pip3 uninstall eimu-serial   //linux or mac
    
      pip uninstall eimu-serial  //windows
    

How to Use the Library

  • Ensure you have the EIMU MODULE interfaced with your PC or microcomputer

  • Ensure you have the Easy IMU Module is already calibrated and setup with the eimu_setup_application

  • check the serial port the driver is connected to:

    ls /dev/ttyA*
    

    you should see /dev/ttyACM0 or /dev/ttyACM1 and so on

  • use the serial port in your code

  • A simple way to get started is simply to try out the example code below

Basic Library functions and usage

  • connect to EIMU module

    imu = EIMUSerialClient()

    imu.connect("port_name or port_path")

  • clear imu, filter, e.t.c data buffer on the EIMU module

    imu.clearDataBuffer() # returns bool -> success

  • set imu reference frame -> NWU (0), ENU (1), NED (2)

    imu.setWorldFrameId(frame_id)

  • get imu reference frame -> NWU (0), ENU (1), NED (2)

    imu.getWorldFrameId() # returns bool, int -> success, frame_id

  • adjust filter gain

    imu.setFilterGain(gain)

  • read filter gain

    imu.getFilterGain() # returns bool, float -> success, gain

  • read all IMU data (orientation - RPY, linear acceleration, angular velocity)

    imu.readImuData() # returns bool, tuple(size=9foats) -> success, (r, p, y, ax, ay, az, gx, gy, gz)

  • read Oreintation - Quaterninos

    imu.readQuat() # returns bool, tuple(size=4foats) -> success, (qw, qx, qy, qz)

  • read Oreintation - RPY

    imu.readRPY() # returns bool, tuple(size=3foats) -> success, (r, p, y)

  • while these function above help communicate with the already configure EPMC module, more examples of advanced funtions usage for parameter tuning can be found in the eimu_setup_application source code

example code

from eimu_serial import EIMUSerialClient
import time
from math import pi

toRad = 2 * pi / 360
toDeg = 1 / toRad

imu = EIMUSerialClient()

def main():
  # 50Hz comm setup
  serial_port = '/dev/ttyACM0'
  serial_baudrate = 115200
  serial_timeout = 0.018 #value < 0.02 (for 50Hz comm)

  imu.connect(serial_port, serial_baudrate, serial_timeout)

  # success = imu.clearDataBuffer()

  # change the reference frame to ENU frame (0 - NWU,  1 - ENU,  2 - NED)
  imu.setWorldFrameId(1)

  # check the reference frame the eimu is working in (0 - NWU,  1 - ENU,  2 - NED)
  success, ref_frame_id = imu.getWorldFrameId()
  if success:
    if ref_frame_id == 0:
      print("Reference Frame is North-West-Up (NWU)")
    elif ref_frame_id == 1:
      print("Reference Frame is East-North-Up (ENU)")
    elif ref_frame_id == 2:
      print("Reference Frame is North-East-Down (NED)")
  else:
    print("Could not get world frame ID")

  prevTime = time.time()
  sampleTime = 0.02 #( 50Hz comm)

  while True:
    if time.time() - prevTime > sampleTime:
      # success, buffer = imu.readQuat() # qw, qx, qy, qz
      # if success:
      #   qw = buffer[0]
      #   qx = buffer[1]
      #   qy = buffer[2]
      #   qz = buffer[3]

      success, buffer = imu.readImuData() # r, p, y, ax, ay, az, gx, gy, gz
      if success:
        r = buffer[0]; p = buffer[1]; y = buffer[2]
        ax = buffer[3]; ay = buffer[4]; az = buffer[5]
        gx = buffer[6]; gy = buffer[7]; gz = buffer[8]

        print(f"r: {round(r*toDeg,2)}\tp: {round(p*toDeg,2)}\ty: {round(y*toDeg,2)}")
        print(f"ax: {ax}\tay: {ay}\taz: {az}")
        print(f"gx: {gx}\tgy: {gy}\tgz: {gz}")
        print()
      else:
        print("Error reading IMU data")
      prevTime = time.time()

if __name__ == "__main__":
  main()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eimu_serial-1.3.0.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eimu_serial-1.3.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file eimu_serial-1.3.0.tar.gz.

File metadata

  • Download URL: eimu_serial-1.3.0.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for eimu_serial-1.3.0.tar.gz
Algorithm Hash digest
SHA256 0648ce0d670f52bbabf7779a44e9cb8ea22fbf079cd1f155edc97c39e50628e0
MD5 4f4d60e8c832a93ddd8427862f433acb
BLAKE2b-256 27cd22e6491b62e9a992096163c1a14c8c27bfcf40259df19b0296e455cc0631

See more details on using hashes here.

File details

Details for the file eimu_serial-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: eimu_serial-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for eimu_serial-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2150d3ae86b40b8ba3a716bdb1ab16cb6318fb095c2fe87b10d723505522c9a7
MD5 b7087a0868a2457b663b64bffb670585
BLAKE2b-256 4bb1bfb6c71817ee68d4a0948d15cdd81560b2ad5ea4a7e9268968ec2be7699e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page