[ROS] ROS のノードにデータを取得させる方法 III -- パラメータサーバー通信と ros 共通ツールの説明の紹介

ここに画像の説明を挿入

こんにちは、プペウアです。普段はC言語、C++、データ構造アルゴリズムを中心に更新しています...興味のある方はフォローしてください!がっかりしませんよ。


ここに画像の説明を挿入

0. パラメータサーバーの概念

以前の通信モデルと比較して、パラメータ サーバーは最も単純です。従来モデルでは、ROSMASTERが両者を繋ぐ橋渡し役を担っていました。
ここに画像の説明を挿入
パラメータサーバーでは、ROSMASTERはメッセージを保存するコンテナとなりユーザーは追加、削除、確認、変更の操作を自分で完了できます

単純な非バイナリデータを保存することのみを目的としているため、高パフォーマンスの動作が必要な場合は、他の通信方式を推奨します。

コンテナに格納できるパラメータの種類:

  1. 32ビット整数
  2. ブール値
  3. 文字列
  4. ダブルス
  5. ISO8601の日付
  6. リスト
  7. Base64でエンコードされたバイナリデータ
  8. 辞書

1. パラメータ サーバーはパラメータを追加/変更します。

  1. ノードを初期化する
  2. set_param関数を使用して追加/変更します

set_param は hash に似ています。パラメータ サーバーにそのような値が存在しない場合は値が増加し、存在する場合は最新の値に変更されます。

import rospy

rospy.init_node("param")

#设置整形
rospy.set_param("p_int",10)

#设置浮点型
rospy.set_param("p_double",3.14)

#设置bool值
rospy.set_param("p_bool",True)

#设置string
rospy.set_param("p_string","hello python")

#设置List
rospy.set_param("p_list",["hello","haha","xixi"])

#设置字典
rospy.set_param("p_dict",{
    
    "name":"hulu","age":8})

ここに画像の説明を挿入

2. パラメータサーバーがパラメータを検索します。

一般的に使用されるのは次の関数です。

  1. get_param(key,value) は、
    キーが存在する場合は対応する値を返し、キー

    存在しない場合はデフォルト値を返します。 システム メモリにおける高速テーブルの役割
    radius2=rospy.get_param_cached("radius_p",0.5)
    
    radius=rospy.get_param("radius_p",0.5)
    
  2. get_param_names() は、
    現在のパラメータ リスト内のすべてのパラメータ名を取得し、返します。
    names=rospy.get_param_names()
    
    for name in names:
    
     print(name)
    
  3. has_param(key) は、
    パラメータ リストにパラメータがあるかどうかを判断し、
    Bool 値を返します。
    flag1=rospy.has_param("radius_p")
    
     if flag1:
    
         print("存在")
    
     else :
    
         print("不存在")
    
  4. search_param(key)
    このメッセージがあるかどうかを確認し、ない場合は None を返し、ある場合はこのキーを返します
    key=rospy.search_param("radius_p")
    
    print(key)
    

3. パラメータ サーバーはパラメータを削除します。

  1. delete_param(key)
    指定されたキーを削除します

これは比較的単純で、使用法を示しません。また、次のような実践的なプロジェクトが行われます。

4. 共通コマンド

前回の構成で使用したトピック通信とサービス通信が使用されます。

ロボットの実行中にノードとメッセージ キャリア間の関係を動的に表示するには、次のコマンドを使用します

  • rosnode : ノード
  • ロストピック: トピック
  • rosservice : サービス
  • rosmsg : メッセージメッセージ
  • rossrv : srv メッセージ
  • rosparam : 動作パラメータサーバー

4.1 ロスノード

まず、以前に構成したカスタム msg のサブ ノードとパブ ノードを開始しましょう。具体的な構成については、この記事のトピック通信ケースを参照してください。

rosrun lesson2 demo02_pub.py
rosrun lesson2 demo02_sub.py

ここに画像の説明を挿入

rosnodeを直接使用してパラメータリストを表示します
ここに画像の説明を挿入

  1. rosnode ping はノードへの接続ステータスをテストします

    rosnode ping /person_pub
    

    ここで /pub_person はメッセージを送信するノードであり、単なるデモンストレーションです
    ここに画像の説明を挿入

  2. rosnode list はアクティブなノードをリストします。

    rosnode list
    

    このコマンドを使用して、現在アクティブなノードを表示します
    ここに画像の説明を挿入

  3. rosnode infoノード情報を出力する

    ronode info /person_pub
    ronode info /person_sub
    

    以下を含む、送信ノードと受信ノードの情報がここに出力されます

    1. ノード名
    2. トピックを使用する
    3. 受信者/送信者

    合理的に使用すると、ノード間の関係を明確にしやすくなります。

ここに画像の説明を挿入

  1. rosnode マシンは、指定されたデバイス上のノードをリストします。
  2. rosnode kill はノードを強制終了します
    rosnode kill /sub_person
    
    サブスクリプション ノードを強制終了しました
  3. rosnode クリーンアップは、接続できないノードをクリアします
    。ctrl+c を押すと、一部のノードが使用できなくなることがありますが、それらはまだリスト内にあります。このとき、このコマンドを使用してノードを更新できます。

4.2 ロストピック

まず、上で使用した 2 つのノードを起動し
、ターミナルに rostopic と直接入力して、利用可能なすべてのコマンドを表示します。
ここに画像の説明を挿入

  1. rostopic リストには、現在使用されているすべてのトピックが表示されます

    rostopic list
    

    ここに画像の説明を挿入

    たとえば、ここで使用されているトピックは /che です。

  2. rostopic echo は受信機として機能し、トピック情報を画面に表示できます。

    rostopic echo topic
    

    ここに画像の説明を挿入

    たとえば、ここでは発行者の情報が正しいかどうかを確認できます

  3. rostopic info/typeの 2 つの関数は同じで、トピック通信のメッセージ タイプを表示します。info にはタイプ type が含まれます。

    rostopic info topic
    

    たとえば、ここでは Person msg メッセージ タイプが使用されています。

  4. rostopic find はメッセージ タイプを使用してトピックを検索します

    rostopic find lesson2/Person
    

    ここに画像の説明を挿入

    たとえば、ここで、lesson2/person のメッセージ タイプを見つけるというトピックは何ですか?

  5. rostopic pub がトピックにメッセージを公開します

    rostopic pub topic
    

    たとえば、ここでサブスクリプション ノードに情報を公開します。

4.3 ロスメッセージ

rosmsg は、ROS メッセージ タイプに関する情報を表示するために使用されるコマンド ライン ツールです。これ
も上記と同じで、rosmsg を直接入力すると、使用可能なコマンドが表示されます。

  1. rosmsg list はすべてのメッセージ タイプをリストします。
    ここに画像の説明を挿入

  2. rosmsg show / info は、現在のメッセージ タイプに含まれる特定のタイプをリストします。

    rosmsg show msg
    

    ここに画像の説明を挿入


  3. rosmsg パッケージは、パッケージ内のすべてのメッセージをリストします。

    rosmsg package pack
    

    ここに画像の説明を挿入

    Turtlesim のすべてのメッセージ タイプをリストする

  4. rosmsg パッケージは、メッセージを含むパッケージをリストします。

    rosmsg package pack
    

    Turtlesim/Pose メッセージ タイプを含むすべてのパッケージをリストします。
    ここに画像の説明を挿入

4.4 ロスサービス

関連するサービス情報をクエリするには、
まず、以前に構成したカスタム Srv サーバーとクライアント ノードを起動します。具体的な構成については、この記事を参照してください。

rosrun lesson3_srv demo01_client.py
rosrun lesson3_srv demo01_server.py

ターミナルに「rosservice」と入力してパラメータリストを表示することもできます。
ここに画像の説明を挿入

  1. rosservice list はパラメータサービスのリストをリストします。
    ここに画像の説明を挿入

  2. rosservice 呼び出しは、ここでサービスを呼び出して
    /sum2 タブを呼び出し、完了して 2 つのパラメーターを渡します

    rosservice call /sum2
    

    ここに画像の説明を挿入

  3. rosservice args は、srv メッセージの特定のパラメータを表示します

    rosservice args /sum2
    

    ここに画像の説明を挿入

残りの使い方は上記と同じです

4.5 ロスアールブイ

rosmsg と同様に、特定のタイプの Srv もチェックします。
ここに画像の説明を挿入

4.6 ロスパラム

検証のために最初にタートルを起動しましょう
ここに画像の説明を挿入

rosrun turtlesim turtlesim_node
  1. rosparam listパラメータリストをリストします。
    ここに画像の説明を挿入

  2. rosparam set は特定のパラメータ値を設定します

    rosparam set 参数类型
    

    画像の説明を追加してください

  3. rosparam get特定のパラメータ値を取得します

  4. rosparam deleteパラメータの削除

  5. rosparamloadはパラメータをディスクにロードします

  6. rosparamダンプはディスクからパラメータをロードします

ここまでで、パラメータサーバー通信とros共通ツールの説明は終わりです。

おすすめ

転載: blog.csdn.net/qq_62839589/article/details/130650185
おすすめ