Εξερευνώντας το ROS2 με τροχοφόρο ρομπότ – #2 – Πώς να εγγραφείτε στο θέμα σάρωσης λέιζερ ROS2


Του Marco Arruda

Αυτό είναι το δεύτερο κεφάλαιο της σειράς «Exploring ROS2 with a wheeled robot». Σε αυτό το επεισόδιο, θα μάθετε πώς να εγγραφείτε σε ένα θέμα ROS2 χρησιμοποιώντας το ROS2 C++.

Θα μάθετε:

  • Πώς να δημιουργήσετε έναν κόμβο με ROS2 και C++
  • Πώς να εγγραφείτε σε ένα θέμα με ROS2 και C++
  • Πώς να εκκινήσετε έναν κόμβο ROS2 χρησιμοποιώντας ένα αρχείο εκκίνησης

1 – Περιβάλλον εγκατάστασης – Εκκίνηση προσομοίωσης

Πριν οτιδήποτε άλλο φρόντισε να έχεις το rosject από την προηγούμενη ανάρτηση, μπορείς να το αντιγράψεις από εδώ.

Εκκινήστε την προσομοίωση σε ένα κέλυφος ιστού και σε διαφορετική καρτέλα, ελέγξτε τα θέματα που έχουμε διαθέσιμα. Πρέπει να πάρετε κάτι παρόμοιο με την παρακάτω εικόνα:

2 – Δημιουργήστε έναν κόμβο ROS2

Στόχος μας είναι να διαβάσουμε τα δεδομένα λέιζερ, οπότε δημιουργήστε ένα νέο αρχείο που ονομάζεται reading_laser.cpp:

touch ~/ros2_ws/src/my_package/reading_laser.cpp

Και επικολλήστε το περιεχόμενο παρακάτω:

#include "rclcpp/rclcpp.hpp"
#include "sensor_msgs/msg/laser_scan.hpp"

using std::placeholders::_1;

class ReadingLaser : public rclcpphttps://www.theconstructsim.com/exploring-ros2-with-wheeled-robot-2-how-to-subscribe-to-ros2-laser-scan-topic/::Node 

public:
  ReadingLaser() : Node("reading_laser") 

    auto default_qos = rclcpp::QoS(rclcpp::SystemDefaultsQoS());

    subscription_ = this->create_subscription(
        "laser_scan", default_qos,
        std::bind(&ReadingLaser::topic_callback, this, _1));
  

private:
  void topic_callback(const sensor_msgs::msg::LaserScan::SharedPtr _msg) 
    RCLCPP_INFO(this->get_logger(), "I heard: '%f' '%f'", _msg->ranges[0],
                _msg->ranges[100]);
  
  rclcpp::Subscription::SharedPtr subscription_;
;

int main(int argc, char *argv[]) 
  rclcpp::init(argc, argv);
  auto node = std::make_shared();
  RCLCPP_INFO(node->get_logger(), "Hello my friends");
  rclcpp::spin(node);
  rclcpp::shutdown();
  return 0;

Δημιουργούμε μια νέα τάξη ReadingLaser που αντιπροσωπεύει τον κόμβο (κληρονομεί rclcpp :: Κόμβος). Τα πιο σημαντικά για αυτήν την κλάση είναι το χαρακτηριστικό συνδρομητής και η μέθοδος επανάκλησης. Στο κύριος συνάρτηση αρχικοποιούμε τον κόμβο και τον κρατάμε ζωντανό (γνέθω) ενώ η σύνδεσή του με ROS είναι έγκυρη.

Ο κατασκευαστής συνδρομητών αναμένει να λάβει ένα QoS, που σημαίνει το ενδιάμεσο λογισμικό που χρησιμοποιείται για το ποιότητα εξυπηρέτησης. Μπορείτε να έχετε περισσότερες πληροφορίες σχετικά με αυτό στη συνημμένη αναφορά, αλλά σε αυτήν την ανάρτηση χρησιμοποιούμε απλώς το προεπιλεγμένο QoS που παρέχεται. Λάβετε υπόψη τις ακόλουθες παραμέτρους:

  • όνομα θέματος
  • μέθοδος επανάκλησης

Η μέθοδος επανάκλησης πρέπει να είναι δεσμευμένη, πράγμα που σημαίνει ότι δεν θα εκτελεστεί στη δήλωση συνδρομητή, αλλά όταν καλείται η επανάκληση. Περνάμε λοιπόν την αναφορά της μεθόδου και ρυθμίζουμε το Αυτό αναφορά για το τρέχον αντικείμενο που θα χρησιμοποιηθεί ως επιστροφή κλήσης, εξάλλου η ίδια η μέθοδος είναι μια γενική υλοποίησηhttps://www.theconstructsim.com/exploring-ros2-with-wheeled-robot-2-how-to-subscribe-to-ros2- laser-scan-topic/ μιας τάξης.

3 – Μεταγλώττιση και εκτέλεση

Προκειμένου να συνταχθεί η cpp αρχείο, πρέπει να προσθέσουμε κάποιες οδηγίες στο ~/ros2_ws/src/my_package/src/CMakeLists.txt:

  • Αναζητήστε εξαρτήσεις εύρεσης και συμπεριλάβετε τη βιβλιοθήκη sensor_msgs
  • Λίγο πριν από την οδηγία εγκατάστασης προσθέστε το εκτελέσιμο και στοχεύστε τις εξαρτήσεις του
  • Προσθέστε μια άλλη οδηγία εγκατάστασης για το νέο εκτελέσιμο αρχείο που μόλις δημιουργήσαμε
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(sensor_msgs REQUIRED)
...

...
add_executable(reading_laser src/reading_laser.cpp)
ament_target_dependencies(reading_laser rclcpp std_msgs sensor_msgs)
...

...
install(TARGETS
  reading_laser
  DESTINATION lib/$PROJECT_NAME/
)

Μεταγλωττίστε το:

colcon build --symlink-install --packages-select my_package

4 – Εκτελέστε τον κόμβο και αντιστοιχίστε το θέμα

Για να εκτελέσετε το εκτελέσιμο που δημιουργήθηκε, μπορείτε να χρησιμοποιήσετε:

ros2 run my_package reading_laser

Αν και οι τιμές λέιζερ δεν θα εμφανιστούν. Αυτό συμβαίνει επειδή έχουμε ένα “σκληρό κωδικοποιημένο” όνομα θέματος laser_scan. Κανένα πρόβλημα, όταν μπορούμε να χαρτογραφήσουμε θέματα χρησιμοποιώντας αρχεία εκκίνησης. Δημιουργήστε ένα νέο αρχείο εκκίνησης ~/ros2_ws/src/my_package/launch/reading_laser.py:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():

    reading_laser = Node(
        package="my_package",
        executable="reading_laser",https://www.theconstructsim.com/exploring-ros2-with-wheeled-robot-2-how-to-subscribe-to-ros2-laser-scan-topic/
        output="screen",
        remappings=[
            ('laser_scan', '/dolly/laser_scan')
        ]
    )

    return LaunchDescription([
        reading_laser
    ])

Σε αυτό το αρχείο εκκίνησης υπάρχει ένα παράδειγμα ενός κόμβου που παίρνει το εκτελέσιμο ως όρισμα και ρυθμίζεται το επαναχαρτογραφήσεις χαρακτηριστικό προκειμένου να αντιστοιχιστεί ξανά από laser_scan προς το /dolly/laser_scan.

Εκτελέστε τον ίδιο κόμβο χρησιμοποιώντας το αρχείο εκκίνησης αυτή τη φορά:

ros2 launch my_package reading_laser.launch.py

Προσθέστε μερικά εμπόδια στον κόσμο και το αποτέλεσμα πρέπει να είναι παρόμοιο με:

Σχετικά μαθήματα και επιπλέον σύνδεσμοι:

Η δημοσίευση Εξερευνώντας το ROS2 με τροχοφόρο ρομπότ – #2 – Πώς να εγγραφείτε στο θέμα σάρωσης λέιζερ ROS2 εμφανίστηκε πρώτα στις Η Κατασκευή.


The Construct Blog



Source link

By koutsobolis

koutsobolis.com

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *