ROS公式サイト中級教程学習総括(1-6)


チュートリアルのWebサイト:http://wiki.ros.org/cn/ROS/Tutorials. このブログは1-6節です.

ROSパッケージの手動作成

  • xmlファイルを追加します.パッケージにプロファイル(package.xml)が含まれている場合、ROSはそれを見つけることができます.実行:rospack find [ ].さっき作成したpackageに気づくべきです.xmlはroscppとstd_に依存するmsgs.catkinは、作成したpackageを構成するためにこれらの依存項目を利用しています.
  • CMakeListsも必要だtxtファイル.これでcatkin_makeは、CMakeの強力なプラットフォーム間特性を利用して、作成したpackageをコンパイルすることができます.
  • cmake_minimum_required(VERSION 2.8.3)
    project(foobar)
    find_package(catkin REQUIRED roscpp std_msgs)
    catkin_package()

    システム依存の管理


    System Dependencies


    ROS packagesでは、オペレーティングシステムがいわゆる「システム依存項目」である外部関数ライブラリを提供する必要がある場合があります.ROSは、必要なシステム依存項目をダウンロードしてインストールするためのツールrosdepを提供します.ROS packagesは、構成ファイルにシステム依存項目を宣言する必要があります.

    rosdep


    rosdepは、ROS packagesをダウンロードしてインストールするために必要なシステム依存項目の小さなツールの使用方法です.rosdep install [package]

    Roslaunchの大規模なプロジェクトでの使用テクニック


    Introduction


    launchファイルをできるだけ再利用することで、異なるロボットプラットフォームでこれらのlaunchファイルを修正する必要がなくなります.実際の環境からシミュレーション環境に移行しても少しだけ修正すればよい.

    上層部の構造


    コマンド「rospack find 2 dnav_pr 2/move_base/2 dnav_pr 2.launch」を使用して、上位レベルのlaunchファイルを見つけることができます.
    <launch>
      <group name="wg">
        <include file="$(find pr2_alpha)/$(env ROBOT).machine" />
        <include file="$(find 2dnav_pr2)/config/new_amcl_node.xml" />
        <include file="$(find 2dnav_pr2)/config/base_odom_teleop.xml" />
        <include file="$(find 2dnav_pr2)/config/lasers_and_filters.xml" />
        <include file="$(find 2dnav_pr2)/config/map_server.xml" />
        <include file="$(find 2dnav_pr2)/config/ground_plane.xml" />
    
        
        <include file="$(find 2dnav_pr2)/move_base/move_base.xml" />
      group>
    launch>

    この書類は他の書類を引用している.これらの参照されるファイルには、位置決め、センサ処理、パス計画など、システムに関連するnodeおよびparameter(さらにはネストされた参照)が含まれています.作成テクニック:上位レベルのlaunchファイルは短く、includeコマンドを使用してシステムの構成部分とROS parameterを参照すればよい.

    Machine tags and Environment Variables


    負荷のバランスと帯域幅の管理のために、どのノードがどのマシン上で動作するかを制御する必要があります.また,再利用性を考慮して,具体的なマシン名をlaunchファイルに書き込むことは望んでいない.roslaunchはmachine tagsを用いてこの問題を解決した.最初の参照は、env置換子を使用して、ROBOT変数の値を使用するです.例えば、roslaunch命令の前に実行する:export ROBOT=pre、pre.machineが引用されます.作成テクニック:envディスプレイスメントを使用すると、launchファイルの一部を環境変数の値に依存させることができます.

    Parameters, namespaces, and yaml files


    引用されたmoveを見てみましょうbase.xmlファイル:
    "move_base" type="move_base" name="move_base" machine="c2">
      from="odom" to="pr2_base_odometry/odom" />
      <param name="controller_frequency" value="10.0" />
      <param name="footprint_padding" value="0.015" />
      <param name="controller_patience" value="15.0" />
      <param name="clearing_radius" value="0.59" />
      file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
      file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
      file="$(find 2dnav_pr2)/move_base/local_costmap_params.yaml" command="load" />
      file="$(find 2dnav_pr2)/move_base/global_costmap_params.yaml" command="load" />
      file="$(find 2dnav_pr2)/move_base/navfn_params.yaml" command="load" />
      file="$(find 2dnav_pr2)/move_base/base_local_planner_params.yaml" command="load" />
    

    このセグメントコードはmoveを起動します.ベースノード.最初の参照要素はremappingです.作成テクニック:特定のタイプの情報が異なる場合に異なるtopicに公開されると、topic remappingファイルにいくつかのラベルが使用できます.これらのパラメータは、ノードの内部要素(前に書かれているため)であるため、ノードのプライベートパラメータです.要素の後にはyamlファイルからパラメータを読み出す要素もあります.yamlは人間が読みやすいファイルフォーマットで、複雑なデータをサポートする構造です.作成テクニック:Yamlファイルでは、複雑なネストされたドメイン名のパラメータを許可し、同じパラメータ値を複数の場所で繰り返し使用できます.

    Launchファイルの再利用


    パラメータリロード


    ROSのマルチロボットでの使用


    概要


    複数のロボットでROSを使用するのは簡単ですが、いくつかの点を覚えておく必要があります.-マスターが1つしか必要ありません.1つのマシンで実行すればいいです.-すべてのノードは、ROS_を構成する必要があります.MASTER_URIは同じマスターに接続されています.-任意の2つのマシン間の任意の2つのポートには、完全で双方向に接続されたネットワークが必要です.-各機器は解析可能な名前を他の機器に放送しなければならない.

    マシン間で動作するTalker/listener


    マスターの起動


    Listenerの起動


    talkerの起動


    実行エラー


    訳者注


    カスタムメッセージ


    カスタムメッセージ


    対応するコンパイル構築システムを選択することを忘れないでください.

    リファレンスと出力メッセージのタイプ


    メッセージ・タイプは、packageに対応するドメイン名空間に帰属します.たとえば、次のようにします.

    C++

    #include <std_msgs/String.h>
    
    std_msgs::String msg;

    Python

    from std_msgs.msg import String
    
    msg = String()

    依存


    他のpackageで定義したメッセージタイプを使用する場合は、packageを忘れないでください.xmlは、およびを追加する.

    pythonでのC++クラスの使用