본 글은 제가 직접 쓴 글이 아니라, 저희 PinkLAB의 유투브 채널의 공개 강의 영상들을 읽고, 따라한 한 수강생의 글을 제 블로그에 공유한 내용입니다.
https://youtu.be/0ZqCdtP26dI?feature=shared
안녕하세요 ! Rush To Ros :)
이번시간에는 [ OpenCV에서 직접 받은 영상을 ROS2에서 FPS, size 조절하기 ] 를 배워 봤어요.
지난 시간에 우리는 파라미터를 선언해서 이미지의 가로 세로 크기를 지정 할 수 있다는 접근을 한 번 했어요.
그런데 아직 적용은 하지 않았어요.
width, height라는 parameter를 선언하고 yaml 파일에서 가져오는 건 했는데,, 그걸 패키지 내에서 적용은 하지 않은거에요.
이제 넘어 가 볼게요. 성공을 했으니.. 더 추가 해 봤어요.
이번에는 size.yaml에 가서, (그럼 이름이 size가 되면 안되는데.. camera.yaml 이어야하는데!)
camera_device 지정하게 하구요,
frame_rate 지정을 할 거에요.
우리는 size.yaml 저기 클릭을 못 하잖아요 !
google 검색창에, pinkwink github 에 가셔서
Repositories에 들어가셔서 , for_ROS2_study 들어가셔서
여기에 실전 편 연습 코드에 들어가셔서
img_pub_1 폴더에 들어가면
size.yaml이 있어요. 여기서
요거 복사 해서 쓰면 된답니다!
그리고 또 들어가서 보시면, 여기 launch 파일 있구요,
setup.py도 혹시 몰라서 여기에 넣어 두셨대요. 이거 보고 학습을 하면 된답니다!
그 다음에, img_pub.py 이것도 편집을 해야해요.
일단은 width, height 가지고 왔던 부분은 여기에 있구요, 그 다음에 camera_device 가지고 오는 부분 여기에 있어요.
camera_device , default 는 0 이구요,
그 다음에 frame_rate 도 480 적혀있는데요, 틀렸어요! 30이 default에요.
그러고 난 다음에 이제 뭐가 많아졌으니 get_logger은 여기에서 우루루 가지고 오는 걸로 두었답니다.
그 다음에 여기 frame_rate 부분이 있어요. 타원형의 두 줄 이에요. 이게 뭐냐면!
우리가 opencv에서 카메라를 열고 그 다음에 이 카메라에서 영상을 받아서 토픽으로 쏘는 작업을 하고 있어요.
그 사이에 cv_bridge라는 걸 쓰고 있는거에요.
그런데 이 때 여기 이 단에서 timer를 써서 일정 시간 간격으로 topic을 쏴 주고 있어요.
이 때 이 타이머의 시간을 조정하면 된답니다!
타이머의 시간 간격을 조정하면, 초당 10번, 초당 20번, 초당 30번, 이렇게 맞추어 보낼 수 있게 되는거에요.
여기서 이야기가 조금 길어지는데요,
callback 부분에서 width랑 height를 넣은 이유가 img를 resize 하기 위해서였단 말이에요.
그래서 opencv가 제공한 resize 함수를 쓰니까 '카메라가 원래 이 해상도를 지원하느냐, 아니냐' 하는 건
중요한 문제가 아니게 되어버렸죠. 내가 직접 하니까요.
근데 단점이 뭐냐면.. opencv의 resize가 돌 만큼의 cpu 리소스를 빼앗아가요.
그러니까 카메라가 하드웨어적으로 지원을 하니까 설정을 바꾸는 건 내 pc의 내 cpu의 리소스를 먹지 않는단 말이에요.
( 아예 안 먹는건 아니겠지만, 그냥 안 먹는다고 가정했어요. )
근데 내가 opencv를 쓰기때문에 여기서 발생하는 약간의 cost는 생겨요. " cpu가 바쁘다 " 이 얘기라 합니당..!
img = self.cv_bridge.cv2_to_imgmsg(frame, "bgr8")
이건 resize를 시킨 아이를 opencv 에서 ros image로 data type을 바꾸는 거에요.
이제 launch 파일 그대로에요.
또 환경 부르고, 이렇게 우르르 나올거에요.
실습 들어갑니당!
이제 뭘 바꾸어야하냐면, 일단 size.yaml 갈게요.
pinkwink github에 가서
for_ROS2_study 찾고
R2R 실전편 연습 코드 찾으셔서
img_pub_1 찾으신 다음에
size.yaml 가셔서
여기 copy 버튼 누르시면 돼요.
그래서 size.yaml 파일 여기에 paste! 붙여넣기 해요.
붙여넣기 되었구요,
space를.. Indent Using Spaces 클릭 ->
'4' 클릭! 네칸 잡아주었구요,
정렬 한 다음에
launch 파일은 손 댈 게 없구요,
img_pub.py 이거 이제 바꿔줘야해요.
그래서 여기에 가서..
img_pub.py 에서 이것만 긁어서 올게요.
타이핑 하지 않고 여기 와서 class ImgPublisher(Node) 부분부터
이렇게 붙여넣어줬어요.
보시면 logger 엄청 보내고 있구요,
타이머 부분 바꾼거 보이구요, 보이시죠!
남아있는게.. 여기서 resize 한 번 해야해서요,
그래서 여기서 이것도 긁어다가 timer_callback 부분도 가지고 올게요.
가져왔구요,
이렇게 해서 리사이즈 걸고 발행하도록 해 뒀어요.
이제 다시 colcon build 하고
my_opencv_tutorials 로 환경 부르고
ros2 launch my_opencv_tutorials bringup_cv.launch.xml로 런치파일 실행을 해요.
로그들이 일단 바뀌었어요.
Frame Rate 도 바뀌었어요. FPS는 초당 프레임 숫자인데요, 30 fps 하던걸 초당 10fps로 강제로 수정을 했어요.
my_opencv_tutorials 로 환경을 부르고
카메라에 손을 대고.
rqt 불러요.
rqt에서는 frame rate 이 떨어지는게 그렇게 잘 보이지 않는데요, 30에서 10으로 바꾸어 보면 확실히 달라져요.
ㅋ_ㅋ 🤭
이 상태에서 파라미터를 바꾸는 과정을 보여주셨어요.
확실히 반영 된다는 걸 보여주기 위해 size.yaml 에서 초당 rate을 1로 바꿨어요. 저장하구요, (아 무섭습니다 ~ 라는 의미는.. 매우매우 느려진다는 뜻이겠죠!? )
colcon build 하구요, my_opencv_tutorials 환경 부르고 ros2 launch 로 실행 해 볼게요. 초당 한 번 쏘라는 거에요.
그 다음에 rqt 실행을 해 봤어요.
뚝 뚝 끊어져요. 어...!!!! 손으로 가린거 캡쳐 하려고 했는데 1로 하는바람에 끊어져버려서 !!! 🤗
이렇게 됩니당..
지금까지 해서 파라미터 수정하기를 해 봤어요.
우리는 카메라 영상을 가지고 오고,
가지고 온 카메라 영상을 파라미터를 이용해서 영상의 설정을 바꿀 수 있다, 없다, 이런 이야기들을 해 봤어요.
고생하셨습니다 ^-^
눈운동 많이많이 하시고 다음시간에 만나요 !
'Robot > Robot Program - ROS' 카테고리의 다른 글
[R2R] 1-4 OpenCV로 읽은 영상에 parameter 적용하기 (1) | 2025.07.14 |
---|---|
[R2R] 1-3 cv_bridge로 OpenCV 영상 토픽 발행 해보기 (1) | 2025.07.10 |
[R2R] 1-2 usb_cam pkg로 USB 카메라 활성화하기 2 (0) | 2025.07.07 |
[R2R] 1-1 usb_cam pkg로 USB 카메라 활성화하기 1 (1) | 2025.07.03 |
[R2R] 1-0 또. 다시. 강조하는 bashrc (1) | 2025.06.30 |
ROS2 교육 유데미 유료 교육을 오픈했습니다. (8) | 2024.11.21 |
ROS2 무료 강의 R2R 응용편이 끝났습니다. (8) | 2024.11.11 |