<ROS 패키지 만들기>
패키지를 담을 디렉토리로 이동
$ cd ~/xycar_ws/src
패키지 새로 만들기
$ catkin_create_pkg my_pkg1 std_msgs rospy //패키지를_새로_만들_때_사용하는_명령어 패키지_이름 이_패키지가_의존하고_있는_다른_패키지들을_나열
<ROS 패키지 빌드>
새로 만든 패키지를 빌드
$ cd ~/xycar_ws
$ catkin_make
<만들어진 패키지 확인>
$ rospack find my_pkg1
$ rospack depends1 my_pkg1
$ roscd my_pkg1
<Publisher 코드 작성>
~/xycar_ws/src/my_pkg1/src 위치에 pub.py라는 이름으로 작성
#!/usr/bin/env python #파이썬이라는 것을 알려주는 코드
import rospy
from geometry_msgs.msg import Twist
rospy.init_node('my_node', anonymous=True) #노드 생성-노드 이름은 my_node, anoymous 이름같은 거 바꾸고 싶으면 바꿔 상관없어
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) #Publisher 객체 생성-지금 만든 노드는 PUblisher라는 것을 알림, 토픽 이름은 /turtle1/cmd_vel, 그 토픽은 데이터가 twist이다.
msg = Twist() #twist가지고 객체를 하나 만들어서
msg.linear.x = 2.0 #twist라는 데이터 타입의 객체에 데이터를 다 채워넣는다.
msg.linear.y = 0.0
msg.linear.z = 0.0
msg.angular.x = 0.0
msg.angular.y = 0.0
msg.angular.z = 1.8
"""1Hz 주기로 메시지 발행(1초에 한번씩 발행)"""
rate = rospy.Rate(5) #1초에 5번
while not rospy.is_shutdown(): #파이썬 파일이 죽기 전까지
pub.publish(msg) #메세지 쏘기
rate.sleep()
<프로그램 실행 권한>
작성한 코드를 실행시키려면 실행 권한이 있어야 한다.
실행권한 부여
$ chmod +x pub.py
<프로그램 실행>
터미널 #1
$ roscore
터미널 #2
$ rosrun turtlesim turtlesim_node
터미널 #3
$ rosrun my_pkg1 pub.py
<Subscriber 코드 작성>
#!/usr/bin/env python
import rospy
from turtlesim.msg import Pose
def callback(data):
s = "Location: %.2f, %.2f" % (data.x, data.y)
rospy.loginfo(rospy.get_caller_id() + s)
rospy.init_node("my_listener", anonymous=True) #노드 이름은 my_listener, anonymous:여러 개 실행할 때 너가 숫자 붙여서 구분해
rospy.Subscriber("/turtle1/pose", Pose, callback) #/turtle1/pose이라는 토픽을 받을거고 토픽 안에 있는 메시지 타입은 Pose, 메시지를 수신하면 callback함수가 자동으로 실행된다.
rospy.spin() #while true
<프로그램 실행>
터미널 #1
$ roscore
터미널 #2
$ rosrun turtlesim turtlesim_node
터미널 #3
$ rosrun my_pkg1 pub.py
터미널 #4 (sub.py도 pub.py처럼 실행권한을 부여해주어야 한다.)
$ rosrun my_pkg1 sub.py
노드가 잘 동작하고 있는지 확인하고 싶다면,,
$ rqt_graph
'ROS' 카테고리의 다른 글
ROS - 노드 통신을 위한 패키지 만들기 (0) | 2022.03.01 |
---|---|
ROS - roslaunch (0) | 2022.03.01 |
ROS 설치 및 환경설정 (0) | 2022.02.28 |
ROS 명령어 (0) | 2022.02.28 |
ROS 구조 및 기능 (0) | 2022.02.28 |