把ros消息转换成中文输出

                      把ros消息转换成中文输出

c++实现

发布

//发布性能评估数据 /trilateration_time_log
void publishTrilaterationLog(
        const int reflectorPanelPoints_size,
        const double duration_count,
        const std::string& resultType,
        const std::string& resultChineseMessage,
        const std::string& resultENMessage,
        const std::string& className,
        int   classLine,
        const int time_log_fig,
        const int matchokReflectorPanelPointSize

) {

/*

    选择性能评估数据   /trilateration_time_log
    int time_log_fig_=-1;
    -1:全部关闭,0:全部打开 ,  -2:只打开 "1:FindCircle拟定圆心坐标,6:匹配算法,9:位姿推算" 3个性能评估数据。
    1:FindCircle: 通过雷达强度数据,使用三角函数拟定圆心坐标,并存入反光板数据缓存中
    2:匹配数据: 通过得到的圆心坐标,在已经匹配成功的反光板数据缓存中匹配数据
    3:匹配数据: 通过得到的圆心坐标,在储存所有的反光板数据缓存中匹配数据
    4:匹配数据: 通过得到的圆心坐标,在反光板数据缓存中匹配数据
    5:匹配数据: 匹配走广度优先算法 或 匹配走广度优先算法 + 优先使用匹配好的反光板数据
    6:匹配算法:从查找圆心到匹配完成需要的总执行时间
    7:位姿推算: 基于之前已经匹配上了反光板,推算位姿
    8:位姿推算: 经典三边定位最小二乘法,推算位姿
    9:位姿推算: 基于之前已经匹配上了反光板 + 经典三边定位最小二乘法,推算位姿
*/

    trilateration::trilateration_read_time_log trilateration_read_time_log2;
    trilateration_read_time_log2.result_type = resultType;
    trilateration_read_time_log2.result_chinese_message = resultChineseMessage;
    trilateration_read_time_log2.result_EN_message = resultENMessage;
    trilateration_read_time_log2.className = className;
    trilateration_read_time_log2.classLine = classLine;
    trilateration_read_time_log2.num_points = reflectorPanelPoints_size;
    trilateration_read_time_log2.execution_time = duration_count;
    trilateration_read_time_log2.time_log_fig=time_log_fig;
    trilateration_read_time_log2.matchokReflectorPanelPointSize=matchokReflectorPanelPointSize;//队列数量
    time_log_pub_.publish(trilateration_read_time_log2);
}


         //发布性能评估数据 10:位姿推算: 所有使用默认的 tf_last_odom_to_map_transform_ 数据 发布的移动机器人坐标
                        if(time_log_fig_==0||time_log_fig_==10) {//-1:全部关闭,0:全部打开 ,  -2:只打开 "1:FindCircle拟定圆心坐标,6:匹配算法,9:位姿推算" 3个性能评估数据。 ,1:打开第一个,2:打开第二个 3:.....
                            std::string resultType = "trilateration_execution";
                            std::string resultChineseMessage = " 使用上一次 mapTodom -> tf_last_odom_to_map_transform_ 的tf数据,发布移动机器人的位置坐标。[mutex]";
                            std::string resultENMessage = "Use the previous mapTodom ->tf_1ast_odom_to-map_transform_ tf data to publish the position coordinates of the mobile robot. [mutex]";
                            std::string className = __FILE__; // 更改为实际的文件名
                            int classLine = __LINE__; // 更改为实际的行号
                            ///trilateration_time_log
                            publishTrilaterationLog(0, duration.count(), resultType, resultChineseMessage, resultENMessage, className, classLine,time_log_fig_,matchokReflectorPanelPoint_.size());
                        }

接收 【重点看接收转码】

#include "ros/ros.h"
#include "trilateration/trilateration_read_time_log.h"
#include <locale>
#include <codecvt>
#include <string>
#include <sstream>

// 将 Unicode 转义字符串解码为 UTF-8 编码的中文字符串
std::string decodeUnicodeString(const std::string& unicode_string)
{
    std::string decoded_string;
    size_t pos = 0;
    size_t last_pos = 0;

    while ((pos = unicode_string.find("\\u", last_pos)) != std::string::npos) {
        decoded_string.append(unicode_string, last_pos, pos - last_pos);
        std::string hex_code = unicode_string.substr(pos + 2, 4);
        unsigned int code_point;
        std::stringstream ss;
        ss << std::hex << hex_code;
        ss >> code_point;
        char utf8_char[5] = {0};
        if (code_point <= 0x7F) {
            utf8_char[0] = code_point;
        } else if (code_point <= 0x7FF) {
            utf8_char[0] = 0xC0 | (code_point >> 6);
            utf8_char[1] = 0x80 | (code_point & 0x3F);
        } else if (code_point <= 0xFFFF) {
            utf8_char[0] = 0xE0 | (code_point >> 12);
            utf8_char[1] = 0x80 | ((code_point >> 6) & 0x3F);
            utf8_char[2] = 0x80 | (code_point & 0x3F);
        } else {
            utf8_char[0] = 0xF0 | (code_point >> 18);
            utf8_char[1] = 0x80 | ((code_point >> 12) & 0x3F);
            utf8_char[2] = 0x80 | ((code_point >> 6) & 0x3F);
            utf8_char[3] = 0x80 | (code_point & 0x3F);
        }
        decoded_string += std::string(utf8_char);
        last_pos = pos + 6;
    }

    decoded_string.append(unicode_string, last_pos);
    return decoded_string;
}

// 订阅的回调函数
void chatterCallback(const trilateration::trilateration_read_time_log::ConstPtr& msg)
{
    // 将 Unicode 转义字符串解码为中文字符串
    std::string decoded_chinese_message = decodeUnicodeString(msg->result_chinese_message);

    // 输出所有字段的数据
    ROS_INFO("Time Log Fig: %d", msg->time_log_fig);
    ROS_INFO("Result Type: %s", msg->result_type.c_str());
    ROS_INFO("Class Name: %s", msg->className.c_str());
    ROS_INFO("Class Line: %d", msg->classLine);
    ROS_INFO("Decoded Chinese Message: %s", decoded_chinese_message.c_str());
    ROS_INFO("English Message: %s", msg->result_EN_message.c_str());
    ROS_INFO("Result Message: %s", msg->result_message.c_str());
    ROS_INFO("Number of Points: %d", msg->num_points);
    ROS_INFO("Match OK Reflector Panel Point Size: %d", msg->matchokReflectorPanelPointSize);
    ROS_INFO("Execution Time: %s", msg->execution_time.c_str());
}

int main(int argc, char **argv)
{
  //  setlocale(LC_ALL, "");  //中文
    setlocale(LC_CTYPE,"zh_CN.utf8");
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;

    ros::Subscriber sub = n.subscribe("/trilateration_time_log", 1000, chatterCallback);

    ros::spin();

    return 0;
}

python实现

import json

unicode_string = r"\u901A\u8FC7\u96F7\u8FBE\u5F3A\u5EA6\u6570\u636E\uFF0C\u5E76\u5B58\u5165\u53CD\u5149\u677F\u6570\u636E\u7F13\u5B58\u4E2D"
decoded_string = unicode_string.encode().decode('unicode_escape')
print(decoded_string)

 

 控制台输出结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识点(蓝桥杯python科目个人复习计划69)

做些基础题 第一题&#xff1a;微生物增值 题目描述&#xff1a; 假设有两种微生物x和y。 x出生后每隔3分钟分裂一次&#xff08;数目加倍&#xff09;&#xff0c;y出生后每隔2分钟分裂一次&#xff08;数目加倍&#xff09;。 一个新出生的x&#xff0c;半分钟之后吃掉一…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

初识C++|类与对象(上)

&#x1f36c; mooridy-CSDN博客 &#x1f9c1;C专栏&#xff08;更新中&#xff01;&#xff09; 1. 类的定义 1.1 类定义格式 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。 类体中内容…

【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务

目录 0.简介 1.环境 2.知识点 3.详细过程 1&#xff09;创建空项目 2&#xff09;添加Web表单 3&#xff09;使用Web表单的GUI设计 4&#xff09;添加服务引用 5&#xff09;在Web的button函数中调用服务&#xff0c;获取PI值 6&#xff09;测试 0.简介 本文属于一个…

如何直接套用模板,快速搭建一个3D展示页面?

随着Web3D技术的飞速进步&#xff0c;网页设计实现了从平面二维到立体三维的华丽蜕变&#xff0c;这一变革为品牌营销领域注入了前所未有的互动活力。多样化的3D营销手段&#xff0c;不仅极大地吸引了消费者的目光&#xff0c;还显著提升了品牌形象与销售量&#xff0c;助力企业…

各类专业技术的pdf电子书

从业多年&#xff0c;收集了海量的pdf电子书籍&#xff0c;感兴趣的私聊。

探索智慧校园德育系统的学生考核之道

在当代教育领域&#xff0c;智慧校园德育管理系统的学生考核功能正逐渐成为推动学生全面发展的重要引擎。它不仅革新了传统德育评价的方式&#xff0c;还深度融入了学生日常的学习生活&#xff0c;成为连接学生、教师与学校管理层之间沟通与理解的桥梁。德育考核功能的核心在于…

Excel办公技巧:制作二级联动下拉菜单

分享制作二级联动下拉菜单的方法&#xff0c;即使数据有增删&#xff0c;菜单也能自动更新&#xff01; 可以通过先定义名称&#xff0c;再结合数据验证&#xff0c;来做二级联动下拉菜单。 1. 准备数据 首先&#xff0c;我们需要准备好要进行二级联动下拉菜单的数据&#xff…

【大模型入门】LLM-AI大模型介绍

大语言模型 (LLM) 背景 &#x1f379;大语言模型 (Large Language Model) 是一种人工智能模型, 它们通常包含数千亿甚至更多的参数&#xff0c;并在大规模数据集上进行训练。大语言模型可以处理多种自然语言任务&#xff0c;如文本分类、问答、翻译、对话等等。 自然语言模型…

识别 TON 生态系统中前10种加密资产,以bitget 钱包为例

元描述&#xff1a;想要找到下一个 100 倍加密货币投资&#xff1f;请密切关注这篇文章&#xff1b;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON&#xff08;开放网络&#xff09;生态系统正在蓬勃发展&#xff01;这是一个充满激动人心的…

【雅思备考IELTS】美文阅读 艾米莉·勃朗特《呼啸山庄》Wuthering Heights by Emily Bronte

Reading Materials for IELTS (from books that I love) Episode 2 2024/7/15 By James Lee 说明&#xff1a; 奇崛、跌宕、爱恨分明&#xff0c;英国女作家艾米莉 勃朗特&#xff08;Emily Bronte&#xff0c;1818-1848&#xff09;短暂一生当中出版的唯一一本小说&#xff…

typescript新规范及vue3常用的属性解析【2024】

文章目录 如在vue中 使用tyescript来规范定义类型解释一下 < >的意思 定义 了 personList &#xff1a;是个数组 Array 且要告诉里面每一项 结构长什么样 Array<PersonInter>definepropsvue3中的hooks组件父子组件 方法、数据、相互调用 如在vue中 使用tyescript来…

C语言课程回顾:十、C语言之 指针

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C语言之 指针 10 指针10.1 地址指针的基本概念10.2 变量的指针和指向变量的指针变量10.2.1 定义一个指针变量10.2.2 指针变量的引用10.2.3 指针变量作为函数参数10.2.4 指针变…

嵌入式热门领域有哪些?

嵌入式热门领域有哪些? 当前&#xff0c;嵌入式行业正处于快速发展阶段&#xff0c;并在多个领域呈现出蓬勃的热度。 物联网 物联网作为目前嵌入式行业的炙手可热领域之一&#xff0c;已经在各行业展现出了强劲的增长势头。嵌入式系统通过物联网连接各种物理设备和传感器&…

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析?

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析&#xff1f; Prompt模板&#xff1a; Initial Request: 初始请求&#xff1a; I have uploaded data of the number of Software Engineering Jobs in the US since May 2020. I need different visual creative…

AD复制原理图时候怎么保留原理图的元器件编号

AD复制原理图时候&#xff0c;默认复制过去所有编号全部丢失变成“&#xff1f;”&#xff0c;怎么保留原理图的元器件编号&#xff1f; 1.右上角打开设置&#xff1b; 2. Schematic---》Graphical Editing---》去勾选“选项&#xff1a;粘贴时重置元件位号Reset Parts Design…

卷积加速算法img2col、Winograd、FFT

FFT 空间域中矩阵的卷积算子&#xff0c;实际等于频率域中两个矩阵元素相乘。但卷积的方向是相反的。 通常情况下&#xff0c;feature的尺寸要比卷积的尺寸大很多&#xff0c;如果对两者进行快速傅里叶变换的话&#xff0c;得出来的两个矩阵大小不一样&#xff0c;不能进行对…

【JS红宝书学习笔记】第25章 客户端存储

第25章 客户端存储 Cookie HTTP是无状态的&#xff0c;也就是说&#xff0c;你这次访问服务器&#xff0c;关闭后再次访问服务器&#xff0c;服务器是意识不到又是你来访问的。 登录时&#xff0c;浏览器需要帮我们在每一次请求里加入用户名和密码&#xff0c;这样才能做到保…

盲盒一番赏小程序:开启惊喜之旅,探索无限创意!

在这个充满无限想象与惊喜的时代&#xff0c;盲盒已成为连接心灵与梦想的奇妙桥梁。为了将这份独特的乐趣与探索精神传递给每一位热爱生活、追求新鲜的你&#xff0c;我们自豪地推出了“盲盒一番赏”小程序——一个集创意、趣味、互动与社交于一体的盲盒新纪元&#xff0c;邀您…

三大知名向量化模型比较分析——m3e,bge,bce

先聊聊出处。 M3E 是 Moka Massive Mixed Embedding 的缩写&#xff0c; Moka&#xff0c;此模型由 MokaAI 训练&#xff0c;开源和评测&#xff0c;训练脚本使用 uniem &#xff0c;评测 BenchMark 使用 MTEB-zhMassive&#xff0c;此模型通过千万级 (2200w) 的中文句对数据…