예제코드 (lio_sam mapOptimization.cpp에서 따옴. 깃헙: https://github.com/TixiaoShan/LIO-SAM)
subCloud = nh.subscribe<lio_sam::cloud_info>("lio_sam/feature/cloud_info", 1,
&mapOptimization::laserCloudInfoHandler, this, ros::TransportHints().tcpNoDelay());
- subCloud: 생성되는 subscriber node 객체 이름
- nh: 노드핸들러. 사전에 ros::NodeHandle nh; 로 선언됨
- subscribe<lio_sam::cloud_info> : subscriber를 생성하는 노드핸들러 메소드. subscribe할 메시지 토픽, 메시지타입을 표시
- "lio_sam/feature/cloud_info": subscriber가 subcribe하는 ROS 토픽의 이름
- 1: 메시지 큐의 크기. subscriber buffer의 크기로 1개를 초과하는 데이터가 쌓이면 자동으로 drop 된다.
- &mapOptimization::laserCloudInfoHandler: subscribe의 Callback Function. 정상적으로 토픽 메시지가 수신되면 불러올 함수
- this: subscribe()의 매개변수로 전달됨. laserCloudInfoHandler메소드가 mapOptimization클래스의 멤버함수기 때문에 클래스의 다른 멤버 변수와 메소드에 접근할 필요가 있음. 때문에 'this'를 매개변수로 패싱함으로써 subscriber 객체가 mapOptimization클래스의 현재 객체에 reference를 저장하고 콜백함수(laserCloudInfoHandler)를 호출할 수 있도록 함.
- ros::TransportHints().tcpNoDelay(): 옵션. transport 프로토콜로 TCP를 딜레이 없이 사용함.
댓글