카테고리 없음

5. ROS 기초 프로그래밍 - ROS Topic(BY.Python)

흑요석s 2023. 3. 31. 23:35

1. ROS 통신방식

Topic, service, Action이 존재.

ROS 환경의 작업공간은 catkin을 이용하여 관리, 구성, 빌드 함.

 

2. ROS Topic

$ catkin_creat_pkg basics rospy std_msgs  ==> rospy와 std_msgs 의존성으로 가지는 basics 패키지 생성

 

package.xml => 패키지 매니페스트

 

3. Topic 송신을 위한 Publisher 파이썬 코드 작성

3-1. basics 폴더 내에 scripts/topic_publisher.py

3-2 코드작성

#! /usr/bin/env python
import rospy
from std_msgs.msg import Int32  #msg 타입

rospy. init_node(wego)   #노드 설정

pub = rospy.Publisher('counter', Int32)    #publisher로 설정, counter = topic 내용

rate = rospy.Rate(2)  # 2hz 만큼 보냄 (1초에 2번)

count = 0

while not rospy.is_shutdown():
    pub.publish(count)
    count += 1
    rate.sleep()

3-3 코드적용

ls -la 로 확인해보면 publisher 의 권한부여가 안됨.

sudo chmod 777 *    => 권한부여

 

 

~/ros_basic$ rosrun basics topic_publisher.py

 

rostopic list 에 counter  topic 확인

 

rostopic echo /counter

 

 

4. topic 수신을 위한 Subsciber 파이썬 코드 작성

3-1. basics 폴더 내에 scripts/subscribe_publisher.py

3-2. 코드작성

#! /usr/bin/env python3

import rospy
from std_msgs.msg import Int32

def callback(msg) :
    print msg.data

rospy.init_node('topic_subscriber')

sub = rospy.Subscriber('counter', Int32, callback) #sub는 값을 받아야만 함.

rospy.spin() #반복해서 받음

3-3. 명령어

rqt_graph : 각 노드들 관계 표시

rostopic list : Topic 리스트 확인

rostopic echo /counter -> /counter 라는 topic의 메시지 확인

rostopic info /counter -> /counter 라는 topic의 정보 확인