ROS ロボット オペレーティング システム Catkin のコンパイルと一般的なコマンドの使用の概要

ROS にはたくさんのコマンドがありますが、よく使われる一般的なコマンドを整理してみましょう これらのコマンドは日常のロボットの動作でよく使われるコマンドであり、ROS でロボットを正常に動作させるためにも必要な知識です。

特にパッケージをコンパイルするとき, CMakeに精通している友人にとっては非常に簡単です. 現在, Catkinは基本的に ROS で使用されています. CMake と Make をカプセル化し, より効率的かつ簡潔で, 移植性が高くなります. さて, クロスのサポート- 機能パッケージのコンパイルとより合理的な配布。もちろん、ROS システムでは、古いバージョンのrosbuildのコンパイルにも互換性があります。ただし、基本的に ROS のコア ソフトウェア パッケージはすべて Catkin に変換されているため、Catkin の使用を推奨します。

1. 共通コマンド

注文 効果
ロ起動 スタートアップファイルを実行する
catkin_create_pkg 機能パックの作成
ロスパック 機能パックを入手
catkin_make ワークスペースで機能パッケージをコンパイルする
ロスデップ  機能パッケージが依存する他のパッケージを自動的にインストールする
ロスCD ファンクションパックのディレクトリジャンプ
ロスクプ 機能パック内のファイルをコピーする
バラ色の 機能パック内のファイルを編集する
ロズラン 機能パック内の実行可能ファイルを実行する

上記の一般的なコマンドの一部については、公式ヘルプ文書から詳細な説明を以下に示します。後で検索して適用するのに便利なように、中国語の注釈を付けました。

1.1、ロスローンチ

roslaunch : スタートアップ ファイルの実行は非常に重要なコマンドです。ROS に多くのノードがある複雑なシステムの場合、このコマンドを使用して多くのノードを一度に起動する必要があります。

ロ起動 -h

使用法: roslaunch [オプション] [パッケージ] <ファイル名> [引数名:=値...]
       roslaunch [オプション] <ファイル名> [<ファイル名>...] [引数名:=値...]

<filename> が単一のダッシュ (「-」) の場合、起動 XML は標準入力から読み取られます。

オプション:
  -h、--help         このヘルプ メッセージを表示して終了します
  --files               起動ファイル自体を含む、起動ファイルによってロードされたリスト ファイルを印刷します。 起動ファイル自体を含む、起動ファイルによってロードされたリスト ファイルを印刷します。  
  -- args=NODE_NAME      コマンドラインを印刷します。ノードの引数 ノードのコマンドライン引数を出力します
  --nodes               起動ファイル内のノード名のリストを出力します 起動ファイル内のノード名のリストを出力します
  --find-node=NODE_NAME  ノードが定義されている起動ファイルを検索します。ノードが定義されています
  -c NAME, --child=NAME     子サービス 'NAME' として実行します -u とともに必須 子サービス 'NAME' として実行します。-u
  --localを使用する必要があります               。 リモート ノードを起動しないでください。 リモート ノードを起動しないでください。
  --screen              すべてのローカル ノードを強制的に画面に出力 すべてのローカル ノードを強制的に画面に出力する
  --required            すべてのノードを強制的に必須にする すべてのノードを強制的に必須にする
  --log                 すべてのローカル ノードを強制的にログに出力する すべてのローカル ノードに強制的にログを出力する
  -u URI 、 --server_uri=URI     サーバーの URI。サーバーの -c URI とともに必須。-c
  --run_id=RUN_ID       セッションの run_id とともに使用します。セッションの -c Run_id とともに必須です。-c
  --waitとともに使用します                。起動する前にマスターが開始するのを待ちます。起動する前にメイン プログラムが開始するのを待ちます。
  -p PORT, --port=PORT  マスター ポート。マスターがマスター ポートで起動される場合にのみ有効です。メインサーバーの起動時のみ有効
  --core                コアサービスのみを起動します コアサービスのみを起動します
  --pid=PID_FN         write the roslaunch pid to filename roslaunch pid をファイルに書き込みます
  -v                    詳細な印刷 詳細な印刷
  --no-summary 概要の          印刷を非表示 概要を印刷しません -
  -dump -params         すべての roslaunch ファイルのパラメータを stdout にダンプします 標準出力にダンプします
  -- Skip-log-check      ログフォルダのサイズチェックをスキップ
  --ros-args            この起動ファイルのコマンドライン引数を表示 この起動ファイルのコマンドライン引数を表示
  -- disable-title       端末タイトルの設定を無効にする 端末タイトル設定を無効にする
  -w NUM_WORKERS、--numworkers=NUM_WORKERS は
                        ワーカー スレッドの数をオーバーライドします。コア サービスに対してのみ有効です。ワーカー スレッドの数をオーバーライドします。コアサービスのみに有効です。
  -t TIMEOUT, --timeout=TIMEOUT
                        ソケット接続タイムアウト (秒単位) をオーバーライドします。コア サービスにのみ有効です。
                        ソケット接続タイムアウト (秒単位) をオーバーライドします。コアサービスに対してのみ有効です。
  --master-logger-level=MASTER_LOGGER_LEVEL
                        rosmaster.master ロガー レベルを設定します ('debug'、'info'、'warn'、'error'、'fatal') ログ レベルを設定します

パラメータはたくさんありますが、よく使用されるパラメータはscreenです。

--screen : すべてのローカル ノードを強制的に画面に出力します。これは観察やデバッグに便利です。もちろん、後で簡単に確認できるようにログ ファイルに保存したい場合は、 --log として指定します一般に、デバッグが完了した後は、ターミナル出力をクリーンな状態に保つためにscreenパラメータを削除する必要があります。
roslaunchコマンドを実行すると、まずシステムのrosmaster が実行されているかどうかがチェックされます。すでに開始されている場合は、既存のrosmasterが使用されます。開始されていない場合は、最初にrosmaster が開始され、その後設定が行われます。起動ファイル内の が実行され、事前設定が起動します。なお、起動ファイルはコンパイルする必要がなく、設定後に上記の方法で直接実行できます。
arg:=value :起動ファイルに割り当てる変数がある

1.2、catkin_create_pkg

機能パックの作成に関する情報

catkin_create_pkg -h

使用法: catkin_create_pkg [-h] [--meta] [-s [SYS_DEPS [SYS_DEPS ...]]] [
                         -b [BOOST_COMPS [BOOST_COMPS ...]]] [-V PKG_VERSION]
                         [-D 説明] [- l ライセンス] [-a 作者]
                         [-m メンテナー] [--rosdistro ROSDISTRO]
                         名前 [依存関係 [依存関係 ...]]

新しい catkin パッケージを作成します

位置引数:
  name                  パッケージの
  依存関係の名前          Catkin パッケージの依存関係

オプションの引数:
  -h、--help このヘルプ メッセージを表示して終了します
  --meta                メタパッケージ ファイルを作成します
  -s [SYS_DEPS [SYS_DEPS ...]]、--sys-deps [SYS_DEPS [SYS_DEPS .. .]]
                        システム依存関係 システムの依存関係
  -b [BOOST_COMPS [BOOST_COMPS ...]]、--boost-comps [BOOST_COMPS [BOOST_COMPS ...]]
                        ブースト コンポーネント ブースト コンポーネント
  -V PKG_VERSION、--pkg_version PKG_VERSION  初期パッケージ バージョン 初期パッケージ バージョン
  -D 説明、 --description DESCRIPTION  説明 説明
  -l LICENSE、--license LICENSE  ライセンスの名前、(例: BSD、MIT、GPLv3...) 使用許諾契約
  -a AUTHOR、--author AUTHOR  単一の作成者、複数回使用可能 作者
  -m MAINTAINER、--maintainer MAINTAINER  単一のメンテナ、複数回使用可能 维护者
  --rosdistro ROSDISTRO  ROS ディストリビューション (デフォルト: 環境変数 ROS_DISTRO (定義されている場合)) ROS 発行行バージョン

1.3、ロスパック

機能パックに関する情報を取得する

ロスパック -h

使用法: rospack <コマンド> [オプション] [パッケージ]
  許可されるコマンド:
    help
    cflags-only-I [--deps-only] [パッケージ]
    cflags-only-other [--deps-only] [パッケージ]
    依存 [パッケージ] (エイリアス: deps)
    depend-indent [パッケージ] (エイリアス: deps-indent)
    depend-manifests [パッケージ] (エイリアス: deps-manifests)
    depend-msgsrv [パッケージ] (エイリアス: deps-msgsrv)
    depend-on [パッケージ]
    depend-on1 [パッケージ]
    depend-why --target=<ターゲット> [パッケージ] (エイリアス: deps-why)
    depend1 [パッケージ] (エイリアス: deps1)
    import [--deps-only] --lang=<lang> --attrib=<属性> [パッケージ]
    [パッケージ]
    言語を検索
    libs-only-L [--deps-only] [パッケージ]
    libs-only-l [--deps-only] [パッケージ]
    libs-only-other [--deps-only] [パッケージ]
    リスト
    リスト-重複
    リスト-names
    plugins --attrib=<attrib> [--top=<toppkg>] [パッケージ]
    プロファイル [--length=<長さ>] [--zombie-only]
    rosdep [パッケージ] (エイリアス: rosdeps)
    rosdep0 [ package] (エイリアス: rosdeps0)
    vcs [パッケージ]
    vcs0 [パッケージ]
  追加オプション:
    -q エラー レポートを停止します。

 [package] を省略した場合は、現在の作業ディレクトリ
 が使用されます (package.xml または manifest.xml が含まれている場合)。

パッケージ名が指定されていない場合は、現在の作業ディレクトリを意味します。

1.4、catkin_make

この記事の冒頭で紹介した関数パッケージをワークスペースでコンパイルしますが、これは ROS でパッケージをコンパイルするためのもので、CMake と Make 用のパッケージです。

catkin_make -h

使用法: catkin_make [-h] [-C DIRECTORY] [--source SOURCE] [--build BUILD]
                   [--use-ninja] [--use-nmake] [--use-gmake] [--force- cmake]
                   [--no-color] [--pkg PKG [PKG ...]]
                   [--only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]]
                   [--cmake-args [CMAKE_ARGS [CMAKE_ARGS . ..]]]
                   [--make-args [MAKE_ARGS [MAKE_ARGS ...]]]
                   [--override-build-tool-check]

オプションの引数:
  -h、--help このヘルプ メッセージを表示して終了します。
  -C DIRECTORY、--directory DIRECTORY   ワークスペースのベース パス (デフォルトは '.') ワークスペースのベース パス (デフォルトは '.')')
  --source SOURCE       ソース スペースへのパス (デフォルト 'workspace_base/src')
  --build BUILD         ビルド スペースへのパス (デフォルト 'workspace_base/build') ビルド スペースへのパス (デフォルト 'workspace_base/build') )
  --use-ninja           'make' の代わりに 'ninja' を使用します make の代わりに ninja を使用します
  --use-nmake           'make' の代わりに 'nmake' を使用します make の代わりに nmake を使用します
  --use-gmake           の代わりに 'gmake' を使用します'make' make
  --force-cmakeの代わりに gmake を使用します。         前に実行されていた場合でも 'cmake' を呼び出しますcmake
  --no-color カラー            出力を無効にします (catkin_make および CMake のみ) 禁止用彩色出力(catkin_make と CMake 用)
  --pkg PKG [PKG ...]   特定のパッケージに対してのみ 'make' を呼び出します。ただ特定のパッケージのみを使用します。make
  --only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]                         CATKIN_WHITELIST_PACKAGES 変数を設定して、
                        指定されたパッケージとその依存関係のみをホワイトリストに登録します                         。この変数は CMakeCache.txt に保存され                         、明示的にクリアしない限り CMake 呼び出し間で保持されます                         。例: catkin_make




                        -DCATKIN_WHITELIST_PACKAGES=""。
    CATKIN_WHITELIST_PACKAGES 変数を設定して、指定したパッケージとその依存パッケージをホワイトリストに登録します。この変数は CMakeCache.txt に保存され、明示的にクリアしない限り CMake 呼び出し間で保持されます。
  --cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]]
                        CMake に渡される任意の引数。後続のオプションをすべて収集するため、他の引数の後に渡す必要があります。CMake
に渡される任意の引数。
  --make-args [MAKE_ARGS [MAKE_ARGS ...]]
                        make に渡される任意の引数。後続のすべてのオプションを収集するため、他の引数の後に渡す必要があります 
                        これは --cmake-args と組み合わせて使用​​する場合にのみ必要で、それ以外の場合は、同じワークスペースで異なるビルド ツールを使用することによる失敗をオーバーライドするために
  --override-build-tool-check を使用するために不明な引数がすべて渡されます。
同じワークスペースで異なるビルド ツールを使用することが原因で発生します。

1.5、ロスデップ

機能パッケージの依存パッケージを自動的にインストールする

ロスデップ -h

 

使用法: rosdep [オプション] <コマンド> <引数>

コマンド:

rosdep check <stacks-and-packages>...
  パッケージの依存関係が満たされているかどうかを確認します。

rosdep install <stacks-and-packages>...
  指定されたパッケージの依存関係をダウンロードしてインストールします。

rosdep db は
  依存関係データベースを生成し、コンソールに出力します。

rosdep init
  /etc/ros/rosdep の rosdep ソースを初期化します。sudo が必要な場合があります。/etc/ross/rosdep の依存関係ソースを初期化します。sudo 権限が必要な場合があります

rosdep key <stacks-and-packages>...
  パッケージが依存する rosdep キーをリストします。 パッケージが依存する rosdep キーをリストします。

rosdep 解決<rosdeps>
  解決 <rosdeps> をシステム依存関係に解決 <rosdeps> をシステム依存関係に解決

rosdep update
  rosdep ソースに基づいてローカル rosdep データベースを更新します。 rosdep ソースに従ってローカル rosdep データベースを更新します。

rosdep what-needs <rosdeps>...
  (少なくとも 1 つ) <rosdeps> で rosdep を宣言するパッケージのリストを出力します (少なくとも 1 つ) <rosdeps> で rosdep を宣言するパッケージのリストを出力します

rosdep where-dependent <rosdeps>...
  (少なくとも 1 つ) <rosdeps> で rosdep を宣言する yaml ファイルのリストを出力します。 (少なくとも 1 つ) <rosdeps> で rosdep を宣言する yaml ファイルのリストを出力します。

 1.5.1. 権限コマンド

rosdep fix-permissions
  ユーザーの ros ホーム ディレクトリの権限を再帰的に変更します。 ユーザーの ros ホーム ディレクトリの権限を再帰的に変更します。
  sudo が必要な場合があります。sudo で誤って「rosdep update」を呼び出した後に権限を修正するのに役立ちます。

権限が拒否された場合は、次のコマンドを使用できます:
sudo rosdep fix-permissions
rosdep update ( sudo が必要な場合があります)

1.5.2、オプション

オプション:
  -h、--help このヘルプ メッセージを表示して終了します
  --os=OS_NAME:OS_VERSION
                        OS 名とバージョンを上書き (コロン区切り)、例: ubuntu:lucid OS 名とバージョンを上書き (コロン区切り)
  -c SOURCES_CACHE_DIR、 --sources-cache-dir=SOURCES_CACHE_DIR
                        /home/jetson/.ros/rosdep/sources.cache
  -v をオーバーライドします。 --verbose        詳細表示 詳細表示
  --version             rosdep バージョンのみを出力して終了します。 rosdep バージョンのみを出力します。その後終了します
  --all-versions        rosdep のバージョンとインストーラーのバージョンを出力し、終了します
  --reinstall           (再) すべての依存関係をインストールします (既にインストールされている場合でも)
  -y 、 --default-yes
  -s, --simulate     インストールをシミュレートする        インストールをシミュレートする
  -r                    エラーにもかかわらずインストールを続行する エラーにもかかわらずインストールを続行する。
  -q                    Quiet. エラー以外の出力を抑制します. サイレント インストール。エラー以外の出力を抑制します。
  -a, --all             すべてのパッケージを選択します
  -n                    暗黙的/再帰的な依存関係を考慮しません。'keys'、'check'、および 'install' コマンドでのみ有効です。
    暗黙的/再帰的な依存関係は考慮しません。「keys」、「check」、「install」コマンドにのみ有効です。
  -i、--ignore-packages-from-source、--ignore-src
                        「check」、「install」、および「keys」動詞に影響します。指定した場合、rosdep は、ROS_PACKAGE_PATH、AMENT_PREFIX_PATH、または --from-paths オプションで指定されたディレクトリのいずれかにある catkin または ament パッケージであると判明したキーを無視します。このパラメータを指定した場合、rosdeep に catkin またはその他の経路に到達する包含
  --skip-keys=SKIP_KEYS
                        「check」動詞と「install」動詞に影響します。指定された rosdep キーは無視されます。つまり、解決されず、インストールされません。オプションは複数回指定できます。
                        rosdep キーのスペースで区切られたリストは、文字列として渡すこともできます。rosdep キーをローカルで無視するためのより永続的な解決策は、パッケージの空のリストを含むローカル rosdep ルールを作成することです (/etc/ros/rosdep/sources に含めます)。 rosdep キーをローカルで無視するためのより永続的な解決策は、デフォルトで空のパッケージ リストを使用してローカル rosdep ルール (/etc/ross/rosdep/sources.list.d に含まれる) を作成することです。値の前
  --filter-for-installers=FILTER_FOR_INSTALLERS
                        'db' 動詞に影響します。指定された場合、'db' コマンドの出力はフィルタリングされ、指定されたリストにインストーラーが含まれるパッケージのみがリストされます。オプションは複数指定できます。スペースで区切られたインストーラーのリストを文字列として渡すこともできます。例:
                        `--filter-for-installers "apt pip"` フィルターされたパッケージのみをインストールします
  --from-paths          「check」、「keys」、「install」動詞に影響します。指定した場合、これらの動詞への引数は検索対象のパスとみなされ、そこにあるすべての catkin パッケージに作用します。 --rosdistro
  =ROS_DISTRO
                        使用する ROS ディストリビューションを明示的に設定し、ROS_DISTRO 環境を使用して ROS ディストリビューションを検出する通常の方法をオーバーライドします。変数。「update」動詞と一緒に使用すると、指定されたディストリビューションのみが更新されます。指定された ros の発行バージョンを表示
  --as-root=INSTALLER_KEY:<bool>
                        特定のインストーラーに sudo を使用するかどうかをオーバーライドします (例: '-as-root pip:false' または '--as-root "pip:no homebrew) :はい"'。複数指定可能です。
  --include-eol-distros
                        「update」動詞に影響します。指定されたサポート終了ディストリビューションもフェッチされる場合。
  -t DEPENDENCY_TYPES, --dependency-types=DEPENDENCY_TYPES
                        インストールする依存関係のタイプは複数回指定できます。 set(['exec' から選択してください) 、'doc'、'build_export'、'buildtool'、'test'、'build'、'buildtool_export'])。デフォルト: doc を除くすべて。 

1.6、ロズラン

機能パッケージ内の実行可能ファイル
rosrun -hを実行します。

使用法: rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS]
  rosrun は PACKAGE を見つけて、PACKAGE ツリー内で EXECUTABLE という名前の実行可能ファイルを見つけようとします。見つかった場合は、ARGS を使用して実行します。

rosrun はパッケージを見つけて、パッケージ ツリー内で実行可能ファイルを見つけようとし、見つかった場合は引数に従って実行します。

最初にノード マネージャ (マスター) を起動する必要があります。マスターはシステム内の多くのプロセスを管理するために使用されます。各ノードが起動したら、ノード間の通信を管理するためにマスターに登録する必要があります。マスターが起動したら、マスターを通じて各ノードを登録します。Ubuntu ターミナルでコマンドroscoreを入力します。このroscore は各 ROS に必要で、ノード間の接続情報を提供するために使用されます。つまり、ノードが起動すると、ノードはroscoreに接続し、公開するノードを登録します。新しいノードが表示されると、roscore は、ポイントツーポイント接続を確立するために同じメッセージ トピックをパブリッシュおよびサブスクライブする他のノードに必要な情報をそのノードに提供します。roscoreがない場合、ノードはお互いを見つけることができず、相互に通信できません。rosrunメソッドは一度に 1 つのノードのみを実行できます。次のステップは、オーダーの実際の戦闘です。

2. デモ例

2.1. シングルタートルシミュレータ

まずノード マネージャーを起動し、コマンドroscore
を入力します。 以下は、起動に関連する情報です。ログ ファイル サイズを確認し、サービス アドレスとポート、バージョン番号、概要などを表示します。Ctrl+ C を押して、すべての ROS ノードを終了します。

... /home/jetson/.ros/log/fd65134c-d010-11ec-95c6-0013eff86fe1/roslaunch-jetson-desktop-10638.log にログを記録しています
ディスク使用量のログ ディレクトリをチェックしています。これは時間がかかる場合があります。
Ctrl-C を押して、
ログ ファイルのディスク使用量の確認の完了を中断します。使用量は 1GB 未満です。

roslaunch サーバー http://jetson-desktop:33239/
ros_comm バージョン 1.14.11を開始しました


概要
========

パラメータ
 * /rosdistro: メロディック
 * /rosversion: 1.14.11

ノード

新しいマスタープロセスの自動開始
[マスター]: pid [10695] で開始
ROS_MASTER_URI=http://jetson-desktop:11311/

/run_id を fd65134c-d010-11ec-95c6-0013eff86fe1 に設定
プロセス [rosout-1]: pid [10727] で開始されました
コア サービス [/rosout] を開始しました

別のターミナルを開いてタートルシミュレータノードを起動します

ロズラン タートルシム Turtlesim_node

[ INFO] [1652153768.669399182]: ノード名 /turtlesim で Turtlesim を開始します
[ INFO] [1652153768.694629755]: x=[5.544445]、y=[5.544445]、theta=[0.000000] で Turtle1 をスポーン中 QXcbConnection: XCBエラー:
148 (不明)、シーケンス: 173、リソース ID: 0、メジャー コード: 140 (不明)、マイナー コード: 20

最後に、再度ターミナルを開き、タートル キーボード コントローラー ノードを起動します。
rosrun Turtlesim Turtle_teleop_key
このキーボード コントローラー ノードのコマンドの下で、上下左右の矢印キーを使用してタートルの動きを制御できます。以下に示すように: 

つまり、今回のタートル移動の操作では、3 つの端末を開き、まずノード管理を開始し、次に必要なノードをそれぞれ起動しました。どのトピックが開始されているかを確認するには、コマンドrostopic listを入力します。

/rosout
/rosout_agg
/turtle1/cmd_vel /turtle1/
color_sensor /
turtle1/pose

rqt_graphコマンドを入力して ROS グラフを表示すること もできます。

2.2. 二匹のカメ 

キーボード操作のタートルで移動するタートルの例を見てみましょう。
機能パッケージをインストールします: sudo apt install ros-melodic-turtle-tf

次のエラーが発生する可能性があります。

「packages.ros.org」を解決できませんでした
E: http://packages.ros.org/ros/ubuntu/pool/main/r/ros-melodic-turtle-tf/ros-melodic-turtle-tf_0 の取得に失敗しました.2.2-0bionic.20210922.040438_arm64.deb 'packages.ros.org' を解決できませんでした
E: いくつかのアーカイブを取得できません。apt-get update を実行するか、--fix-missing を試してみてください。

次のリスト ページを直接確認します: http://packages.ros.org/ros/ubuntu/pool/main/r/ros-melodic-turtle-tf/では、
上記のdebファイルがないことがわかります。その他マニュアルダウンロード 大丈夫です。もちろん、このバージョンで問題が発生した場合、それはネットワーク タイムアウトやその他の問題が原因であり、インターネットをサーフィンしたり手動でダウンロードしたりすることで科学的に対処できます。
国産のミラーソースと交換することもできます。

cd /etc/apt
vim ソース.リスト

たとえば、Alibaba Cloud のオープンソース ミラー サイトは次のとおりです。

deb http://mirrors.aliyun.com/ubuntu/ フォーカル メイン制限ユニバース マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ フォーカル メイン制限ユニバース マルチバース
deb http://mirrors.aliyun.com/ubuntu / focus-security メイン制限付きユニバース マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ focus-security メイン制限付きユニバース マルチバース
deb http://mirrors.aliyun.com/ubuntu/ focus-updates メイン制限付きユニバース マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ 焦点更新のメイン制限付きユニバース マルチバース
deb http://mirrors.aliyun.com/ubuntu/ 焦点提案によるメイン制限付きユニバース マルチバース
deb-src http://mirrors .aliyun.com/ubuntu/ 焦点が提案したメインの制限された宇宙 マルチバース
deb http://mirrors.aliyun.com/ubuntu/ focus-backports メインの制限されたユニバース マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ focus-backports メインの制限されたユニバース マルチバース

ここでは清華画像を使用しています。

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic メイン マルチバース制限ユニバース
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security メイン マルチバース制限ユニバース
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates メイン マルチバース制限付きユニバース
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports メイン マルチバース制限付きユニバース
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic メイン マルチバース制限付きユニバース
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic -security メイン マルチバース制限ユニバース
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates メイン マルチバース制限ユニバース
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports メインのマルチバース制限ユニバース

最後に以下を実行します。

ローカル ソフトウェア リストを更新します: sudo apt-get update
ソフトウェア アップデート: sudo apt-get upgrade

roslaunchコマンドで.launchファイルを実行してタートルを起動すると、関連情報が表示されます。

roslaunch Turtle_tf Turtle_tf_demo.launch

たとえば、要約は次のとおりです。

概要
========

パラメータ
 * /rosdistro: melodic
 * /rosversion: 1.14.11
 * /scale_angular: 2.0
 * /scale_linear: 2.0
 * /turtle1_tf_broadcaster/turtle: Turtle1
 * /turtle2_tf_broadcaster/turtle: Turtle2

ノード
  /
    シム (turtlesim/turtlesim_node)
    テレオペ (turtlesim/turtle_teleop_key)
    Turtle1_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    Turtle2_tf_broadcaster (turtle_tf/turtle_tf_broadcaster.py)
    Turtle_pointer (turtle_tf/turtle_tf_listener.py)

ROS_MASTER_URI=http://localhost:11311

process[sim-1]: pid [30907] で開始されました
process[teleop-2]: pid [30908] で開始されました
process[turtle1_tf_broadcaster-3]: pid [30909] で開始されました
process[turtle2_tf_broadcaster-4]: pid [で開始されました30917]
プロセス[turtle_pointer-5]: pid で開始されました [30920]

複数のノードが起動していることと、各プログラムが起動しているスレッドIDが表示されていることがわかります。

rosrunでノードを起動し、キーボードを操作してタートルを制御しますrosrun
Turtlesim Turtle_teleop_key

以下の図に示すように、キーボードによって制御されるタートルがあり、別のタートルが制御されたタートルに従います。

3、起動ファイル 

起動ファイルについてもっと学びましょう。上記の起動ファイルを使用してタートルを起動しましょう。まず見つけてみましょう:
sudo find / -name Turtle_tf_demo.launch
見つけたら、その中に何が入っているか確認しましょう
cat /opt/ros/melodic/共有/turtle_tf/launch/turtle_tf_demo.launch

<launch>

  <!-- Turtlesim Node-->
  <node pkg="turtlesim" type="turtlesim_node" name="sim"/>

  <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
  <!-- Axes -->
  <param name="scale_linear" value="2" type="double"/>
  <param name="scale_angular" value="2" type="double"/>

  <node name="turtle1_tf_broadcaster" pkg="turtle_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
    <param name="turtle" type="string" value="turtle1" />
  </node>
  <node name="turtle2_tf_broadcaster" pkg="turtle_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
    <param name="turtle" type="string" value="turtle2" />
  </node>
  <node name="turtle_pointer" pkg="turtle_tf" type="turtle_tf_listener.py" respawn="false" output="screen" >
  </node>

</launch>

起動ファイルはXML形式であることがわかり、turtle 1とturtle 2の例から、起動するパッケージの名前と実行可能プログラムの名前がノードnodeに対応していることが分かります。
最初のタートルの例: pkg="turtlesim" type="turtlesim_node"、つまりスタートアップ コード: rosrun Turtlesim Turtlesim_node
2 番目のタートルの例: pkg="turtle_tf" type="turtle_tf_broadcaster.py"、つまりスタートアップ コード: roslaunch Turtle_tf Turtle_tf_demo.launch の
キーボード操作は同じです: rosrun Turtlesim Turtle_teleop_keyでは、なぜ起動
ファイルが必要なのでしょうか完成したロボットには一般に多くのノード プログラムが含まれており、同時に実行して連携する必要があるため、ノードを 1 つずつ起動するのはより面倒なので、この設定ファイルを使用してすべてのノードを一度に起動できます。はい、それほど簡単ではありません。次に、このファイルのパラメータの説明をいくつか見てみましょう。

<launch>                  <!--根标签开始-->
<node>                    <!--需要启动的node及其参数-->
<remap>                  <!--设定topic映射-->
<include>                <!--包含其他launch-->

<arg>                       <!--定义变量-->
<param>                 <!--定义全局变量-->
<rosparam>            <!--加载yaml文件中的参数到参数服务器-->

<group>                 <!--设定分组-->
<machine>              <!--指定运行的机器-->
<env-loader>          <!--设置环境变量-->
</launch>               <!--根标签结束-->

3.1、<ノード>

 ノードタグは起動ファイルの中核部分であり、次のように定義されます。

<launch>
    <node pkg="包名1" type="可执行文件1" name="节点名1"/>
    <node pkg="包名2" type="可执行文件2" name="节点名2"></node>
    ...
</launch>

このうち、型がPythonで記述されている場合は.pyファイルであり、C++で記述されている場合はコンパイルされた実行可能ファイルの名前です。この起動ファイルは、その中のノードを起動するために起動するものではないことに注意してください。これら 3 つの必須パラメータに加えて、いくつかのオプションのパラメータがあります。

<launch>
    <node pkg="" type="" name="" respawn="true" required="true" launch-prefix="xterm -e" output="screen" ns="namespace" />
</launch>

respawn:ノードがシャットダウンされた場合、自動的に再起動するかどうか
required:ノードがシャットダウンされた場合、他のすべてのノードをシャットダウンするかどうか
launch-prefix:新しいウィンドウを開いて実行するかどうか 出力
:デフォルトはログに保存されますファイルを開くと、画面に表示するように設定できます。
ns:ノードを異なる名前空間に分類します。つまり、 nsで指定されたプレフィックスをノード名の前に追加しますこの種の操作を実現するには、ノードソース ファイルでノード名トピック名を定義する、相対名を使用する必要があります。つまり、記号 / を省略します。

3.1.1. 計算グラフソース

ROSにおいて計算グラフソースとは、トピック、ノード、サービス、パラメータの総称を指します。各計算グラフ ソースは、計算グラフ ソース名と呼ばれる短い文字列によって識別されます。計算グラフソースの名前は以下のとおりです。
基本名:例:トピック
グローバル名:「/」で始まる計算グラフソースの名前。例: /A/トピック
相対名:名前の先頭に「/」を除いた計算グラフソース名。例: A/トピック
プライベート名:チルダ記号「~」で始まる計算グラフのソース名。たとえば、~トピック
匿名名:名前のない計算グラフ ソース。
パブリッシュおよびサブスクライブする場合は次のようなコードを記述します。

ros::init(argc, argv, "publish_node");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<std_msgs::string>("topic",1000);

3.2、<リマップ>

ノードのパラメーター プロパティを設定せずに、名前の再マッピング パラメーターを ROS ノードに渡します。
トピックは、 パブリッシング と サブスクライブ に分かれています
。 パブリッシュ トピック:

<node pkg="pub_node" type="pub_node" name="pub_node">
    <remap from="/pub_topic" to="/new_topic" />
</node>

ここでは、pub_nodeノードによって公開されたトピック/pub_topicが/new_topicにマップされています

トピックを購読する:

<node pkg="sub_node" type="sub_node" name="sub_node">
    <remap from="/sub_topic" to="/turtle" />
</node>

ここでは、他の人のトピックをサブスクライブするsub_topic名を示します。 /turtle はsub_nodeノードにマップされます。つまり、他の人が公開したトピックは、あなたがサブスクライブするトピックにマップされます。

3.3、<インクルード>

別の起動ファイルを含めます。これは起動ファイルのネストに相当しファイルパラメータはフル パスとして指定できます。

<include file="path-to-launch-file" />

もちろん、移植性を高めるために、代わりに find コマンドを使用することもできます。

<include file="$(find package-name)/launch-file-name" />

この利点は、メイン コントローラーを交換した場合でも、同じパッケージがインストールされている限り、対応するパスを見つけることができることです。場合によっては、別の起動によって導入されたノードに統一した名前を付ける必要がある場合や、/my/gps、/my/lidar、/my/imu などの 同様の特性を持つノード名には、見つけやすいように統一されたプレフィックスが付いている必要があります。達成する名前空間ns属性を設定できる場合、コマンドは次のとおりです。

<include file="$(find package-name)/launch-file-name " ns="my" /> 

3.4、<引数>

パラメータは再利用可能、一般的な 3 つの記述方法

<arg name="foo">                          <!--只定义,不赋值-->
<arg name="foo" default="1">              <!--默认值-->
<arg name="foo" value="1">                <!--固定值-->

その他の一般的な割り当て方法:
コマンド ライン割り当て
roslaunch package_name xxx.launch arg1:=v1 arg2:=v2

変数置換

1. $(find pkg):例: $(find rospy)/manifest.xml可能であれば、このパッケージベースのパス設定を強くお勧めします。
2. $(arg arg_name):最初にデフォルト値を設定し、存在する場合はデフォルト値を設定します。追加の割り当てはなく、このデフォルト値を使用します

<arg name="gui" default="true" />
<!-- 如果没有额外的赋值,就用这个默认值 -->
<param name="use_gui" value="$(arg gui)"/>

コマンドライン割り当てを使用することもできます

<node pkg="包名" type="可执行文件" name="节点名" args="$(arg a) $(arg b)" />

このようにして、起動ファイルの起動時に引数を割り当てることができます:
roslaunch パッケージ名 file_name.launch a:=1 b:=2

3.5、<パラメータ>

argとは異なり、ここでのparam は共有されており、その定義も同様です

<param name="publish_frequency" type="double" value="10.0" />

ここでの値は、上記に加えて、ファイルから取得することもできます。

<param name="参数名" textfile="$(find pkg)/path/file"/>
<param name="参数名" command="$(find pkg)/exe '$(find pkg)/arg.txt'"/>
<param name="参数名" type="yaml" command="cat '$(find pkg)/*.yaml'"/>

グローバル スコープでの定義に加えて、ノードノードでも定義できます

<node name="node1" pkg="pkg1" type="exe1">
    <param name="param1" value="False"/>
 </node>

コマンドrosparam listですべてのパラメータを表示できます。
すると、上記は次のように表示されます。

/publish_frequency
/node1/param1 # 名前空間プレフィックスがここに自動的に追加されます。名前空間は名前の前に追加されますが、依然としてグローバル スコープ内にあることに注意してください。

3.6、<ロスパラム>

前のパラメータはvalue、textfile、および commandを通じて取得され、単一のパラメータの内容が返されます。Rosparamバッチで操作でき、パラメータを設定するためのコマンド ( dump 、 deleteなど)も含まれてい
ます。使用量の
ロード: YAML からファイルにパラメータのバッチをロードします:

<rosparam command="load" file="$(find rosparam)/example.yaml" />

削除:パラメータを削除します

<rosparam command="delete" param="my_param" />

代入演算

<rosparam param="my_param">[1,2,3,4]</rosparam>

大丈夫です

<rosparam>
a: 1
b: 2
</rosparam>

同様に、このロスパラムもノードに配置することができます。

3.7、<グループ>

すべてのノードを同じ特定の名前空間内に置く、同じトピックを再マップするなど、複数のノードで同じ設定を実行する場合は、このグループのグループ化を使用できます。

<group ns="rosbot">
    <remap from="chatter" to="talker"/>       # 对该组中后面的节点都有效
    <node ... />
    <node ... >
        <remap from="chatter" to="talker1"/>  # 还可以对单个节点重新设置
    </node>
</group>

これらの起動ノードの観点から見ると、ROS の設計は非常に疎結合であり、共同コラボレーションに非常に優れた設計であり、単一ノードのクラッシュは他のノードに影響を与えないため、デバッグやメンテナンスにとって非常に重要です。 。

おすすめ

転載: blog.csdn.net/weixin_41896770/article/details/132207097