Artikelindex

 Wat we als eerste moeten doen is een ROS package voor ons zelf moeten maken, dit gaan we doen in onze werkruimte, die we laatst hebben gemaakt.

$ cd ~/hcc_ws/src

In deze directory kunnen we onze packages maken.

$ catkin_create_pkg hcc_tutorials std_msgs roscpp

Nu, wat betekent het nu wat we hebben gedaan.

Als eerste catkin_create_pkg, is de commando die we uitvoeren, zoals je ziet, maken we hiermee een pakket. hcc_tutorials, dit is de naam van onze package. std_msgs, dit zorgt ervoor, dat we in ons pakket, de berichten kunnen gebruiken, die in een ander pakket die op het system al staat namelijk "std_msgs" kunnen gebruiken. en het zegt tevens dat het pakket op de computer moet zijn geinstalleerd, voor dat ons pakket gebruikt kan worden. Dat laatste geldt ook voor roscpp

Na het uitvoeren van het bovenstaande, is er in de directory, een directory met de naam "hcc_tutotorials" gemaakt. Als we in deze directory kijken, is er voor ons het volgende gecreerd.

hcc_tutorials
    CMakeLists.txt
    package.xml
    include
    src

Een korte uitleg: ROS packages build systeem maakt gebruik van de catkin programma's op linux. De CMakeLists.txt file, is daar een onderdeel van, vandaar dat deze gecreerd is voor ons pakket. de packet.xml file, is een verplichte file, die je pakket beschrijft, zolals afhankelijkheden, autheur enz.

Wat het inhoud, en wat je er mee moet doen, zal later stap voor stap met je doornemen.

Wat we nu gaan doen, is de "Hello World!" versie voor ROS schrijven. Daarvoor is in ROS 2 nodes benodigd, 1 node om een bericht de wereld in te zenden, en 1 node om er naar te luisteren, en het bericht op het beeld te zetten. Alle broncode voor c++, plaatsen we in de directory src.

Creeer de onderstaande file:

src/send_message_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sstream>
int main(int argc, char** argv) 
{ 
    ros::init(argc, argv, "talker"); 
    ros::NodeHandle nh; 
    ros::Publisher pub = nh.advertise("talker", 1000); 
    int count = 0;
    ros::Rate loop_rate(10);
    while (ros::ok()) 
    { 
        std_msgs::String msg;
        std::stringstream ss; 
        ss << "Hello World! " << count;
        msg.data = ss.str();
        pub.publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
        count++;
    }
    return 0;
}

Laten we even kijken naar de code.

#include <ros/ros.h>

Deze include file, is een handige file, omdat deze all de benodigde include files importeerd die benodigd zijn om het ROS systeem te laten werken.

#include <std_msgs/String.h>

 Deze zorgt er voor dat we het bericht "String" kunnen gebruiken in onze code, welke zich in het std_msgs package bevind. Deze header file is gegenereert automatish van de String.msg file, die zich in dit pakket bevindt. Maar meer over messages later.

    ros::init(argc, argv, "talker");

Hier mee wordt ROS geinitialiseerd, talker is de naam van onze node. Node namen, moeten unique zijn in een werkend systeem. Wanneer je een node start, kan er vanaf de commandline door middel van name remapping een andere naam aan de node worden gegeven.

    ros::NodeHandle nh;

Hiermee verkrijgen we een handle naar de process van onze node.