当前位置: 首页 > wzjs >正文

台州网站建设公司.昆山网页设计公司书生商友

台州网站建设公司.,昆山网页设计公司书生商友,jsp网站开发的参考文献,服务器做免费空间网站管理录像教程写在前面 主要参考了小鱼的ROS2教程,其他教程在分部拆解上有些模棱两可 建立完整功能节点的步骤概述 创建节点定义该节点的身份为节点分配具体任务ros2 run 打个比方,今天要完成送快递的任务,将任务拆解后可分为: 招人让这个…

写在前面

主要参考了小鱼的ROS2教程,其他教程在分部拆解上有些模棱两可

建立完整功能节点的步骤概述

  1. 创建节点
  2. 定义该节点的身份
  3. 为节点分配具体任务
  4. ros2 run

打个比方,今天要完成送快递的任务,将任务拆解后可分为:

  1. 招人
  2. 让这个人变成快递员
  3. 给TA分配具体任务(把城北的快递派送完)
  4. 让TA干活

完整程序展示(以publisher为例)

class TopicPublisher01 : public rclcpp::Node
{
public:// 构造函数,有一个参数为节点名称TopicPublisher01(std::string name) : Node(name){RCLCPP_INFO(this->get_logger(), "发布者节点%s 已启动.", name.c_str());command_publisher_ = this->create_publisher<std_msgs::msg::String>("command", 10);timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&TopicPublisher01::timer_callback, this));}private:void timer_callback(){// 创建消息std_msgs::msg::String message;message.data = "forward";// 日志打印RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());// 发布消息command_publisher_->publish(message);}// 声名定时器指针rclcpp::TimerBase::SharedPtr timer_;// 声明节点rclcpp::Publisher<std_msgs::msg::String>::SharedPtr command_publisher_;
};

分部拆解

  • 创建节点
    • 创建节点发生在auto node = std::make_shared(“topic_publisher_01”);
      当构造函数TopicPublisher01被调用,节点名称参数写入Node(name)时,节点就被创建完成了
      相当于在没有人的情况下,招了个人进来,但是TA现在还不知道自己是来干嘛的,只知道自己是人,是一个劳动力
    • 仅仅被创建的节点本身不具有任何功能,具体功能是加在上面的程序基础上的
    class TopicPublisher01 : public rclcpp::Node
    {
    public:// 构造函数,有一个参数为节点名称TopicPublisher01(std::string name) : Node(name){RCLCPP_INFO(this->get_logger(), "发布者节点%s 已启动.", name.c_str());}private:
    };int main(int argc, char **argv)
    {rclcpp::init(argc, argv);/*创建对应节点的共享指针对象*/auto node = std::make_shared<TopicPublisher01>("topic_publisher_01");/* 运行节点,并检测退出信号*/rclcpp::spin(node);rclcpp::shutdown();return 0;
    }
    
  • 节点功能定义
    • 相比上面的程序两行代码,将该节点定义成publisher,作为消息的发布者
      相当于从无业游民变成了快递员
      public:command_publisher_ = this->create_publisher<std_msgs::msg::String>("command", 10);
      private:rclcpp::Publisher<std_msgs::msg::String>::SharedPtr command_publisher_;
      
  • 分配具体任务
    • 为发布者节点增加定时发送的功能,主要增加了下面的代码
      相当于为快递员分配的具体的工作任务,招人了总是要用起来的
      timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&TopicPublisher01::timer_callback, this));void timer_callback()
      {// 创建消息std_msgs::msg::String message;message.data = "forward";// 日志打印RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());// 发布消息command_publisher_->publish(message);
      }
      // 声名定时器指针
      rclcpp::TimerBase::SharedPtr timer_;
      // 声明节点
      rclcpp::Publisher<std_msgs::msg::String>::SharedPtr command_publisher_;
      
  • 运行程序
    • 使用下面的指令运行对应节点即可
      cd xxx/工作空间_ws/
      colcon build --packages-select 功能包名称			# 编译功能包
      source install/setup.bash						# 安装编译后的结果,防止运行时找不到相关依赖
      ros2 run 功能包名称 功能包中的节点名称				# 运行节点
      

完整程序参考最上面的完整程序展示,下面的分部拆解并不是正确的语法

订阅者节点代码展示

实现过程和发布者完全相同

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"class TopicSubscriber : public rclcpp::Node
{
public:TopicSubscriber(std::string name) : Node(name){RCLCPP_INFO(this->get_logger(), "this is %s", name.c_str());command_subscriber = this->create_subscription<std_msgs::msg::String>("command", 10, std::bind(&TopicSubscriber::command_callback, this, std::placeholders::_1));}
private:rclcpp::Subscription<std_msgs::msg::String>::SharedPtr command_subscriber;void command_callback(const std_msgs::msg::String::SharedPtr msg){double speed = 0.0f;if(msg->data == "forward"){speed = 0.2f;}RCLCPP_INFO(this->get_logger(), "receive command [%s], the speed is %f", msg->data.c_str(), speed);}
};int main(int argc, char **argv)
{rclcpp::init(argc, argv);/*创建对应节点的共享指针对象*/auto node = std::make_shared<TopicSubscriber>("topic_subscriber_0");/* 运行节点,并检测退出信号*/rclcpp::spin(node);rclcpp::shutdown();return 0;
}

最后补充一下引入消息接口的方法 (以std_msgs为例)

  1. 在CMakeLists.txt中,增加
    find_package(std_msgs REQUIRED)
    ament_target_dependencies(topic_publisher_01 rclcpp std_msgs)
    
  2. 在packages.xml中增加
     <depend>std_msgs</depend>
    
  3. 在cpp程序中,使用#include “std_msgs/msg/string.hpp”,调用这些接口

补充一点语法

rclcpp::Subscription<std_msgs::msg::String>::SharedPtr command_subscriber;

使用模板类Subscription中的类型别名SharedPtr,创建一个变量command_subscriber
这是c++特有的长难句,也特意记录一下


文章转载自:

http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://00000000.trhLb.cn
http://www.dtcms.com/wzjs/603145.html

相关文章:

  • 资阳建网站网站演示网站代码
  • 网站设计风格确认书响应式网站制设计
  • 外链数是网站反向链接码软件界面设计与色彩搭配
  • 做文献ppt模板下载网站代运营公司的套路
  • 网站销售北京短视频拍摄
  • o2o网站策划网站速成
  • 怎么看网站是否被百度惩罚长沙电商优化
  • 灵台教育局网站师资队伍建设店铺设计图纸及效果图大全
  • 长沙网站开发微联个人简历怎么写简短又吸引人
  • 花生壳域名直接做网站顶尖的网站建设
  • 网站制作要用哪些软件wordpress头部背景颜色
  • 网站建设人员工作要求如何制作出优秀的ui设计
  • 用dw做音乐网站模板网址管理系统
  • 有没有网站做字体变形网页设计是什么软件
  • 网站运营专员岗位要求福步外贸论坛怎么注册账号
  • 同信.长春网站建设官方网站改版建议
  • 网站建设优化服务精英企业网站建设方式
  • 千图素材网站云南搜索引擎优化
  • 国外网站域名查询商标设计模板
  • 做网站 支付账号免费吗免费的排版软件
  • 广州城乡建设部网站首页做外贸哪个网站要办信用卡的
  • 西安知名的集团门户网站建设公司销售渠道及方式
  • 聊城网站建设工作室河北建设工程信息网更名
  • 平面设计网站大全网站ui设计已经不火了
  • 北京市中海建设有限公司网站阿里云域名注册续费
  • 盐城市城南新区建设局网站创意图片
  • 鲅鱼圈网站怎么做高端定制网站建设
  • 网站建设crm做商标网站
  • 百度蜘蛛抓取网站模块前端考什么证书含金量高
  • ui设计较好的网站单页网站利润