[데브코스 자율주행 TIL] DAY38 (11/10) 🚗🛣

happy_quokka·2023년 11월 10일
0
post-thumbnail

2023.11.10 DAY38 😭😆

오늘 목표는 카메라 이미지 들어오는지 확인하고 모터를 한번 돌려보려고 했으나... 이미지조차 확인을 못하고 끝났다ㅠㅠ 시간이 더 있었으면 오류를 다 잡고 싶었는데 6시까지 정리해야해서 찜찜하게 끝났다. 너무 많이 실행시키면서 확인을 했는지 자이카가 뜨거워지고 부팅이 되지 않았다ㅜㅜ 너무 슬프다... 자이카 집에 있었으면 좋겠다ㅠㅠ 이것저것 실행시켜보고 싶은데!!!!!ㅠㅠ 뭐가 문제인지 조차 지금 모르겠어서 너무 답답하다...

rosbag으로 카메라 토픽받아서 실행해본 결과!! 성공했다...!!!꺄아아아 너무 좋아!!!!!
(지금은..새벽 5시이다.. 오류 못 잡으면 잠 못자는 나...해결해서 너무 뿌듯)
아마도 실습할 때는 자이카에서 뭔가 꼬인 것 같다. 지금 좀 더 정리되었지만 아까 자이카에서 안된거는 이해가 안간다ㅠㅠ 빨리 월요일이 와서 자이카에서 실행시켜보고 싶다!!


🚗 실습 과정 및 어려웠던 점


이렇게 계속 프로그램이 죽었다....!ㅠㅠ
대체 왜지...

문제는 자이카 카메라에서 이미지를 못 받아오는 것 같은데 어디가 잘못된건지 모르겠다ㅠㅠ 이미지 콜백 함수에서 imshow로 이미지가 들어오는 것을 확인했는데 마지막에는 이것조차 되지 않았다. 자이카가 지금 문제인건지 코드를 잘못 건들인건지 모르겠다ㅠㅠ 아 답답해...

일단... rosbag 사용해서 동영상에서 usb_cam/image_raw 토픽을 만들어서 한번 해봐야겠다. 이렇게 가능한지 모르겠지만 너무 답답하니 주말동안 뭐라고 해봐야겠다ㅠ

결국 해냈다!!!!!!!

문제 1 : empty 이미지

  • 카메라가 켜지는 동안 empty 이미지가 들어오는데 이를 처리해주지 않아서 opencv 에러가 발생했다.
  • 해결 : empty인 경우를 제외해주었다.

문제 2 : ros spin

  • 예전에는 main 문에서 ros::spin()을 해주었다.
  • 하지만 이 경우 topic을 받아와서 바로 이미지를 보여주는 것을 가능하였지만 이미지 처리가 진행되지 않았다.
  • 그 이유는 이미지 처리가 진행되는 함수가 while문으로 진행되지 않아서 처음 한번 실행되고 그 이후로는 ros::spin만 계속 실행되기 때문이다.
  • 해결 : run() 함수안에 while로 ros를 실행시키며 이미지를 처리한다.
  • 전체적인 동작 구조를 알고나니 간단한거였다...!
//기존 코드(오류 상태)
laneManager.run();
ros::spin();

void LaneManager::run()
{
	//이미지 처리
}


//해결 코드
laneManager.run();

void LaneManager::run()
{
	ros::Rate rate(33);
	while (ros::ok())
	{
		ros::spinOnce();
		//이미지 처리
	}
}

0개의 댓글