1. 디렉토리 생성
$ mkdir -p ~/xycar_ws/src
2. catkin_make 으로 정리
cd ~/xycar_ws && catkin_make
3. ~/.bashrc에 다음과 같이 추가
# ROS configs
source /opt/ros/kinetic/setup.bash
source ~/xycar_ws/devel/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
alias h='history'
alias cw='cd ~/xycar_ws'
alias cs='cd ~/xycar_ws/src'
alias cm='cd ~/xycar_ws && catkin_make'
1. Workspace의 src 디렉토리로 이동
$ cd ~/xycar_ws/src
# alias로 잡아논 $ cs
로도 가능2. catkin_create_pkg 로 패키지 생성
$ catkin_create_pkg pkg_name dependency1 dependency2 ...
jsg@jsg-ubuntu:~/xycar_ws/src$ catkin_create_pkg my_pkg1 std_msgs rospy Created file my_pkg1/package.xml Created file my_pkg1/CMakeLists.txt Created folder my_pkg1/src Successfully created files in /home/jsg/xycar_ws/src/my_pkg1. Please adjust the values in package.xml.
3. catkin_make 으로 정리
cd ~/xycar_ws && catkin_make
# alias로 잡아논 $ cm
도 가능4. 최종적인 모습
$ rospack list
: 모든 패키지 리스트와 경로 출력
$ rospack find package_name
: 패키지 경로 찾기
jsg@jsg-ubuntu:~/xycar_ws$ rospack find my_pkg1 /home/jsg/xycar_ws/src/my_pkg1
$ rospack depends1 package_name
: 의존 패키지 검색jsg@jsg-ubuntu:~/xycar_ws$ rospack depends1 my_pkg1 rospy std_msgs
$ roscd package_name[/sub_dir]
: 패키지 경로로 이동jsg@jsg-ubuntu:~/xycar_ws$ roscd my_pkg1 jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1$
$ rosls package_name[/sub_dir]
: 패키지 경로의 파일 목록jsg@jsg-ubuntu:~/xycar_ws$ roscd my_pkg1 jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1$
$ rosed package_name file
: $EDITOR에 설정한 에디터로 package의 file 편집jsg@jsg-ubuntu:~/xycar_ws$ rosed my_pkg1 package.xml
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from geometry_msgs.msg import Twist
# Node 생성
rospy.init_node('my_node', anonymous=True)
# Publisher 생성
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
# msg 생성
msg = Twist()
msg.linear.x = 2.0
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
rate = rospy.Rate(1)
# 1Hz 주기로 메시지 발행
while not rospy.is_shutdown():
pub.publish(msg)
rate.sleep()
$ chmod +x pub.py
로 pub.py 에 실행 권한 부여jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1/src$ chmod +x pub.py jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1/src$ ls -l pub.py -rwxrwxr-x 1 jsg jsg 484 12월 21 23:51 pub.py
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun my_pkg1 pub.py
$ rqt_graph
#! /usr/bin/env python
# -*- coding: utf-8 -*-
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)
# Node 생성
rospy.init_node("my_listener", anonymous=True)
# Subsciber 생성, 메세지를 수신하면 callback 함수 호출
rospy.Subscriber("/turtle1/pose", Pose, callback)
# 무한루프
rospy.spin()
$ chmod +x sub.py
로 sub.py 에 실행 권한 부여
새 터미널에서 $ rosrun my_pkg1 sub.py
로 노드 추가