Raspberry PIによるROS:遅い流動性能のコア問題の調査


ロボットを動かすことは、ロボットがその環境を点検して、動くのを可能にする視覚センサーを加えることに、典型的につながるでしょう.視覚センサは、距離測定のための超音波センサーまたはレーザースキャナ、360度のレーザー走査イメージのためのライダー、RGBイメージを提供するカメラと複雑な点雲を提供するセンサーを含みます.ROSはすべてのこれらのセンサーをサポートしています:RVIZとGazeboの正しいプラグインを添付し、ハードウェアセンサーを起動し、正しいトピックを発行し、そのデータを購読する.
私のロボットプロジェクトでは、WiFi経由で接続されたモバイルロボットから、イーサネット経由で接続されたLinuxワークステーションにストリーム画像データを送ることが目標です.私の選択のカメラは、インテルのRealSense D 435です.一度rosのソフトウェアと設定が行われ、トピックの画像のストリーミング/camera/color/image_raw とポイントクラウドデータの/camera/depth/color/points 開始できます.しかし、私は悪いパフォーマンスに驚きました.画像は約17 fpsでロボットに公開されたが,ワークステーションでは6 fpsであった.そして、ポイントクラウドデータのために、それは12 fpsから3 fpsまで落ちました.これは、ロボットの環境をリアルタイムで見て、十分なナビゲーションのために十分に高速ではありません.
この問題は、2つ以上の問題を調査して、見つけて、解決するために私を連れて行きました.に沿って、D 435カメラ、イメージとROSでポイントクラウドの設定の使用方法を最適化について多くを学び、ネットワークパフォーマンス.
注意:技術的な環境はUbuntu 20.04です.
この記事はもともと私のブログに登場admantium.com .

ハードウェアとソフトウェア概要


この記事の文脈を詳細にするために、私は私のロボットプロジェクトで使用している具体的なハードウェアとソフトウェアです.
  • 移動ロボット
  • ラズベリーPI 4 B
  • Ubuntu 20.04サーバLTS ( headless )
  • ROSノロジー1.15.11
  • Linuxワークステーション
  • インテルセレロンN 3450@4 x
  • Ubuntu 20.04フォーカル
  • ROSノロジー1.15.11
  • 移動ロボットについてもRealsense SDKRealsense ROS package -異なるバージョンでは、パフォーマンスが違います.詳細は次のセクションで説明します.

    ベースラインパフォーマンス


    RealSenseカメラSDK 2.47とRealSense Ross 1 2.3.2では、カメラのノードの起動とストリームのイメージを得ることができました.移動ロボットノードではROSノードを起動し、Linuxのワークステーションで受信したメッセージの数をコマンドで測定したros topic hz .
    ベースライン、次に、これは/camera/color/image_raw と3のFPS/camera/depth/color/points .
    ここから、私はRSD Realsenseノード、カメラSDとRealSense ROSパッケージの異なるバージョンのために異なる構成パラメータを組織的に試みました.これらの測定結果を次のセクションで説明した.

    ROS 1 : ROSカメラのパラメータ設定


    最初の試みでは、SDKとライブラリのこれらのバージョンを使用しました.
    Realsense  SDK v2.47
    Realsense ROS 2.3.2
    
    ROSノードの異なるパラメータを設定すると、これらの結果が得られます.
    パラメータ
    深さと色幅
    設定されない
    設定されない
    640年
    640年
    640年
    640年
    640年
    640年
    深さと高さ
    設定されない
    設定されない
    480
    480
    480
    480
    480
    480
    デプスヘ
    設定されない
    設定されない
    5
    5
    5
    6
    6
    6
    カラーリングFPS
    設定されない
    設定されない
    5
    5
    5
    6
    6
    6
    リセットする







    有効な同期

    深さ
    フィルタ
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    ポイントクラウド
    河川
    任意

    任意
    任意




    OrderedCard PC
    はい
    トピックHz受信
    /色/imageRAW RAW
    6.5
    データなし
    1.5
    1.5
    データなし
    6
    6
    6
    /深さ/色/点
    データなし
    データなし
    データなし
    データなし
    データなし
    3
    1
    3
    /深さ/イメージrect
    7
    6.5
    データなし
    データなし
    6
    6
    6
    6
    最初の結果はどんな流れのためにもストリームが7 fpsよりよく得ることができないことを示しました、そして、6 fpsに特に点雲データをセットするときだけ、どんなデータでも受信されました.
    だから私は別のを開きましたGithub issue about ROS1 performance と実験を続けた.
    他の問題では、RealSense SDKを格下げすることでパフォーマンスを向上させることができました.私はross 1とross 2の両方のために格下げSDKバージョンを試みました.

    ROS 1:RealSense SDKの減少


    次の試みではSDKを格下げしました.
    Realsense  SDK v2.41
    Realsense Ros 2.2.21
    
    今回は、送信側のトピック周波数も測定しました.
    パラメータ
    深さ/幅
    640年
    640年
    640年
    深さ/高さ
    480
    480
    480
    デプスヘ
    5
    30
    30
    カラーリングFPS
    5
    30
    30
    リセットする



    有効な同期



    深さ



    フィルタ
    ポイントクラウド
    -
    -
    河川
    トピックHz送信
    カラーイマージュ
    17
    15
    28
    26
    深さ/色/点
    データなし
    12
    16
    0
    画像の奥行き
    30
    25
    17
    カメラ/アライメント・デプス
    データなし
    データなし
    8
    15
    話題Hz受信機
    カラーイマージュ
    6
    6
    11
    10
    深さ/色/点
    2
    2
    3
    画像の奥行き
    9
    9
    5
    5
    これらの結果はトピックの安定28 fpsを示す/camera/color/image_raw と16 fps/camera/depth/color/points 可能です-送信側に!しかし、このデータを受信し、イーサネットを介して接続されたワークステーションは、これらのフレームの約1/3しか受信しない.

    ROS 2:RealSense SDKの減少


    rok 2の次の測定もsdkのダウングレード版で行った.
    Realsense  SDK v2.41
    Realsense Ros 3.13
    
    これらは私が使用したパラメータと結果です.
    パラメータ
    深さ/幅
    640年
    深さ/高さ
    480
    デプスヘ
    カラーリングFPS
    リセットする
    有効な同期
    深さ
    フィルタ
    ポイントクラウド
    河川
    インフラ1
    障害者
    インフラ2
    障害者
    トピックHz送信
    カラーイマージュ
    19
    16
    16
    深さ/色/点
    データなし
    データなし
    13
    画像の奥行き
    30
    30
    28
    話題Hz受信機
    カラーイマージュ
    2.5
    2
    2
    深さ/色/点
    データなし
    1
    画像の奥行き
    4.5
    4.5
    4
    イメージのための19 fpsの最大値と点雲のための13 -それはROS 1より悪いです.また、レシーバー側の厳しいframerate低下は、ナビゲーションの可視化のためにどんな使用でも妨げます.

    ROS性能考察


    これらの結果を踏まえて,ros 1とros 2性能についてインターネット上で一般的な探索を行った.これは、パフォーマンスのギャップを探す場所について一般的な感情を提供する必要があります.調査する潜在的な問題のいくつかは以下の通りです.
  • 受信機の適切なバッファサイズとキューサイズの設定
  • トピックが複数の購読者を持つ場合、トピック出版率が減少する
  • 以前のバージョンはheavy constraints when parsing Python messages , これは非常にsloppyメッセージをもたらしました、しかし、これは現在のROS 2
  • ROS 2ではmulticasting can cause problems with specific routers :
  • 全体的に、これらの問題は、私の地元の無線LANをチェックしてください.ラズベリーパイ4自体から、私は単純になりましたonline speedtest .
    WLAN接続を使用する
    Testing download speed................................................................................
    Download: 4.22 Mbit/s
    Testing upload speed......................................................................................................
    Upload: 6.23 Mbit/s
    
    イーサネットケーブルを使う
    Testing download speed................................................................................
    Download: 106.04 Mbit/s
    Testing upload speed......................................................................................................
    Upload: 42.32 Mbit/s
    
    私は驚いた!約6 MBのアップロード速度制限は厳しいパフォーマンス低下を説明することができます:イメージは十分に速く送られません.画像あたり1 MBを想定して、受信側で30 Hzのイメージ話題周波数を得ることは、少なくとも30 Mbsのアップロード速度を意味するでしょう.明らかに、これは私の現在の無線LAN速度で可能ではありません.
    そして、ここから、私は私の調査のために全く新しい方向をとりました:私のラズベリーパイのWLAN速度を最適化して.そして、これは別の記事の話です.

    結論


    ロボットのナビゲーションには視覚センサが不可欠である.多くの利用可能なデータフォーマットの中で、この記事はトピックを調査しました/camera/color/image_raw and /camera/depth/color/points , これは、生の画像データと深さ情報のポイント雲の日付です.特定のセットアップ- ReSearch D 435カメラによるRaspberry PI 4は、WiFi経由でLinuxワークステーションに接続しました-レシーバー側のこれらの話題ならば、厳しいパフォーマンス低下を示しました.Ross 1とROS 2の両方を使用してRealSense SDKの異なるバージョンを体系的に試してみると、RealSenseのノードの起動パラメータを試してみると、送信者のための出版物を改善することができました.しかし、受信機はRaw 1に対して約11 fps、PointCloud用の3 FPSでキャップされました.最後に、私のラズベリーPi 4の生のアップロード速度を測定しました.私の前の記事でカバーされたそれを改善する方法Improving Image Streaming Performance .