{"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: Create a Simple Publisher\/Subscriber in C++"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 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\" >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\" >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\" >Abh&auml;ngigkeiten aufl&ouml;sen<\/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\" >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\" >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\" >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\" >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\" >Quellen<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Hier soll kurz beschrieben werden ein Publisher (Nachrichten Erzeuger) und ein Subscriber (Nachrichten Abbonent) in C++ erstellt werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F&uuml;r eine ausf&uuml;hrliche Anleitung sei auf die offizelle Website verwiesen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Ihr ben&ouml;tigt einen Workspace und ein Paket, in meinem Fall is das Workspace test_ws und Paket beginner_tutorial. Weiterhin k&ouml;nnten 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Nun ein Beispiel f&uuml;r 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 class=\"wp-block-paragraph\">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&auml;rt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir ben&ouml;tigen die Ros Bibliothek, eine einfache Textnachricht und die Stream Bibliothek f&uuml;r 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Nun erstellen wir einen NodeHandle, dies erm&ouml;glicht 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 class=\"wp-block-paragraph\">Mit dessen Hilfe registrieren wir uns nun als PublishDie Frequenz beschreibt die Anzahl der Schwingungen in einer Zeiteinheit. Frequenz und Wellenl&auml;nge sind miteinander verkn&uuml;pft. Die Ma&szlig;einheit 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&ouml;&szlig;e des Nachrichten-Puffers in Anzahl Nachrichten. Wird die Anzahl nicht abgeholter Nachrichten &uuml;berschritten werden alte Nachrichten verworfen. Der Aufruf gibt ein Publisher-Objekt zur&uuml;ck mit hilfen dessen wir sp&auml;ter Nachrichten ver&ouml;ffentlichen k&ouml;nnen.<\/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 class=\"wp-block-paragraph\">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&auml;ter<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Unser eigene Logik l&auml;uft 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 class=\"wp-block-list\"><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&ouml;rt<\/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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">SpinOnce wird hier eigentlich nicht ben&ouml;tigt und wird hier nur der Vollst&auml;ndigkeit halber angegeben. Es sieht f&uuml;r mich so aus als w&uuml;rde 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 class=\"wp-block-paragraph\">Nun warten wir 100 Millisekunden (10Hz) bis zum n&auml;chsten 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 class=\"wp-block-paragraph\"><\/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 class=\"wp-block-paragraph\">Nun ein Beispiel f&uuml;r 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 class=\"wp-block-paragraph\">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&auml;rt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">F&uuml;r 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-&gt;data.c_str());\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Nun erstellen wir noch den Subcriber, geben ihm den Topic Namen, die  Gr&ouml;&szlig;e 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">In das Hauptverzeichnis des Workspaces wechseln und catkin_make ausf&uuml;hren<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">cd ~\/test_ws\ncatkin_make<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Due Programme sollten ohne Fehler compilieren.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Probieren<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">ROS Kern starten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neue Konsole &ouml;ffnen 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publisher starten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neue Console &ouml;ffnen 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Subscriber starten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neue Console &ouml;ffenen 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Ein Publisher-\/Subscriber-Ger&uuml;st ist schnell erstellt und dient als Basis f&uuml;r kommende Projekte.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Verwandte Beitr&auml;ge<\/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 class=\"wp-block-paragraph\">http:\/\/wiki.ros.org\/melodic\/Installation\/Ubuntu<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">http:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28c%2B%2B%29<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\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&uuml;r eine ausf&uuml;hrliche Anleitung sei auf die offizelle Website verwiesen. http:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28c%2B%2B%29 Voraussetzung Ihr ben&ouml;tigt einen Workspace und ein Paket, in meinem Fall is das Workspace test_ws und Paket beginner_tutorial. Weiterhin k&ouml;nnten auch helfen: Vorbereitung Ins Paket Verzeichnis &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/ros-catkin\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"ROS: Catkin\"<\/span> <span class=\"meta-nav\">\u2192<\/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],"class_list":["post-9364","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-atnrob","category-betriebssysteme","category-ros-melody","tag-ros","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/9364","targetHints":{"allow":["GET"]}}],"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}]}}