ROS 机器人技术 - 解决 ROS_INFO 不能正确输出 string 的问题!
一、输出「??」
项目调试一个节点,打印 ROS 信息时发现设置的节点名称都是问号:
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);

看了下代码发现是自己把节点名称设置为 const,但是没有正确初始化 const 变量,导致输出了「??」,C++ 语法都忘记了,太菜了,以下是第一种初始化 const 的方法:
// 1. 先在类中定义
private:
const std::string kNodeName;
// 2. 构造函数初始化列表后初始化
ClassName(): kNodeName("node_name")
第二种方法是加上 static 关键字:
// 1. 在类中定义静态 const 变量
private:
static const std::string kNodeName;
// 2. 在类外进行 const 初始化
const std::string ClassName::kNodeName = "node_name";
我用的第二种方式,因为这样的 const 看起来比较直观,在构造函数初始化列表中赋值不容易被看到,以下是我修改后的代码:
// 1. lidar_camera_fusion.h
private:
static const std::string kNodeName;
// 2. lidar_camera_fusion.cpp
const std::string LidarCameraFusion::kNodeName = "lidar_camera_fusion";
// 3. ROS_INFO
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);
总结下 const 变量在类中的用法:
- 构造函数参数初始化列表中初始化 const 变量
- 将 const 变量声明为 static 类型,然后在类的外部初始化
二、输出乱码
正确初始化 const 变量后,发现 INFO 又输出乱码:

找了下资料发现是因为 ROS_INFO 不能直接输出 std::string,需要转成 c_str:
// 3. ROS_INFO
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName.c_str());
第二个乱码的原因是因为把 %s 错写成大写的 %S了,改回来即可:

// 3. 错写成大写的 %S 了
ROS_INFO("[%S]: camera_extrinsic_mat", kNodeName.c_str());

ROS 机器人技术 - 解决 ROS_INFO 不能正确输出 string 的问题!的更多相关文章
- ROS 机器人技术 - 广播与接收 TF 坐标
上次我们学习了 TF 的基本概念和如何发布静态的 TF 坐标: ROS 机器人技术 - TF 坐标系统基本概念 ROS 机器人技术 - 静态 TF 坐标帧 这次来总结下如何发布一个自定义的 TF 坐标 ...
- ROS机器人程序设计(原书第2版)补充资料 教学大纲
ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...
- ROS机器人星火计划公开课总结
非常荣幸参加了两次星火计划公开课(上海站), 感谢NXROBO.EXBOT以及所有支持ROS机器人星火计划的小伙伴们. ----废话开始,与课程总结无关,可跳过---- 在国内20多年的求学生涯以及2 ...
- ros机器人开发概述
1. ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...
- ROSCon 2016视频和幻灯片发布 ROS机器人操作系统重要参考资料
ROSCon 2016视频和幻灯片发布 By Tully Foote on 十月19,2016 7:28 AM 全部PPT下载地址:http://pan.baidu.com/s/1gf2sn2F RO ...
- ROS机器人程序设计-学习小结-
ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...
- ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...
- ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门
ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...
- 双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)
使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部 ...
随机推荐
- Python dict字典方法完全攻略(全)
我们知道,Python 字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如: >>> dir(dict)['clear', 'copy', ' ...
- javascript 内存和连等赋值
JavaScript深入之内存空间详细图解 https://juejin.im/post/5bf4c3eff265da613356348a 理解javascript中的连续赋值 https://www ...
- 五、数据类型(1):整数&&带小数点的数
1.整数 int printf("%d",...); scanf("%d",&...); 2.带小数点的数 double printf("%f ...
- PHP 获取上个月1号和上个月最后一天时间戳,下个月1号和下个月最后一天的时间戳
// 上个月的时间戳 $thismonth = date('m'); $thisyear = date('Y'); if ($thismonth == 1) { $lastmonth = 12; $l ...
- C#用Linq对列表/集合进查询
namespace ---> System.Linq; 使用&&进行多条件查询 也可以直接使用Lambda表达式+扩展方法的写法:
- web自动化之鼠标事件
鼠标操作from selenium.webdriver.common.action_chains import ActionChains通过ActionChains 类来完成鼠标操作主要操作流程:1. ...
- 软件攻城狮究级装B指南
引言 装B于无形,随性而动,顺道而行,待霸业功成之时,你会发现:装B是牛B最好的的试金石. -- SuperDo 第一章.人间兵器(准备工具) <论语·魏灵公>:“工欲善其事,必先利其器. ...
- [工具推荐]002.SoftOrbits Sketch Drawer使用教程
SoftOrbits Sketch Drawer是一款简单易用的照片素描化软件,内置多种预设方案以及丰富的自定义细节. 只需要一次轻轻的鼠标点击,就可以帮助你迅速的将家人的照片转换为黑白或者彩色的素描 ...
- [工具-008] C#邮件发送系统
邮件发送系统很多,但是我这边给大家展示下我最近开发的一款邮件发送系统,有参照网上的一个兄弟的界面,进行了升级,界面如下. 从界面上我们可以看到了该邮件系统有如下功能: 1)服务器的设置 2)发件人的设 ...
- thymeleaf怎么在页面上面格式化时间
th:value="${#dates.format(后端传递的时间,‘yyyy-MM-dd HH:mm:ss’)}"