inter_姝 2024-11-08 23:32 采纳率: 0%
浏览 4

ros代码编程问题,无法显示消息内容


#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc,char **argv){

    ros::init(argc,argv,"talker");
    ros::NodeHandle n;

    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
    ros::Rate loop_rate(10);
   // int count = 0;
    while(ros::ok())
    {
        int count = 0;
        std_msgs::String msg;
        std::stringstream ss;
        ss <<"hello world"<<count;
        msg.data =ss.str();
        ROS_INFO( "%s",msg.data.c_str());
        chatter_pub.publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
        ++count;

    }
    return 0;
}

运行这个ros代码之后,发现ubuntu的终端显示不出消息内容,为该怎么解决呢?

img

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-11-08 23:41
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你的代码和图中的描述来看,终端中的消息看起来像是一些无法正常显示的乱码,这个问题可能是因为你发布消息的方式不正确导致的。在你的代码中,你试图发布一个字符串消息,但是你没有正确地设置字符串的内容。在你的代码中,字符串是通过字符串流 std::stringstream 来构建的,但在每次循环中,你都没有将新的字符串赋值给流对象,导致每次都只是输出相同的空字符串。因此你需要将生成字符串的逻辑重新设计一下。以下是修正后的代码示例:

    #include "ros/ros.h"
    #include "std_msgs/String.h"
    #include <sstream>
    
    int main(int argc,char **argv){
        ros::init(argc,argv,"talker");
        ros::NodeHandle n;
        ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
        ros::Rate loop_rate(1); // 将发布频率降低到每秒一次,便于观察结果
        std::stringstream ss; // 将字符串流对象移动到循环外部,以便重复使用
        while(ros::ok()){
            ss.str(""); // 清空字符串流的内容
            ss << "hello world count:" << count++; // 向字符串流中添加新的内容
            std_msgs::String msg; // 创建新的消息对象
            msg.data = ss.str(); // 将字符串流的内容赋值给消息对象的数据字段
            ROS_INFO("%s", msg.data.c_str()); // 打印消息内容到终端
            chatter_pub.publish(msg); // 发布消息
            ros::spinOnce(); // 处理所有挂起的回调和订阅等事件
            loop_rate.sleep(); // 按照指定的频率休眠一段时间,然后再次进入循环发布消息
        }
        return 0;
    }
    

    另外需要注意的是,在你的代码中计数变量 count 应该定义在循环外部,否则每次循环开始时都会被重置为 0。我已经在上面的修正代码中进行了相应的修改。此外,你可能需要将发布频率降低到每秒一次或更低,以便观察终端输出的结果。如果发布频率过高,可能会导致终端无法及时显示所有的消息。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月8日