ROS2中编译RS16激光扫描器驱动包rslidar_sdk时报错error: ‘variant’ in namespace ‘std’ does not name a template type

0. 实验环境

1)PC:虚拟机

2)OS:ubuntu22.04

2)  ROS:ros2, humble

3)激光扫描器:速腾聚创RS16,16线

1. 问题描述:

在ROS2中,为了使用速腾聚创RS16激光扫描器进行rviz2的点云展示。使用了速腾聚创官网提供的驱动包driver,然后,使用如下命令进行编译。

colcon build --packages-select rslidar-sdk rslidar-msg

其中rslidar_msg能正常编译,而rslidar_sdk报错,如下所示:

部分输出结果如下:

Starting >>> rslidar_msg
Finished <<< rslidar_msg [0.76s]                     
Starting >>> rslidar_sdk
--- stderr: rslidar_sdk                               
=============================================================
-- POINT_TYPE is XYZI
=============================================================
====&#
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我之前的程序存在一些问题,导致编译出现了错误。在ROS的最新版本,`rosout`已经被移除了,因此您需要使用`rosgraph_msgs`的`Log`消息来代替。以下是更新后的程序: ```cpp #include <ros/ros.h> #include <ros/console.h> #include <rosgraph_msgs/Log.h> #include <iostream> int main(int argc, char** argv) { ros::init(argc, argv, "log_listener"); ros::NodeHandle nh; // 设置日志级别为DEBUG if (ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug)) { ros::console::notifyLoggerLevelsChanged(); } // 订阅/rosout话题 ros::Subscriber sub = nh.subscribe("/rosout", 1000, [](const rosgraph_msgs::Log& msg) { // 解析日志级别 std::string level_string; switch (msg.level) { case ros::console::levels::Debug: level_string = "\033[34m[DEBUG]\033[0m"; break; case ros::console::levels::Info: level_string = "\033[32m[INFO]\033[0m"; break; case ros::console::levels::Warn: level_string = "\033[33m[WARN]\033[0m"; break; case ros::console::levels::Error: level_string = "\033[31m[ERROR]\033[0m"; break; case ros::console::levels::Fatal: level_string = "\033[35m[FATAL]\033[0m"; break; default: level_string = "\033[0m"; } // 解析文件名和代码行数 std::string location_string = msg.file + "-" + std::to_string(msg.line); // 解析std::string time_string = ros::Time(msg.header.stamp).toBoost().time_since_epoch().count(); // 输出日志 std::cout << level_string << "[" << location_string << "][" << time_string << "]: " << msg.msg << std::endl; }); ros::spin(); return 0; } ``` 更新后的程序使用`rosgraph_msgs`的`Log`消息来代替旧版本的`rosout`消息,同也更新了Lambda表达式的函数参数类型。希望这个程序能够解决您遇到的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值