반응형
ROS2 Foxy Fitzroy
패키지 노드(publisher) 만들기
1) 파이썬 파일 생성
~/robot_ws/src/test1234/test1234
- 위의 경로에 'hello_pub.py'를 생성
2) 전체 코드
import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile
from std_msgs.msg import String
class HelloworldPublisher(Node):
def __init__(self):
super().__init__('helloworld_publisher')
qos_profile = QoSProfile(depth=10) #QoS 설정, 큐 사이즈 10(10개의 데이터 보관)
self.helloworld_publisher = self.create_publisher(String, 'helloworld', qos_profile) #qos_profile속성으로 publisher 생성
self.timer = self.create_timer(1, self.publish_helloworld_msg) #timer tick(1초)마다 publish_helloworld_msg 실행
self.count = 0
def publish_helloworld_msg(self):
msg = String() #메세지 스트링타입
msg.data = 'Hello World: {0}'.format(self.count) #메세지 내용
self.helloworld_publisher.publish(msg) #메세지 전송
self.get_logger().info('Published message: {0}'.format(msg.data)) #logger에 메세지 기록
self.count += 1
def main(args=None):
rclpy.init(args=args)
node = HelloworldPublisher() #클래스 실행
try:
rclpy.spin(node) #ROS에 노드 spin, 프로그램 종료까지 반복
except KeyboardInterrupt:
node.get_logger().info('Keyboard Interrupt (SIGINT)') #종료시 logger에 기록
finally:
node.destroy_node() #노드 종료
rclpy.shutdown() #rclpy 종료
if __name__ == '__main__':
main()
(코드 출처 : 오로카 카페 - 024 ROS프로그래밍 기초(python)_표윤석)
def __init__(self):
super().__init__('helloworld_publisher')
qos_profile = QoSProfile(depth=10) #QoS 설정, 큐 사이즈 10(10개의 데이터 보관)
self.helloworld_publisher = self.create_publisher(String, 'helloworld', qos_profile) #qos_profile속성으로 publisher 생성
self.timer = self.create_timer(1, self.publish_helloworld_msg) #timer tick(1초)마다 publish_helloworld_msg 실행
self.count = 0
- qos_profile = QoSProfile(depth=10)
- QoS 설정
- 데이터를 보관해 놓을 큐의 사이즈 지정 (depth=10)
- 오로카 ROS 강의 참고 (https://cafe.naver.com/openrt/24319)
- self.helloworld_publisher = self.create_publisher(String, 'helloworld', qos_profile)
- self.helloworld_publisher : helloworld_publisher라는 이름으로 노드 이름 지정
- String : 메세지 타입
- 'helloworld' : 토픽 이름
- qos_profile : QoS 설정 (현재 큐 사이즈 10으로 설정)
- self.timer = self.create_timer(1, self.publish_helloworld_msg) : 타이머를 생성하여 1초에 한번씩 publish_helloworld_msg 실행
def publish_helloworld_msg(self):
msg = String() #메세지 스트링타입
msg.data = 'Hello World: {0}'.format(self.count) #메세지 내용
self.helloworld_publisher.publish(msg) #메세지 전송
self.get_logger().info('Published message: {0}'.format(msg.data)) #logger에 메세지 기록
self.count += 1
- msg = String() : 메세지를 스트링 타입으로 지정
- msg.data = 'Hello world : {0}'.format(self.count) : 메세지 내용 지정
- self.helloworld_publisher.publish(msg) : 메세지 전송
- self.get_logger().info('Published message : {0}'.format(msg.data)) : 메세지 내용을 콘솔창에 출력
def main(args=None):
rclpy.init(args=args)
node = HelloworldPublisher() #클래스 실행
try:
rclpy.spin(node) #ROS에 노드 spin, 프로그램 종료까지 반복
except KeyboardInterrupt:
node.get_logger().info('Keyboard Interrupt (SIGINT)') #종료시 logger에 기록
finally:
node.destroy_node() #노드 종료
rclpy.shutdown() #rclpy 종료
- rclpy.init(args=args) : 초기화
- node = HelloworldPublisher() : 클래스 실행
- rclpy.spin(node) : ROS에 노드 spin, 프로그램 종료까지 반복
- node.destroy_node() : 노드 종료
- rclpy.shutdown() : rclpy 종료
3) 결론
- 중요 핵심 사항만 있는 코드
- 이것만으론 뭘 못하니 여기서 추가 내용을 짜서 공부 할 것
- 아래 표시한곳들만 서로 맞춰주면 문제 없음
아래 출처의 내용을 수정 변경하였습니다.
개인적 공부를 위해 올린 글로 공부하실분은 아래 링크의 글을 참고하시기 바랍니다.
출처 : 오로카 카페 (cafe.naver.com/openrt/24450)
반응형
'ROS2' 카테고리의 다른 글
ROS2 <토픽> 2개의 정수를 퍼블리시하기 (int multiarray) (0) | 2021.05.22 |
---|---|
ROS2 패키지 만들기 - 4 (확인 및 실행) (0) | 2021.04.21 |
ROS2 패키지 만들기 - 3 (노드 생성 - subscribe) (0) | 2021.04.21 |
ROS2 패키지 만들기 - 1 (패키지 생성) (0) | 2021.04.20 |