ROS2话题模型代码解读

        本人在学习鱼香ROS2的过程中对代码还是有些不了解,于是把所写的代码进行解构分析其流程和逻辑,适合像我一样的初学者进行辅助学习。我们这里以c++代码为例。

一、发布者

1.cpp

发布者全部代码为:

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
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_;
};

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;
}

代码的框架为:

节点类TopicPublisher01:
    继承于rclcpp::Node,表示这是一个 ROS 2 节点类
    成员函数:
        构造函数:初始化节点、创建定时器和发布者
        timer_callback:定时触发,发布消息
    成员变量:
        command_publisher_:发布器,发布 std_msgs::msg::String 类型的消息
        timer_:定时器,定时调用 timer_callback()
    
主函数:
    调用 rclcpp::init 进行初始化。
    创建 TopicPublisher01 节点对象。
    使用 rclcpp::spin 让节点保持运行。
    结束时调用 rclcpp::shutdown 关闭节点

整体流程为:

1.main函数中启动节点

2.调用构造函数创建TopicPublisher01 节点对象,名称为“topic_publisher_01”

3.创建 Publisher (发布者),名称为command,消息队列为10

4.创建 Timer (定时器),500ms进行触发

5.Timer 定时触发

6.程序终止

1.启动节点

rclcpp::init(argc, argv)

初始化 ROS 2 客户端库,解析命令行参数

2.创建节点

auto node = std::make_shared<TopicPublisher01>("topic_publisher_01");

使用make_shared来创建一个TopicPublisher01的节点,传入节点名称"topic_publisher_01',这里调用了TopicPublisher01类的构造函数TopicPublisher01(std::string name)

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));
    }

进入构造函数后,使用RCLCPP_INFO函数,用于将日志消息输出到终端,我们就能在命令行中

ROS2_CAN项目是一套专为ROS2环境设计的CAN总线通信工具包。该工具包集成了can_utils组件,支持用户完成CAN通信的初始化设置、参数调整、状态监控及异常排查等操作。同时,项目提供了基于ros2_socketcan的收发实例代码,为在Linux平台利用SocketCAN接口进行CAN数据交换提供了实用范例。在Linux系统中部署CAN接口通常涉及较多技术细节,而本项目通过预置的工具与示例显著简化了这一过程,使用户能够快速建立通信链路,避免重复编写底层代码。这种集成化方案降低了开发难度,让技术人员能更集中于核心功能的实现。 基于ROS2架构,本项目继承了其分布式节点通信、灵活的服务机制以及高效的消息传递体系,从而在CAN总线通信中实现了良好的可扩展性、可靠性与模块化特性。设计时兼顾了不同开发阶段的需求,无论是原型验证还是实际部署,用户均可根据具体情况选用相应的工具与示例资源。项目附带的文档材料(如附赠资源.docx与说明文件.txt)提供了完整的使用指南,涵盖工具配置步骤、项目部署建议以及常见问题处理方法。这些文档有助于不熟悉ROS2或CAN通信的开发者快速上手,有效缩短学习周期。 总体而言,ROS2_CAN项目通过其在ROS2框架下集成的CAN通信工具与示例,为Linux系统中的CAN接口配置提供了专业且高效的解决方案。借助项目提供的资源,开发人员能够便捷地实现CAN通信功能,提升工作效率与项目实施的可靠性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值