Qualcomm Robotics RB5/Sensors/IMU: Difference between revisions

From RidgeRun Developer Wiki
No edit summary
No edit summary
Line 134: Line 134:
|}
|}


{{Review|Can we add a link to the sample application you were using and how to compile it? I think it can be useful for some people|lleon}}


<noinclude>
<noinclude>
{{Qualcomm Robotics RB5/Foot|Sensors|Demos}}
{{Qualcomm Robotics RB5/Foot|Sensors|Demos}}
</noinclude>
</noinclude>

Revision as of 17:20, 27 March 2024



Index





IMU

The Qualcomm Robotics RB5 Platfrom comes with the ICM-42688-P, a 6-axis IMU that combines a 3-axis gyroscope and a 3-axis accelerometer. In this section we will learn how to extract the information on angular velocity and linear acceleration, as well as timestamp metadata.

Hardware configuration

Before moving forward with the software configuration, make sure you have the proper hardware configuration for your setup. More specifically, check the DIP switch settings for your specific board.

You can verify if the accelerometer is working by using the following binary:

ssc_drva_test -sensor=accel -duration=5 -sample_rate=50

You should see an output similar to the following:

39 ssc_drva_test version 1.13
39 ssc_drva_test -sensor=accel -duration=5 -sample_rate=50 
39 handle_event 
39 event_cb attribute event for da_test
39 handle_event 
39 event_cb attribute event for da_test
39 using da_test name=da_test, suid = [high addeaddeaddeadde, low addeaddeaddeadde
39 enter send_memory_log_req cookie: 39
39 exit send_memory_log_req
39 enter da_test runner
39 handle_event 
39 -time_to_first_event=2260387
39 -time_to_last_event=-147433
39 -sample_ts=179117069042
39 -total_samples=248
39 -avg_delta=377490
39 -recvd_phy_config_sample_rate=50
39 -random_seed_used=2927366375
39 -num_request_sent=2
39 -first_sample_timestamp=179023325647
39 handle_event 
39 received event: PASS
39 enter send_memory_log_req cookie: 39
39 exit send_memory_log_req
39 PASS

Accelerometer + Gyroscope

Note: You can refer to our Drone Demo for information on how to get a sample code that implements the steps described in this section.

If you are running Qualcomm RB5 software environment, you will have already existing interfaces for the IMU. First, you will need to check if the imud service is running. You can do so by running the following command:

$ systemctl status imud

The output should look similar to this:

● imud.service - imud Service
     Loaded: loaded (/etc/imud.sh; static; vendor preset: enabled)
     Active: active (running) since Wed 2024-03-20 16:35:42 UTC; 2h 50min ago
    Process: 876 ExecStart=/etc/imud.sh start (code=exited, status=0/SUCCESS)
   Main PID: 891 (imud)
      Tasks: 4 (limit: 6291)
     Memory: 4.9M
     CGroup: /system.slice/imud.service
             └─891 /sbin/imud

This service provides an interface to send commands to the IMU through sockets, namely the /run/imud_socket.

Initialization

Once you establish connection to the socket, you can proceed to configure your IMU. Each sensor has a specific ID, as well as a configurable sample rate.

Sensor Sensor ID Sample rate
Accelerometer 0 1-1000 Hz
Gyroscope 1 1-1000 Hz

Each message has also a specific ID. The initialization process requires the following commands:

Command Command ID
START 2
STOP 3
CONFIG RATE 12
CONFIG DATATYPE 13
  • To configure the accelerometer
    • Send configuration type message with accelerometer ID (0)
    • Send configuration message to configure sample rate (1-1000 Hz)
  • To configure the gyroscope
    • Send configuration type message with gyroscope ID (1)
    • Send configuration message to configure sample rate (1-1000 Hz)
  • To start streaming data
    • Send start command with accelerometer ID
    • Send start command with gyroscope ID

Now that we are producing data, the second interface we will need is memory mapping the IMU output. The /run/imu_map acts as an interface to access sensor data. By using memory mapping techniques we access the sensor's output data. The incoming data is structured as follows:


IMU Output data
 Acceleration X (float)
 Acceleration Y (float)
 Acceleration Z (float)
 Accel timestamp (unsigned int 64)
 
 Angular velocity X (float)
 Angular velocity Y (float)
 Angular velocity Z (float)
 Gyro timestamp (unsigned int 64)


Index