【ros2】ros melodic迁移到ros2 dashing过程中碰到的问题及解决方法

news2024/11/17 0:47:13

序言

  • 总结踩坑经历,以利他人

1. error: forming pointer to reference type … &

  • 报错原因: ros2回调函数的参数不能是引用形式 &,需要去除&

  • 解决方法:

    • 如果是指针引用,直接去除引用

      void Callback(const your_topic_msgs::ConstPtr &msg)修改为
      void Callback(const your_topic_msgs::ConstPtr msg)
      
    • 如果是普通引用,去掉&并使用指针参数

      void Callback(const your_topic_msgs::SubStruct& msg)修改为
      void Callback(const your_topic_msgs::SubStruct::ConstPtr msg)
      

      ConstPtr为ros2消息头文件中重定义的消息类型的const指针

2. error: no match for ‘operator=’ (operand types are ‘publisher xxx’ and ‘publisher::shared_ptr’

  • 报错的代码:

    rclcpp::Publisher<your_msg> pub_;
    pub_ = handler->create_publisher<your_msg>(/your topic”, 1);
    
  • 报错原因: pub_声明的类型不对,应该声明为shared_ptr,即
    rclcpp::Publisher<your_msg>::SharedPtr pub_;

3. boost::system::system_category() 或者 boost::system::generic_category()

  • 报错的代码:

    在这里插入图片描述

  • 报错原因: 找不到boost方法的实现

  • 解决方法: 添加boost功能包,并添加头文件+库文件的搜索路径

    find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem)
    include_directories(untitled ${Boost_INCLUDE_DIRS})
    link_directories(untitled ${Boost_LIBRARY_DIRS})
    target_link_libraries(untitled ${Boost_LIBRARIES})
    

4. undefined reference to ‘rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_message_type_support_handle<自定义消息名字>’

  • 报错的代码:

    在这里插入图片描述

  • 报错原因: 链接生成可执行文件阶段,找不到函数实现。通常是.a或者.so(函数定义)的链接有问题

  • 解决方法:

    • 将编译好的install目录(包含include+share+lib)拷贝到项目里。install包含头文件、库文件以及.cmake配置文件等
    • find_package: 中添加功能包,名字就是cmakelists.txt中的project_name,如perception_msgs
    • include_directories:中添加头文件路径,your_path_to_msg/include/
    • target_link_libraries: 中添加库文件路径,因为find_package(your_pkg)后都会产生环境变量 your_pkg_INCLUDE_DIRS和your_pkg_LIBRARIES,添加消息库文件如下 在这里插入图片描述

5. 构造函数报错error: no matching function for call to ‘rclcpp_lifecycle::LifecycleNode::LifecycleNode()’

  • 报错的代码: 继承自rclcpp_lifecycle::LifecycleNode的子类构造函数报错

    在这里插入图片描述
    在这里插入图片描述

  • 报错原因: 基类中没有不带参数的构造函数,这个时候需要调用基类构造函数,然后又没有显示调用基类中带参的构造函数,就会出现该报错

  • 解决方法: 显示调用基类的构造函数,从而初始化从基类中继承来的成员变量。本问题解决如下

    在这里插入图片描述

  • 注:

    当基类中只声明了带参构造函数的时候要特别注意,需要显示调用基类构造函数;
    当基类中带参构造函数参数都有默认值时,在派生类中也可以不用显示调用基类构造函数;
    当基类中既有无参又有有参构造函数时,当不显示调用,则默认调用基类无参构造函数。

6. error: no matching function for call to ‘rclcpp::executors::SingleThreadedExecutor::add_node()’

  • 报错的代码: LifecycleYourNode继承自rclcpp_lifecycle::LifecycleNode这一行调用时报错如下

    在这里插入图片描述
    在这里插入图片描述

  • 报错原因: 参数类型不匹配,executor.add_node(argument)的参数类型是std::shared_ptr<rclcpp::Node>而不是std::shared_ptr<rclcpp_lifecycle::LifecycleNode>

  • 解决方法:

    在这里插入图片描述


【参考文章】
移植到ros2 foxy碰到的报错
问题2参考文章1
问题2参考文章2
问题3参考文章1
问题3参考文章2
问题5参考文章1
问题5参考文章2

created by shuaixio, 2023.05.03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

最近研究给微服务项目配置 ssl 证书&#xff0c;如此才可以对接微信小程序&#xff08;需要使用 https 请求&#xff09;。传统单体项目来说&#xff0c;首先往项目中添加证书文件&#xff0c;然后在配置文件中配置 ssl 证书路径、密码等相关信息&#xff1b;那么微服务这么多项…

机器学习强基计划8-5:图解局部线性嵌入LLE算法(附Python实现)

目录 0 写在前面1 流形学习2 局部线性嵌入算法2.1 什么是局部线性嵌入&#xff1f;2.2 算法原理推导 3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的…

基于学生成绩管理系统(附源代码及数据库)

基于Ecplise&#xff0c;jsp的学生成绩管理系统 目录 登录页面 系统主页 管理员账号管理 学生查询 课程管理 成绩管理 后台数据库 源代码下载&#xff08;含数据库&#xff09; 毕设项目专栏 分为以下四大板块&#xff1a; 系统用户管理: 包含管理员账号管理&#…

【一起撸个DL框架】5 实现:自适应线性单元

CSDN个人主页&#xff1a;清风莫追欢迎关注本专栏&#xff1a;《一起撸个DL框架》GitHub获取源码&#xff1a;https://github.com/flying-forever/OurDL 文章目录 5 实现&#xff1a;自适应线性单元&#x1f347;1 简介2 损失函数2.1 梯度下降法2.2 补充 3 整理项目结构4 损失函…

第二十七章 Unity碰撞体Collision(下)

本章节我们继续研究碰撞体&#xff0c;并且探索一下碰撞体与刚体之间的联系。我们回到之前的工程&#xff0c;然后给我们的紫色球体Sphere1也添加一个刚体组件。如下所示 此时&#xff0c;两个球体都具备了碰撞体和刚体组件。接下来&#xff0c;我们Play运行查看效果 我们发现&…

第二十六章 Unity碰撞体Collision(上)

在游戏世界中&#xff0c;游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如&#xff0c;攻击怪物则是主角与怪物的碰撞&#xff0c;触发机关则是主角与机关的碰撞。在DirectX课程中&#xff0c;我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复…

浅谈区块链1.0-比特币

1. 比特币解决的问题 高度自治&#xff1a;国际经济危机无国界贸易&#xff1a;不同国家进行的贸易或者不同平台进行贸易 不可窜改&#xff1a;例如银行交易可能会被窜改数据 隐私安全&#xff1a;传统汇款方式会暴露你的个人信息&#xff0c;一旦数据库被别人入侵&#xff0c…

android基础知识复习

架构&#xff1a; 应用框架层&#xff08;Java API Framework&#xff09;所提供的主要组件&#xff1a; 名称功能描述Activity Manager&#xff08;活动管理器&#xff09;管理各个应用程序生命周期&#xff0c;以及常用的导航回退功能Location Manager&#xff08;位置管理器…

SpringBoot整合Mybatis-plus实现多级评论

在本文中&#xff0c;我们将介绍如何使用SpringBoot整合Mybatis-plus实现多级评论功能。同时&#xff0c;本文还将提供数据库的设计和详细的后端代码&#xff0c;前端界面使用Vue2。 数据库设计 本文的多级评论功能将采用MySQL数据库实现&#xff0c;下面是数据库的设计&…

Boonz-KeygenMe#1(★★★)

运行程序 错误&#xff1a; 查壳 没有壳&#xff0c;是汇编写的程序 载入OD 前面是在读取输入内容&#xff0c;到这里开始做计算了 分析 首先遍历了用户名&#xff0c;计算结果保存在EBX&#xff0c;在存放到 0x40E0F8 对EBX中的值再次计算&#xff0c;最后结果保存到 …

JavaFX: Java音乐播放读取歌词

JavaFX: Java音乐播放读取歌词 1、lrc歌词文件2、解析lrc歌词2.1 读取每行歌词2.2 解析歌词时间标签Time-tag2.3 解析歌词标识标签ID-tags2.4 创建对象包含歌词相关信息 3、播放显示歌词** 相关文献 JavaFX: Java音乐播放 1、lrc歌词文件 lrc歌词文件的扩展名 1、标准格式&a…

图像处理:Retinex算法

目录 前言 概念介绍 Retinex算法理论 单尺度Retinex&#xff08;SSR&#xff09; 多尺度Retinex&#xff08;MSR&#xff09; 多尺度自适应增益Retinex&#xff08;MSRCR&#xff09; Opencv实现Retinex算法 SSR算法 MCR算法 MSRCR算法 效果展示 总结 参考文章 前…

基频建模方法总结

基频F0建模方法 语音合成领域需要对基频进行建模&#xff0c;具体到文语转换TTS、语音转换VC、情感语音转换EVC领域等。 语音合成F0 包括文语转换&#xff0c;情感语音转换 TTEF&#xff1a;text-to-emotional-features synthesis EVC&#xff1a;emotional voice conversio…

这些你熟知的 app 和服务,都用上了人工智能

从微软在 Microsoft 365 服务中全面整合 GPT-4 能力 &#xff0c;让 PPT、Word 文档、Excel 表格的制作变成了「一句话的事」&#xff0c;到 Adobe 刚刚发布 Adobe Firefly模型集合&#xff0c;让图形设计、字体风格、视频渲染乃至 3D 建模的门槛显著降低——你我熟知的那些工…

idea的快捷键

一.idea的快捷键: 递进选择&#xff1a;ctrl w复制行&#xff1a;ctrl d删除行&#xff1a;ctrl y大小写切换&#xff1a;ctrl shift u展开/折叠&#xff1a;ctrl shift 减号/加号向前/向后&#xff1a;ctrl <— / —>Live Template(例如 输入psvm会自动打出mai…

华为OD机试题,用 Java 解【最远足迹】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不要…

Python实战项目:手势识别控制电脑音量

今天给大家带来一个OpenCV的实战小项目——手势识别控制电脑音量 先上个效果图&#xff1a; 通过大拇指和食指间的开合距离来调节电脑音量&#xff0c;即通过识别大拇指与食指这两个关键点之间的距离来控制电脑音量大小 技术交流 技术要学会分享、交流&#xff0c;不建议闭…

石英晶体振荡器【Multisim】【高频电子线路】

目录 一、实验目的与要求 二、实验仪器 三、实验内容与测试结果 1、观察输出波形&#xff0c;测量振荡频率和输出电压幅度 2、测量静态工作点的变化范围(IEQmin~IEQmax) 3、测量当静态工作点在上述范围时输出频率和输出电压的变化 4、测量负载变化对振荡频率和输出电压幅…

SpringCloud:微服务保护之初识Sentinel

1.初识Sentinel Sentinel是阿里巴巴开源的一款微服务流量控制组件。Sentinel官网 Sentinel具有以下特征&#xff1a; 丰富的应用场景&#xff1a;Sentinel承接了阿里巴巴近 10 年的双十一大促流量的核心场景&#xff0c;例如秒杀&#xff08;即突发流量控制在系统容量可以承受…

JavaEE阶段测试复习

文章全部内容在个人站点内的置顶文章中,访问密码:AIIT 小凯的宝库 模块三、面向对象 继承: a. 单继承:Java只支持单继承,即一个子类只能有一个直接父类。但子类可以间接地继承多个父类。 b. 构造方法与继承:在子类中可以通过super()关键字调用父类的构造方法。如果子类没…