[ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ]
https://fastcampus.info/4oKQD6b
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
https://fastcampus.co.kr/data_online_selfdriving
자율주행 로봇을 위한 ROS 2 & SLAM & Nav2 한번에 끝내기 | 패스트캠퍼스
로봇 입문 시작점 ROS 2부터 자율주행 로봇을 위한 SLAM & Navigation2 와 시뮬레이터를 활용한 자율주행 로봇 실습까지 한번에
fastcampus.co.kr
본 글은 위 강의를 참고하여 작성되었습니다
[강의시작 | 강의종료]


[완강 인증]

[학습 내용]
-디지털 필기-

-callback 함수 실행 중단 문제 해결-
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
-thread 수에 따른 callback group 실행-
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
[강의 후기]
executor, mutually exclusive callback group, reentrant callback group의 사용 방법과 사용 예제를 실습했습니다. 이전 강의에서 다룬 'timer callback 때문에 다른 callback이 실행되지 않는 문제'의 해결 방법을 찾고, 이유를 공부할 수 있었습니다.
-group 지정하기-
callback 함수들을 관리하기 위해 group을 지정합니다. 방법은 아래와 같습니다.
from rclpy.callback_groups import ReentrantCallbackGroup, MutuallyExclusive
class class 이름(Node):
def __init__(self):
super().__init__('Node 이름')
# Publisher
self.vel_pub = self.create_publisher(Twist, 'cmd_vel', 10)
self.cmd_msg = Twist()
# Callback group
self.group = MutuallyExclusiveCallbackGroup() # mutually exclusive callback group 생성
# Subscriber
self.odom_sub = self.create_subscription(
Odometry, 'mobile_base_controller/odom', self.odom_callback, 10,
callback_group=self.group) # callback group 지정
self.scan_sub = self.create_subscription(
LaserScan, 'scan_raw', self.scan_callback,
QoSProfile(depth=10, reliability=ReliabilityPolicy.BEST_EFFORT),
callback_group=self.group) # callback group 지정
-executor 사용하기-
group 지정한 callback 함수들의 실행을 관리하기 위해 executor를 사용합니다. 방법은 아래와 같습니다.
from rclpy.executors import MultiThreadedExecutor, SingleThreadedExecutor
def main(args=None):
rclpy.init(args=args)
control_node = RobotControl() # 노드 생성
# Create a single-threaded executor
executor = SingleThreadedExecutor() # executor 생성
executor.add_node(control_node) # executor에 node 추가
-생각해볼 점-
이번 강의에선 callback group의 종류와 사용 용도, thread와 callback group의 관계 , executor를 사용해 callback group을 관리하고 실행하는 실습을 진행했습니다.
callback 함수 실행 중단 문제 해결
본 글의 solution 1, solution 2 영상을 보면 지금까지 다뤘던 'callback 함수 실행 중지 문제'의 해결방법을 2가지 제시하고 동작시켜봤습니다. solution 1은 이전과 같은 문제가 발생했고, solution 2는 문제가 해결됐습니다.
solution 1은 callback 함수들을 모두 하나의 mutually exclusive callback group을 지정했고, solution 2는 callback 함수들을 각각 다른 mutually exclusive callback group을 지정했습니다.
mutually exclusive callback group은 소속된 callback 함수를 상호배타적으로 관리해 하나씩만 실행시키므로 각각 다른 그룹을 지정한 solution 2가 문제를 해결한 것입니다.
이와같이 callback group을 사용하는 방법에 따라 실행되는 결과가 달라지는것을 배울 수 있었습니다.
thread 수에 따른 callback group 실행
첫번째, 두번째 영상을 보면 'tick', 'tack'을 출력하는 callback 함수와 5초를 카운트하는 callback 함수가 동시에 실행되고, 세번째 영상을 보면 'tick', 'tack'과 5초 카운트가 따로 실행되는 것을 확인할 수 있습니다. 이는 thread수가 부족해 callback 함수를 호출하지 못하기 때문입니다.
첫번째, 두번째 실습은 thread가 2개이고 호출되는 callback 함수 역시 'tick tack' 함수, '5초 카운트' 함수로 2개이기 때문에 thread가 함수를 충분히 호출할 수 있습니다. 하지만 세번째 실습은 thread가 1개이기 때문에 2개의 callback 함수를 동시에 호출하지 못합니다.
thread의 수를 고려해 코드를 구상하고 작성하는 능력의 필요성을 배울 수 있었습니다.
'[패스트캠퍼스 11월 환급 챌린지]' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 11일차 : Logger (0) | 2025.11.22 |
|---|---|
| 패스트캠퍼스 환급챌린지 10일차 : ROS 2 환경에서 디버깅하는 방법들 (0) | 2025.11.21 |
| 패스트캠퍼스 환급챌린지 8일차 : Executor & callback group (0) | 2025.11.19 |
| 패스트캠퍼스 환급챌린지 7일차 : callback 함수 동작 문제 (0) | 2025.11.18 |
| 패스트캠퍼스 환급챌린지 6일차 : Interface Programming - Action (0) | 2025.11.17 |