二つのレコード4--トピックベースの通信ノードを書くことを学ぶROS

ゼロ序文

ノード間のROSのトピックを介して互いに通信することです。キー入力ノード問題トピックに関するメッセージ、およびトピックノードBがメッセージを受信するようにサブスクライブされています。

ROSウィキの説明によると、我々は簡単にメッセージやトピック、通信メカニズムのトピック間の関係を知ることができ、メッセージは単なるデータ構造のトピックです。
ROSはニュースや、詳細な使用方法は、ウィキROS上で閲覧することができますどのようなツールから視覚的に検索のコマンドラインと使用上のトピックのコマンドを表示することができますROSのトピックを理解し
、私たちがメッセージを作成するに基づいて、あなたはそれがより多くのようであることがわかりますC言語の構造体。

A.は、メッセージを作成します。

私たちは、新しいパッケージの機能を作成します。

catkin_create_pkg top roscpp std_msgs message_generation message_runtime

ROSウィキの本来の言葉を見てください:

次は、重要なステップがあります:私たちは、MSGファイルはC ++、Pythonや他の言語のソースコードに変換されていることを確認する:
:ビューのpackage.xmlは、必ずそれは二つの文について含ま作る
<build_depend> message_generation </ build_depend>
<exec_depend > message_runtime </ exec_depend>
そうでない場合は、それに追加。構築されたとき、我々は唯一の「message_generation」する必要があることに注意してください。しかし、実行時に、我々は唯一の「message_runtime」にする必要があります。

ここに画像を挿入説明ああ、私の神、私たちのために作成されたパッケージを作成するとき。
そして、私たちのメッセージを作成することです:
ここに画像を挿入説明
私たちは、その後、変更されCMakeList.txt、我々は、以下のコマンドを変更していることを保証するために:

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)

コメントを解除し、変更します。

add_message_files(
  FILES
  Name.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

message_runtimeなしfind_package、唯一message_generationを確認し、それ以外の場合はエラーになります。
コンパイルした後、我々は成功を見て:
ここに画像を挿入説明

送信及び受信ノードの集合のII。製造

あなたは平均比コードを話すことはありません何をすべきか、私は後にして説明します

1.送信ノード

書き込み書き込みトップ/ srcの内側puber.cpp

#include "ros/ros.h"
#include "top/Name.h"
#include "sstream"
int main(int argc, char **argv)
{
  std::stringstream ss;
  top::Name msg;
  ros::init(argc, argv, "publisher");
  ros::NodeHandle h;
  ros::Publisher puber = h.advertise<top::Name>("Name_Info", 10);
  ros::Rate loop_rate(1);
  ss << "A B";
  while (ros::ok())
  {
    
    ss >> msg.first_name;
    ss >> msg.last_name;
    ROS_INFO("I Send [%s %s]", msg.first_name.c_str(), msg.last_name.c_str());
    puber.publish(msg);
  }
  return 0;
}

2.受信ノード

書き込みsuber.cpp

#include "ros/ros.h"
#include "top/Name.h"

void infoCallback(const top::Name::ConstPtr& msg)
{
  ROS_INFO("Name Changed [%s %s]", msg->last_name.c_str(), msg->first_name.c_str());
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "suber");
  ros::NodeHandle n;
  ros::Subscriber sub = n.subscribe("Name_Info", 1000, infoCallback);
  ros::spin();
  return 0;
}


3.変更CMakeList.txt

加えて、メッセージを作成するときに、我々はCMakeListが使用されるメッセージのトピックに構成修飾は、追加、今ノード構成です。

add_executable(puber src/puber.cpp)
target_link_libraries(puber ${catkin_LIBRARIES})
add_executable(suber src/suber.cpp)
target_link_libraries(suber ${catkin_LIBRARIES})

4.コンパイルして実行

roscore
rosrun top puber
rosrun top suber
rqt_graph

ここに画像を挿入説明
ナイス!ゲット!

公開された63元の記事 ウォン称賛38 ビュー20000 +

おすすめ

転載: blog.csdn.net/u011017694/article/details/105134499