ros入门(4)使用C++编写Subscriber订阅者节点

文章讲述了在ROS环境中使用C++编写节点时,遇到中文字符输出问题的解决过程,包括如何使用ROS_INFO和ROS_WARN函数以及设置LC_ALL环境变量以支持中文字符的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cd catkin_ws/src/

catkin_create_pkg atr_pkg rospy roscpp std_msgs

#include<ros/ros.h>

#include<std_msgs/String.h>

void chao_callback(std_msgs::String msg)

{

printf(msg.data.c_str());

printf("\n");

}

int main(int argc, char *argv[])

{

ros::init(argc,argv,"ma_node");

ros::NodeHandle nh;

ros::Subscriber sub=nh.subscribe("kuaishangchekaiheiqun",10,chao_callback);

while (ros::ok())

{

ros::spinOnce();

}

return 0;

}

add_executable(ma_node src/ma_node.cpp)

target_link_libraries(ma_node

${catkin_LIBRARIES}

)

roscore

rosrun ssr_pkg chao_node

rosrun atr_pkg ma_node

优化和调整

#include<ros/ros.h>

#include<std_msgs/String.h>

void chao_callback(std_msgs::String msg)

{

// printf(msg.data.c_str());

// printf("\n");

ROS_INFO(msg.data.c_str());

}

int main(int argc, char *argv[])

{

ros::init(argc,argv,"ma_node");

ros::NodeHandle nh;

ros::Subscriber sub=nh.subscribe("kuaishangchekaiheiqun",10,chao_callback);

while (ros::ok())

{

ros::spinOnce();

}

return 0;

}

        这是因为ROS_INFO()的编码方式受程序的Locale环境设置影响一般设置会让一些输出函数只支持英文字符的显示。

解决方案

将环境设置为中文环境集

setlocale(LC_ALL,"");(一般中文版ubuntu设置)

如果是英文版的ubuntu setlocale(LC_ALL,"zh_CN.UTF-8");

#include<ros/ros.h>

#include<std_msgs/String.h>

void chao_callback(std_msgs::String msg)

{

// printf(msg.data.c_str());

// printf("\n");

ROS_INFO(msg.data.c_str());

}

int main(int argc, char *argv[])

{

setlocale(LC_ALL,"");

ros::init(argc,argv,"ma_node");

ros::NodeHandle nh;

ros::Subscriber sub=nh.subscribe("kuaishangchekaiheiqun",10,chao_callback);

while (ros::ok())

{

ros::spinOnce();

}

return 0;

}

订阅yao_node

#include<ros/ros.h>

#include<std_msgs/String.h>

void chao_callback(std_msgs::String msg)

{

// printf(msg.data.c_str());

// printf("\n");

ROS_INFO(msg.data.c_str());

}

void yao_callback(std_msgs::String msg)

{

// printf(msg.data.c_str());

// printf("\n");

ROS_WARN(msg.data.c_str());

}

int main(int argc, char *argv[])

{

setlocale(LC_ALL,"");

ros::init(argc,argv,"ma_node");

ros::NodeHandle nh;

ros::Subscriber sub=nh.subscribe("kuaishangchekaiheiqun",10,chao_callback);

ros::Subscriber sub_2=nh.subscribe("gie_gie_dai_wo",10,yao_callback);

while (ros::ok())

{

ros::spinOnce();

}

return 0;

}

rqt_graph

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值