20210806

2019 ワード

前回のコードの問題

  • の発行元では、1秒に5つのROS Topicメッセージしか送信できません.
  • ユーザの場合、2つのROS Topicが同期して受信されると、1秒当たり2つが受信される.
  • 原因分析

  • ApproximateTimeポリシーのアルゴリズムが正しくなく、最終的に受信したTopic数は(5個->2個、データ損失率60%)にすぎないようです.
  • ソリューション:ApproximateTimeポリシーのAgentペナルティ、Interメッセージ
    下限、Maxinterval durationパラメータを変更して最適化します.
  • Maxinterval durationが追加され、逆にTopicは同期しません.
  • ROS Topicは、画像に関するすべてのデータを厳密に含んでいるため、ユーザは直ちにTopicを受信できないようである.
    ex)ユーザがTopiC#1を受信する処理中、TopiC#2,#3は受信されず、新たに加入したTopiC#4は、作業終了後にのみ受信される.
  • ソリューション:SubscriberまたはPolicyのメッセージ・キューを追加し、リアルタイム性を放棄してもすべてのディスカッションを取得できます.
      image_transport::SubscriberFilter sub1(it, "camera/image1", 1);
      // 마지막 파라미터 : sub1에 대한 메세지 큐
    
      message_filters::Synchronizer<SyncPolicy> sync(SyncPolicy(10), sub1, sub2);
      // 10 : Policy에 대한 메세지 큐
    いくら
  • メッセージキューを増やしても変わらない.
  • 実際の原因


  • 最初にPublisherは毎秒5つのTopicしか送信しませんでした.
    =>publisherからloop_rate()に変更[5->30]

  • image transportは元のイメージ自体をROS Topicにロードするため、パブリッシャとサブスクライバに遅延が発生します.
    =>画像圧縮完了後にROS Topicを送信

  • 圧縮image transportパッケージ:http://wiki.ros.org/compressed_image_transport

  • 発行元はパッケージを受け取った後、catkin_makeバージョンを提供します.
    ユーザ側でrosrunを実行する場合rosrun webcam webcam_sub _image_transport:=compressed
  • オリジナル

    圧縮画像画像を受け取った場合

    結果


    Before

    After:毎秒30 Topic