首页 > 解决方案 > roslaunch 存储文件创建/存储错误

问题描述

在执行 rosrun 时,正在生成存储文件“storage.csv”并存储数据,但在执行 roslaunch 时,甚至没有生成文件“storage.csv”。每当我进行 roslaunch 时,两个节点都在运行,但在订阅者中,我试图打开的 .csv 文件没有打开。但是,每当我使用talker 和 listener 对同一个节点进行 rosrun 时,我的 .csv 文件就会生成并保存。请让我知道在 roslaunch 期间是否有其他方法可以存储数据,因为我必须在 raspi 4 中使用它,甚至我想知道为什么我无法使用 roslaunch 命令打开 .csv 文件是他们的一些问题代码或其他

说话者

//header
#include "ros/ros.h"
#include "std_msgs/String.h"

#include <sstream>

//main
int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker_node");//talker node
  ros::NodeHandle n;
  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1);//publisher
  ros::Rate loop_rate(10);//loop rate
  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count; //output
    msg.data = ss.str();
    ROS_INFO("%s", msg.data.c_str());
    chatter_pub.publish(msg);//publish

    ros::spinOnce();

    loop_rate.sleep();

    ++count;
  }

  return 0;
}
// %EndTag(FULLTEXT)%

听众

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

std::ofstream MyFile; // define object

//callback function
void storage_callback(const std_msgs::String::ConstPtr& msg)
{
    MyFile.open("storage_csv.csv",std::ios::app);//file open
    MyFile <<msg->data<<"\n";

         ROS_INFO("I recieve: [%s]", msg->data.c_str());
                    MyFile.close();
}


//main
int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener_node"); // creating node
    ros::NodeHandle n;
    ROS_INFO("Storage code");

    
    MyFile.open("storage_csv.csv");//,std::ios::app);
    MyFile << "listner data."<<"\n";    
    MyFile.close();

ros::Subscriber sub = n.subscribe ("/chatter", 1, storage_callback);//subscriber

ros::spin();
    return 0;
}
//%end text%

cmake更新

add_executable(talker1_executable src/talker.cpp)
target_link_libraries(talker1_executable ${catkin_LIBRARIES})

add_executable(listener1_executable src/listener.cpp)
target_link_libraries(listener1_executable ${catkin_LIBRARIES})

启动文件

<launch>

<node name="takler_node" pkg="storage" type="talker1_executable" output="screen"/>
<node name="listener_node" pkg="storage" type="listener1_executable" output="screen"/>

</launch>

标签: ros

解决方案


推荐阅读