{"id":9364,"date":"2023-04-23T15:52:26","date_gmt":"2023-04-23T15:52:26","guid":{"rendered":"https:\/\/www.fambach.net\/?p=9364"},"modified":"2023-04-23T15:52:28","modified_gmt":"2023-04-23T15:52:28","slug":"ros-einfachen-publisher-subscriber-in-c-erstellen","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/ros-einfachen-publisher-subscriber-in-c-erstellen\/","title":{"rendered":"ROS: Einfachen Publisher\/Subscriber in C++ Erstellen"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_73 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Installation\" title=\"Installation\">Installation<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Ubuntu_1804\" title=\"Ubuntu 18.04\">Ubuntu 18.04<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Abhangigkeiten_auflosen\" title=\"Abh\u00e4ngigkeiten aufl\u00f6sen\">Abh\u00e4ngigkeiten aufl\u00f6sen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Catkin_installieren\" title=\"Catkin installieren\">Catkin installieren<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Befehle\" title=\"Befehle\">Befehle<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Bauen\" title=\"Bauen\">Bauen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Installieren\" title=\"Installieren\">Installieren<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/#Quellen\" title=\"Quellen\">Quellen<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>Hier soll kurz beschrieben werden ein Publisher (Nachrichten Erzeuger) und ein Subscriber (Nachrichten Abbonent) in C++ erstellt werden.<\/p>\n\n\n\n<p>F\u00fcr eine ausf\u00fchrliche Anleitung sei auf die offizelle Website verwiesen.<\/p>\n\n\n\n<p>http:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28c%2B%2B%29<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Voraussetzung<\/h1>\n\n\n\n<p>Ihr ben\u00f6tigt einen Workspace und ein Paket, in meinem Fall is das Workspace test_ws und Paket beginner_tutorial. Weiterhin k\u00f6nnten auch helfen:<\/p>\n\n\n<div class=\"display-posts-listing\">\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-einfachen-publisher-subscriber-in-c-erstellen\/\">ROS: Einfachen Publisher\/Subscriber in C++ Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-service-erstellen\/\">ROS: Service Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-nachrichten-erstellen\/\">ROS: Nachrichten Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/\">ROS: Catkin<\/a><\/div>\n<\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Vorbereitung<\/h1>\n\n\n\n<p>Ins Paket Verzeichnis wechseln<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">source ~\/test_ws\/devel\/setup.bash\nroscd beginner_tutorial<\/code><\/pre>\n\n\n\n<p>Falls noch nicht vorhanden ein Quellcode-Verzeichnis im Paket erstellen und in das Verzeichnis wechseln.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">mkdir -p src\ncd src<\/code><\/pre>\n\n\n\n<p>Dieses Verzeichnis wird alle Quelltext-Dateien des Paketes enthalten.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Publisher Knoten<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Publisher Knoten Erstellen<\/h2>\n\n\n\n<p>Nun ein Beispiel f\u00fcr einen einfachen Publisher von unten Kopiern oder einfach mit folgenden Befehl vom original ROS Tutorial herunterladen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\"> wget https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp\n<\/code><\/pre>\n\n\n\n<p>Die Datei sollte im Prinzip folgenden Code enthalten. Ich habe meinen Code nur an der original Datei orientiert und die Texte zur besseren Lesbarkeit weg gelassen <a rel=\"noreferrer noopener\" href=\"https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp\" data-type=\"URL\" data-id=\"https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp\" target=\"_blank\"> bitte die Copyrights und Disclaimer der Original Datei beachten<\/a> solltet ihr diese verwenden. <\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">\/* Simple Publisher\n*  Based on the example of Morgan Quigley and Willow Garage, Inc. No Garanties for this code. \n*  Basis for this Code can be found:\n*  https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp \n*\/ \n\n#include \"ros\/ros.h\"\n#include \"std_msgs\/String.h\"\n#include  &lt;sstream&gt;\n\nint main(int argc, char **argv)\n{\n\n  ros::init(argc, argv, \"Publizierer\");\n  ros::NodeHandle n;\n  ros::Publisher pub = n.advertise&lt;std_msgs::String&gt;(\"ChatTopic\", 1000);\n\n  ros::Rate loop_rate(10);\n\n  int count = 0;\n  while (ros::ok())\n  {\n    std_msgs::String msg;\n\n    std::stringstream strStream;\n    strStream &lt;&lt; \"Chat Message \" &lt;&lt; count;\n    msg.data = strStream.str();\n\n    ROS_INFO(\"%s\", msg.data.c_str());\n\n    pub.publish(msg);\n\n    ros::spinOnce();\n\n    loop_rate.sleep();\n    ++count;\n  }\n\n  return 0;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Publisher Code Erkl\u00e4rt<\/h2>\n\n\n\n<p>Wir ben\u00f6tigen die Ros Bibliothek, eine einfache Textnachricht und die Stream Bibliothek f\u00fcr Ausgaben.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">#include \"ros\/ros.h\"\n#include \"std_msgs\/String.h\"\n#include &lt;sstream&gt;<\/code><\/pre>\n\n\n\n<p>Der restliche Code wird in der Main Funktion die nach Programmstart aufgerufen wird, platziert. Der folgende Befehl initialisiert ROS.  Er bekommt als Argumentliste die Consolen Argumente des Knoten und einen eindeutigen Namen (hier Publizierer). Dieser darf kein \/ enthalten.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">int main(int argc, char **argv)\n{\n   ros::init(argc, argv, \"Publizierer\"); \/\/ &lt;--\n...<\/code><\/pre>\n\n\n\n<p>Nun erstellen wir einen NodeHandle, dies erm\u00f6glicht uns den Zugriff auf den Knotenprozess. Mit der ersten Erstellung wird der Knoten initialisiert. <\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">ros::NodeHandle n;<\/code><\/pre>\n\n\n\n<p>Mit dessen Hilfe registrieren wir uns nun als PublishDie Frequenz beschreibt die Anzahl der Schwingungen in einer Zeiteinheit. Frequenz und Wellenl\u00e4nge sind miteinander verkn\u00fcpft. Die Ma\u00dfeinheit der Frequenz ist das Hertz (Hz): 1 Hz = 1 Schwingung pro Sekunde = 1\/s.er. Die Argumente sind der Topic Name (&#8222;ChatTopic&#8220;) und die G\u00f6\u00dfe des Nachrichten-Puffers in Anzahl Nachrichten. Wird die Anzahl nicht abgeholter Nachrichten \u00fcberschritten werden alte Nachrichten verworfen. Der Aufruf gibt ein Publisher-Objekt zur\u00fcck mit hilfen dessen wir sp\u00e4ter Nachrichten ver\u00f6ffentlichen k\u00f6nnen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">ros::Publisher pub = n.advertise&lt;std_msgs::String&gt;(\"ChatTopic\", 1000);<\/code><\/pre>\n\n\n\n<p>Der folgenden Befehl gibt an wie lange gewartet werden soll nachdem ein sleep aufgerufen wurden. In diesem Fall 10 Hz (10\/Sekunde = 100 ms warten)<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">ros::Rate loop_rate(10);\n\n\n\/\/ loop_rate.sleep(); \/\/ kommt sp\u00e4ter<\/code><\/pre>\n\n\n\n<p>Unser eigene Logik l\u00e4uft in einer Schleife ab.  Diese wird so lange durchlaufen bis eines der folgenden Ereignisse eintritt, mit diesem wir ros::ok() dann auf false gesetzt.<\/p>\n\n\n\n<ul><li>Knotenprogramm gestoppt (eg. Control +C )<\/li><li>Aus dem Netzwerk geworfen wegen eines anderen Knoten mit gleichem Namen.<\/li><li>ros::shutdown() wurde aufgerufen<\/li><li>Alle ros::NodeHandels wurden zerst\u00f6rt<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">  int count = 0;\n  while (ros::ok())\n  {\n    \/\/ ...\n  }\n<\/code><\/pre>\n\n\n\n<p>Nun erzeugen wir eine Nachricht und verschicken diese mit pub.publish(msg). ROS_INFO schreib die Nachricht noch auf dem Standardoutput.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">  std_msgs::String msg;\n  std::stringstream strStream;\n  strStream &lt;&lt; \"Chat Message \" &lt;&lt; count;\n  msg.data = strStream.str();\n\n  ROS_INFO(\"%s\", msg.data.c_str());\n  pub.publish(msg);<\/code><\/pre>\n\n\n\n<p>SpinOnce wird hier eigentlich nicht ben\u00f6tigt und wird hier nur der Vollst\u00e4ndigkeit halber angegeben. Es sieht f\u00fcr mich so aus als w\u00fcrde hier einmal die EventLoop durchaufen um Nachrichten\/Events &#8230; zu aktualisieren. <\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\"> ros::spinOnce();<\/code><\/pre>\n\n\n\n<p>Nun warten wir 100 Millisekunden (10Hz) bis zum n\u00e4chsten Durchlauf der Schleife<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">\/\/ ... ros::Rate loop_rate(10); \/\/ vorher angegeben\nloop_rate.sleep();\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Subscriber Knoten<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Subscriber Knoten erstellen<\/h2>\n\n\n\n<p>Nun ein Beispiel f\u00fcr einen einfachen Subscriber von unten Kopiern oder einfach mit folgenden Befehl vom original ROS Tutorial herunterladen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">wget https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/listener\/listener.cpp\n<\/code><\/pre>\n\n\n\n<p>Die Datei sollte im Prinzip folgenden Code enthalten. Ich habe meinen Code an der original Datei orientiert und die Texte zur besseren Lesbarkeit weg gelassen <a rel=\"noreferrer noopener\" href=\"https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp\" data-type=\"URL\" data-id=\"https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/talker\/talker.cpp\" target=\"_blank\"> bitte die Copyrights und Disclaimer der Original Datei beachten<\/a> solltet ihr diese verwenden. <\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">\/* Simple subscriber \n* Based on the example of Morgan Quigley and Willow Garage, Inc. No Garanties for this code. \n*  Basis for this Code can be found:\n*  https:\/\/raw.github.com\/ros\/ros_tutorials\/kinetic-devel\/roscpp_tutorials\/listener\/listener.cpp \n*\/ \n\n#include \"ros\/ros.h\"\n#include \"std_msgs\/String.h\"\n\nvoid chatterCallback(const std_msgs::String::ConstPtr&amp; msg)\n{\n  ROS_INFO(\"I heard: [%s]\", msg-&gt;data.c_str());\n}\n\nint main(int argc, char **argv)\n{\n  ros::init(argc, argv, \"Abbonent\");\n  ros::NodeHandle n;\n\n  ros::Subscriber sub = n.subscribe(\"ChatTopic\", 1000, chatterCallback);\n  ros::spin();\n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Subscriber Code Erkl\u00e4rt<\/h2>\n\n\n\n<p>Wir brauchen wieder die ROS Bibliothek und auch die standard String Nachricht.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">#include \"ros\/ros.h\"\n#include \"std_msgs\/String.h\"<\/code><\/pre>\n\n\n\n<p>F\u00fcr den Subscriber braucen wir eine sogenannte CallBack Funktion, dies wird bei jedem eintreffen einer Nachricht gerufen. In unserem Fall macht sie nichts anderes als die Nachricht auf der Standardausgabe auszugeben.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">void chatterCallback(const std_msgs::String::ConstPtr&amp; msg)\n{\n  ROS_INFO(\"I heard: [%s]\", msg->data.c_str());\n}<\/code><\/pre>\n\n\n\n<p>Auch um einen Subriber zu erzeugen muss ROS initialisiert und ein Handle erstellt werden.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">int main(int argc, char **argv)\n{\n  ros::init(argc, argv, \"Abbonent\");\n  ros::NodeHandle n;\n..<\/code><\/pre>\n\n\n\n<p>Nun erstellen wir noch den Subcriber, geben ihm den Topic Namen, die  Gr\u00f6\u00dfe des Nachrichtenpuffers, den Namen der CallBack Funktion mit und lassen ROS die Eventloop peitschen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"cpp\" class=\"language-cpp\">  ros::Subscriber sub = n.subscribe(\"ChatTopic\", 1000, chatterCallback);\n  ros::spin();<\/code><\/pre>\n\n\n\n<p>das wars.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Bauen<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">CMake Anpassen<\/h2>\n\n\n\n<p>Die erstellten Dateien dem CMakeList.txt mitteilen.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">add_executable(talker src\/talker.cpp)\ntarget_link_libraries(talker ${catkin_LIBRARIES})\nadd_dependencies(talker beginner_tutorials_generate_messages_cpp)\n\nadd_executable(listener src\/listener.cpp)\ntarget_link_libraries(listener ${catkin_LIBRARIES})\nadd_dependencies(listener beginner_tutorials_generate_messages_cpp)<\/code><\/pre>\n\n\n\n<p>Meine Datei sieht dann wie folgt aus<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">cmake_minimum_required(VERSION 3.0.2)\nproject(beginner_tutorial)\n\nfind_package(catkin REQUIRED)\n\n## Find catkin and any catkin packages\nfind_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg message_generation)\n\nadd_message_files(FILES Num.msg)\nadd_service_files(FILES AddTwoInts.srv)\n\ngenerate_messages(DEPENDENCIES std_msgs)\n\ncatkin_package()\n\ninclude_directories(include ${catkin_INCLUDE_DIRS})\n\nadd_executable(talker src\/talker.cpp)\ntarget_link_libraries(talker ${catkin_LIBRARIES})\nadd_dependencies(talker beginner_tutorial_generate_messages_cpp)\n\nadd_executable(listener src\/listener.cpp)\ntarget_link_libraries(listener ${catkin_LIBRARIES})\nadd_dependencies(listener beginner_tutorial_generate_messages_cpp)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Compilieren<\/h2>\n\n\n\n<p>In das Hauptverzeichnis des Workspaces wechseln und catkin_make ausf\u00fchren<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">cd ~\/test_ws\ncatkin_make<\/code><\/pre>\n\n\n\n<p>Due Programme sollten ohne Fehler compilieren.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Probieren<\/h1>\n\n\n\n<p>ROS Kern starten<\/p>\n\n\n\n<p>Neue Konsole \u00f6ffnen und den Kern starten<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">roscore<\/code><\/pre>\n\n\n\n<p>Konsolenausgabe<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">Press Ctrl-C to interrupt\nDone checking log file disk usage. Usage is &lt;1GB.\n\nstarted roslaunch server http:\/\/ros1:36971\/\nros_comm version 1.14.13\n\n\nSUMMARY\n========\n\nPARAMETERS\n * \/rosdistro: melodic\n * \/rosversion: 1.14.13\n\nNODES\n\nauto-starting new master\nprocess[master]: started with pid [21703]\nROS_MASTER_URI=http:\/\/ros1:11311\/\n\nsetting \/run_id to b388e65a-e1ed-11ed-9402-2cf05d21f9e7\nprocess[rosout-1]: started with pid [21714]\nstarted core service [\/rosout]\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publisher starten<\/h2>\n\n\n\n<p>Neue Console \u00f6ffnen und den Publisher starten<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">source devel\/setup.bash \nrosrun beginner_tutorial talker<\/code><\/pre>\n\n\n\n<p>Konsolen Ausgabe<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">stefan@ros1:~\/test_ws$ rosrun beginner_tutorial talker\n[ INFO] [1682264871.725780407]: Chat Message 0\n[ INFO] [1682264871.825829919]: Chat Message 1\n[ INFO] [1682264871.926003834]: Chat Message 2\n[ INFO] [1682264872.025829924]: Chat Message 3\n[ INFO] [1682264872.125823473]: Chat Message 4\n[ INFO] [1682264872.225830377]: Chat Message 5\n[ INFO] [1682264872.325854816]: Chat Message 6\n[ INFO] [1682264872.425830687]: Chat Message 7\n[ INFO] [1682264872.526317126]: Chat Message 8\n[ INFO] [1682264872.626305447]: Chat Message 9\n[ INFO] [1682264872.725830634]: Chat Message 10\n[ INFO] [1682264872.826306242]: Chat Message 11\n[ INFO] [1682264872.925858434]: Chat Message 12\n[ INFO] [1682264873.025830754]: Chat Message 13\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Subscriber starten<\/h2>\n\n\n\n<p>Neue Console \u00f6ffenen und den Subscriber starten<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code class=\"\">source devel\/setup.bash \nrosrun beginner_tutorial listener<\/code><\/pre>\n\n\n\n<p>Konsolen Ausgabe<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">stefan@ros1:~\/test_ws$ rosrun beginner_tutorial listener\n[ INFO] [1682264872.026229599]: I heard: [Chat Message 3]\n[ INFO] [1682264872.126169068]: I heard: [Chat Message 4]\n[ INFO] [1682264872.226189402]: I heard: [Chat Message 5]\n[ INFO] [1682264872.326278372]: I heard: [Chat Message 6]\n[ INFO] [1682264872.426155092]: I heard: [Chat Message 7]\n[ INFO] [1682264872.526503319]: I heard: [Chat Message 8]\n[ INFO] [1682264872.626625331]: I heard: [Chat Message 9]\n[ INFO] [1682264872.726196509]: I heard: [Chat Message 10]\n[ INFO] [1682264872.826496384]: I heard: [Chat Message 11]\n[ INFO] [1682264872.926120007]: I heard: [Chat Message 12]\n[ INFO] [1682264873.026085367]: I heard: [Chat Message 13]<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Fazit<\/h1>\n\n\n\n<p>Ein Publisher-\/Subscriber-Ger\u00fcst ist schnell erstellt und dient als Basis f\u00fcr kommende Projekte.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Verwandte Beitr\u00e4ge<\/h1>\n\n\n<div class=\"display-posts-listing\">\n<div class=\"listing-item\"><a class=\"image\" href=\"https:\/\/www.fambach.net\/en\/ros-einfachen-publisher-subscriber-in-c-erstellen\/\"><img loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"58\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/ROS_logo_black2.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/a> <a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-einfachen-publisher-subscriber-in-c-erstellen\/\">ROS: Einfachen Publisher\/Subscriber in C++ Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"image\" href=\"https:\/\/www.fambach.net\/en\/ros-service-erstellen\/\"><img loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"58\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/ROS_logo_black2.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/a> <a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-service-erstellen\/\">ROS: Service Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"image\" href=\"https:\/\/www.fambach.net\/en\/ros-nachrichten-erstellen\/\"><img loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"58\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/ROS_logo_black2.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/a> <a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-nachrichten-erstellen\/\">ROS: Nachrichten Erstellen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"image\" href=\"https:\/\/www.fambach.net\/en\/ros-unified-robot-description-format-urdf\/\"><img loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"58\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/Screenshot-from-2023-03-26-15-42-59.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/a> <a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-unified-robot-description-format-urdf\/\">ROS URDF: Projekt aufsetzen<\/a><\/div>\n<div class=\"listing-item\"><a class=\"image\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/\"><img loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"58\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/ROS_logo_black2.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/a> <a class=\"title\" href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/\">ROS: Catkin<\/a><\/div>\n<\/div>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Quellen<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>http:\/\/wiki.ros.org\/melodic\/Installation\/Ubuntu<\/p>\n\n\n\n<p>http:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28c%2B%2B%29<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hier soll kurz beschrieben werden ein Publisher (Nachrichten Erzeuger) und ein Subscriber (Nachrichten Abbonent) in C++ erstellt werden. F\u00fcr eine ausf\u00fchrliche Anleitung sei auf die offizelle Website verwiesen. http:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28c%2B%2B%29 Voraussetzung Ihr ben\u00f6tigt einen Workspace und ein Paket, in meinem Fall is das Workspace test_ws und Paket beginner_tutorial. Weiterhin k\u00f6nnten auch helfen: Vorbereitung Ins Paket Verzeichnis &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/\" class=\"read-more-link\">Continue reading <span class=\"screen-reader-text\">\"ROS: Catkin\"<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a>","protected":false},"author":1,"featured_media":9227,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[157,254,699],"tags":[678],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/9364"}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=9364"}],"version-history":[{"count":19,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/9364\/revisions"}],"predecessor-version":[{"id":9395,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/9364\/revisions\/9395"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/9227"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=9364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=9364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=9364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}