Blanc peut apprendre tutoriel d'introduction des cartes incluses et les connaissances de la carte de l'esprit ros2

avant-propos

Par foie plusieurs jours et nuits, enfin terminé, et terminé l'école de base ROS2, le partage ci-dessous, y compris la cartographie de l'esprit, pratique, pdf voulait, zone de commentaires sur la ligne, s'il vous plaît indiquer la source

navigation

Portail de la colonne

  1. structures de préparation et de données environnementales
  2. Impressionnant Robot d'exploitation System2
  3. Outils CLI (outil de ligne de commande)
  4. Bibliothèques clients (bibliothèques clientes)
    Les articles 3 et 4 sont à la fois long article, plus de temps, il est recommandé de voir le sous-article suivant

Outils CLI (outil de ligne de commande)

  1. configuration environnement
  2. turtlesim 和 rqt
  3. ROS nœud 2 (noeud)
  4. 2 thèmes (ERO sujets)
  5. services (service) ROS 2
  6. Paramètres ROS 2 (paramètres)
  7. opération ROS 2 (action)
  8. rqt_console
  9. fichier de démarrage (lancement)
  10. Enregistrement et lecture des données

Bibliothèques clients (bibliothèques clientes)

  1. Créer un espace de travail
  2. Créer les premiers propres ERO 2 pièces
  3. Écrivez simple publication et d'abonnement (C ++)
  4. Écrivez simple publication et d'abonnement (python)
  5. Ecrire un service et simple client (C ++)
  6. Ecrire un service et simple client (python)
  7. ROS2 msg et les fichiers SRV pour créer sur mesure
  8. entrée ros2doctor

vue d'ensemble

Limite de taille de l'image, et ici je ne télécharge version gif de pixels laitier laitier
Insérer ici l'image Description

cartographie des connaissances

Ce qui suit est un faible Kiyonaga figure.Insérer ici l'image Description

xmind fichiers source et pdf, s'il vous plaît laisser la boîte aux lettres, je vais envoyer

source supplémentaire

Voici quelques connaissances de la cartographie des sources supplémentaires dans l'émergence de
pub

#include <chrono>
#include <memory>

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

using namespace std::chrono_literals;

/* This example creates a subclass of Node and uses std::bind() to register a
* member function as a callback from the timer. */

class MinimalPublisher : public rclcpp::Node
{
  public:
    MinimalPublisher()
    : Node("minimal_publisher"), count_(0)
    {
      publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
      timer_ = this->create_wall_timer(
      500ms, std::bind(&MinimalPublisher::timer_callback, this));
    }

  private:
    void timer_callback()
    {
      auto message = std_msgs::msg::String();
      message.data = "Hello, world! " + std::to_string(count_++);
      RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());
      publisher_->publish(message);
    }
    rclcpp::TimerBase::SharedPtr timer_;
    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
    size_t count_;
  };

  int main(int argc, char * argv[])
  {
    rclcpp::init(argc, argv);
    rclcpp::spin(std::make_shared<MinimalPublisher>());
    rclcpp::shutdown();
    return 0;
  }

sous

#include <memory>

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using std::placeholders::_1;

class MinimalSubscriber : public rclcpp::Node
{
  public:
    MinimalSubscriber()
    : Node("minimal_subscriber")
    {
      subscription_ = this->create_subscription<std_msgs::msg::String>(
      "topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
    }

  private:
    void topic_callback(const std_msgs::msg::String::SharedPtr msg) const
    {
      RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
    }
    rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;
};

int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<MinimalSubscriber>());
  rclcpp::shutdown();
  return 0;
}

un service

#include "rclcpp/rclcpp.hpp"
#include "example_interfaces/srv/add_two_ints.hpp"

#include <memory>

void add(const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,
          std::shared_ptr<example_interfaces::srv::AddTwoInts::Response>      response)
{
  response->sum = request->a + request->b;
  RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Incoming request\na: %ld" " b: %ld",
                request->a, request->b);
  RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "sending back response: [%ld]", (long int)response->sum);
}

int main(int argc, char **argv)
{
  rclcpp::init(argc, argv);

  std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_server");

  rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtr service =
    node->create_service<example_interfaces::srv::AddTwoInts>("add_two_ints", &add);

  RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Ready to add two ints.");

  rclcpp::spin(node);
  rclcpp::shutdown();
}

client

#include "rclcpp/rclcpp.hpp"
#include "example_interfaces/srv/add_two_ints.hpp"

#include <chrono>
#include <cstdlib>
#include <memory>

using namespace std::chrono_literals;

int main(int argc, char **argv)
{
  rclcpp::init(argc, argv);

  if (argc != 3) {
      RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "usage: add_two_ints_client X Y");
      return 1;
  }

  std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_client");
  rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtr client =
    node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");

  auto request = std::make_shared<example_interfaces::srv::AddTwoInts::Request>();
  request->a = atoll(argv[1]);
  request->b = atoll(argv[2]);

  while (!client->wait_for_service(1s)) {
    if (!rclcpp::ok()) {
      RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service. Exiting.");
      return 0;
    }
    RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "service not available, waiting again...");
  }

  auto result = client->async_send_request(request);
  // Wait for the result.
  if (rclcpp::spin_until_future_complete(node, result) ==
    rclcpp::executor::FutureReturnCode::SUCCESS)
  {
    RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Sum: %ld", result.get()->sum);
  } else {
    RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Failed to call service add_two_ints");
  }

  rclcpp::shutdown();
  return 0;
}

Publié 100 articles originaux · louange 584 won · vues + 50000

Je suppose que tu aimes

Origine blog.csdn.net/weixin_36628778/article/details/105327394
conseillé
Classement