PedroSG
PedroSG

Reputation: 506

ROS ERROR: segmentation fault (core Dumped)

I've been developing a face detection app with ROS to run on a Drone. The face detection code is the code that can be find on google and works fine but when I mixed it with ROS, I've been struggling with an error: segmentation fault (core dumped). I've tried to find error like using the wrong type of variables but unsuccessfully. Here is the code:

    while not rospy.is_shutdown():
        # Capture frame-by-frame
        ret, frame = video_capture.read()
        frame = imutils.resize(frame, width=600)

        #convert the frame (of the webcam) to gray)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        mask = cv2.erode(gray, None, iterations=2)
        mask = cv2.dilate(mask, None, iterations=2)

        # detecting the faces
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

        # Draw a rectangle around the faces
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
            x_imagem = x + (w/2)
            y_imagem = y + (h/2)

            cv2.circle(frame, (x+(w/2), y+(h/2)), 5, (0,0,255), -1)
            #600 x 450;

            cmd_vel_msg = Twist()
            if(x_imagem > 200 and x_imagem < 400):
                rospy.loginfo("CENTER")

            elif(x_imagem < 200):  #WHERE IT CRASH
                rospy.loginfo("LEFT")
                cmd_vel_msg.linear.x = 0.0
                cmd_vel_msg.linear.y = -0.3
                cmd_vel_msg.linear.z = 0.0
                pub_cmd_vel.publish(cmd_vel_msg)

            elif(x_imagem > 400): #WHERE IT CRASH
                rospy.loginfo("RIGHT")
                cmd_vel_msg.linear.x = 0.0
                cmd_vel_msg.linear.y = 0.3
                cmd_vel_msg.linear.z = 0.0
                pub_cmd_vel.publish(cmd_vel_msg)

         # Display the resulting frame

        cv2.imshow('Video', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

# When everything is done, release the capture
    video_capture.release()
    cv2.destroyAllWindows()

The program is crashing everytime my face goes to the left or right of the windows. I marked where it's crashing. No ERRO MSG are appearing in the terminal.

Hope you can help me and could make it clear this time! Thanks!

Thanks!

Upvotes: 0

Views: 3714

Answers (1)

PedroSG
PedroSG

Reputation: 506

I finally make it works, what I did was:

  1. Instantiate the publisher and init_node inside the function that was called by the main
  2. Now my function main just call the function that recognize the face
  3. Delete rospy.spin()
  4. Create a new .py to work with the publishing, the one that was crashing is being used to just sent to the new one the value where the drone must go.

Upvotes: 3

Related Questions