sakusakupannda
@sakusakupannda

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Segmentation fault(core dumped)のエラーが出る

Q&A

Closed

解決したいこと

ROSでメッセージのやり取りをしたいのですが,動かしてみると「Segmentation fault」とエラーが出ます.解決方法を教えてほしいです.

該当するソースコード

sensor_msgs/sensor.msg
int16 right_forward
int16 right_side
int16 left_side
int16 left_forward
myros/lightsensor.cpp
#include "ros/ros.h"
#include "std_msgs/Int16.h"
#include "sensor_msg/LightSensorValues.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <cstdlib>
#include <algorithm>

int main (int argc, char **argv)
{
        ros::init(argc, argv, "light_sensor");
        ros::NodeHandle n;
        ros::Publisher value_trans =
                n.advertise<sensor_msg::LightSensorValues>("SensorValues",1000);
        double freq =1;

        n.getParam("light_sensor_freq",freq);
        if(freq<0){freq = 1;}
        ros::Rate loop_rate(freq);
        std::cout<<"freq="<<freq<<std::endl;

        std::string devfile("/dev/rtlightsensor0");
        std::vector<std::string> data;
        std::string str;

        std::ifstream light_file(devfile);

        if(!light_file.is_open()){
                ROS_INFO("Could not open the file");
                return 0;
        }else{
                ROS_INFO("open");}

        while(ros::ok())
        {
                while(getline(light_file, str)){
                                data.push_back(str);
                                }

                sensor_msg::LightSensorValues lsv;
                int d1,d2,d3,d4;
                d1 = stoi(data[0]);
                d2 = stoi(data[1]);
                d3 = stoi(data[2]);
                d4 = stoi(data[3]);

                lsv.right_forward = d1;
                lsv.right_side = d2;
                lsv.left_side = d3;
                lsv.left_forward = d4;
                value_trans.publish(lsv);
                ros::spinOnce();
                loop_rate.sleep();
        }        
        return 0;
}

やりたいこと

/dev/rtlightsensor0のファイルを開くことが出来たんですが,ファイルから得られる4つの値をstring型で受け取って,int型に変換したくて関数stoiを使ったのですが.エラーが出ました.rosrunした実行結果を下に載せておきます.

freq=1
[ INFO] [1700457526.161698436]: open
Segmentation fault (core dumped)
0

1Answer

追記です./dev/rtlightsensor0のファイルについてですが.
4つの値が1行で[13 2 65 41]みたいになっていて.これをdata[0]からdata[3]に振り分けるようにしたいです.

0Like

Comments

  1. getline(light_file, str)で、str"13 2 65 41"が入るとすると、data[1]の参照でSegmentation faultになりませんか。

    getline(light_file, str, ' ')ですね。


    追伸;

    「追記」を回答に書くのではなく、「編集」で元の説明文に追記した方がよいです。

  2. @sakusakupannda

    Questioner

    @nak435さん,アドバイスのおかげで無事動作できました!!
    ありがとうございます.

  3. お役に立てて何よりです。
    解決であれば、当Q&Aをクローズしていただければと思います。

Your answer might help someone💌