0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dronecode Devマニュアル抜粋&翻訳 - Driver Development

Last updated at Posted at 2020-07-04

#この記事は
Dronecode本家サイトのDriver Developmentページの抜粋・翻訳です。

Driver Development

PX4のデバイスドライバーはデバイスドライバーフレームワークに基づいています

Creating a Driver

PX4はuORBからのデータを独占的に消費します。一般的なペリフェラルタイプのドライバーは、正しいuORBメッセージをPublishする必要があります。(例えば、ジャイロ、加速度計、気圧計など)
新しいドライバーを作成するための最良のアプローチは、同様のドライバー(src/driversを見てください)をテンプレートとして始めることです。

特定のI/Oバスとセンサーに関する詳細情報は、Sensor and Actuator Busesセクションで参照できます。

Note:

ドライバーが従う必要のある唯一のパターンは、正しいuORBトピックのPublishです。

Core Architecture

PX4はリアクティブなシステムであり、uORBのPub/Subを使用してメッセージを転送します。ファイルハンドルは、システムのコアオペレーションに必要ないか、使用されません。2つのおもなAPIが利用されます。

  1. Pub/Sub機構。PX4が動作するシステムによって、ファイルやネットワーク、メモリ共有のいずれで実現されるかは変わります。
  2. グローバルなデバイスレジストリ。これは、デバイスを列挙し、その構成を取得/設定するために使用できます。これは、リンクリストやファイルシステムへのマップと同じくらい簡単です

Device IDs

PX4はシステム上で各センサーを一意に認識するためにデバイスIDを使用します。
このIDは設定パラメータに保存され、センサーの校正値を適用するために利用されます。また、どのセンサーログがどのログファイルにエントリされるかの決定にも利用されます。

(例えば/dev/mag0の代替に/dev/mag1がある場合でも)センサーの順番は優先度には影響しません。優先度はuORBのトピック発行の一部として保存されます。

Decoding example

3つの磁力計の例では、フライトログ(.px4log)を使用してパラメーターをダンプします。
3つのパラメーターはセンサーIDをエンコードし、MAG_PRIMEはプライマリセンサーとして選択されている磁力計を識別します。各MAGx_IDは24ビットの数値であり、手動でデコードするには左にゼロを埋め込む必要があります。

CAL_MAG0_ID = 73225.0
CAL_MAG1_ID = 66826.0
CAL_MAG2_ID = 263178.0
CAL_MAG_PRIME = 73225.0

これは、アドレス0x1EのI2C、バス1を介して接続された外部HMC5983です。ログファイルにIMU.MagXとして表示されます。

# device ID 73225 in 24-bit binary:
00000001  00011110  00001 001

# decodes to:
HMC5883   0x1E    bus 1 I2C

これは、SPI、バス1、スレーブ選択スロット5を介して接続された内部HMC5983です。これは、IMU1.MagXとしてログファイルに表示されます。

# device ID 66826 in 24-bit binary:
00000001  00000101  00001 010

# decodes to:
HMC5883   dev 5   bus 1 SPI

そしてこれは、SPI、バス1、スレーブ選択スロット4を介して接続された内部MPU9250磁力計です。これは、IMU2.MagXとしてログファイルに表示されます。

# device ID 263178 in 24-bit binary:
00000100  00000100  00001 010

#decodes to:
MPU9250   dev 4   bus 1 SPI

Device ID Encoding

デバイスIDは以下の形式の24ビットの数値です。最初のフィールドは、上記のデコード例の最下位ビットであることに注意してください。

struct DeviceStructure {
  enum DeviceBusType bus_type : 3;
  uint8_t bus: 5;    // バス種別
  uint8_t address;   // バスのアドレス(例:I2Cのアドレス)
  uint8_t devtype;   // デバイス種別を示すデバイスクラス
};

bus_typeは以下のようにデコードされます:

enum DeviceBusType {
  DeviceBusType_UNKNOWN = 0,
  DeviceBusType_I2C     = 1,
  DeviceBusType_SPI     = 2,
  DeviceBusType_UAVCAN  = 3,
};

devtypeは以下のようにデコードされます:

#define DRV_MAG_DEVTYPE_HMC5883  0x01
#define DRV_MAG_DEVTYPE_LSM303D  0x02
#define DRV_MAG_DEVTYPE_ACCELSIM 0x03
#define DRV_MAG_DEVTYPE_MPU9250  0x04
#define DRV_ACC_DEVTYPE_LSM303D  0x11
#define DRV_ACC_DEVTYPE_BMA180   0x12
#define DRV_ACC_DEVTYPE_MPU6000  0x13
#define DRV_ACC_DEVTYPE_ACCELSIM 0x14
#define DRV_ACC_DEVTYPE_GYROSIM  0x15
#define DRV_ACC_DEVTYPE_MPU9250  0x16
#define DRV_GYR_DEVTYPE_MPU6000  0x21
#define DRV_GYR_DEVTYPE_L3GD20   0x22
#define DRV_GYR_DEVTYPE_GYROSIM  0x23
#define DRV_GYR_DEVTYPE_MPU9250  0x24
#define DRV_RNG_DEVTYPE_MB12XX   0x31
#define DRV_RNG_DEVTYPE_LL40LS   0x32

Debugging

デバッグについての詳細はDebugging/Loggingを参照してください。

Verbose Logging

ドライバーやその他のモジュールは、デフォルトでは冗長性が最小限になるようなログ文字列を出力します。
(例えば、 PX4_DEBUG, PX4_WARN, PX4_ERRなど)

ログの冗長性は、ビルド時にRELEASE_BUILD(デフォルト)、DEBUG_BUILD(詳細)、またはTRACE_BUILD(非常に詳細)マクロを使用して定義されます。

CMakeLists.txtでドライバーpx4_add_module関数のCOMPILE_FLAGSを使用してログレベルを変更します。以下のコード抜粋は、単一のモジュールまたはドライバーに対してDEBUG_BUILDレベルのデバッグを有効にするために必要な変更を示しています。

px4_add_module(
    MODULE templates__module
    MAIN module
    COMPILE_FLAGS
        -DDEBUG_BUILD
    SRCS
        module.cpp
    DEPENDS
        modules__uORB
    )

.cppファイルの最上部(インクルードの前)に#define DEBUG_BUILDを追加することで、ファイルごとに詳細ログを有効にすることもできます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?