!!진행시 경로를 잘 확인하세요.
저는 윈도우 10에서 wsl2를 사용해 ros를 구동중입니다.
이전 게시물들을 참고하여 설정 후 진행하면 도움이 될 것 같습니다.
사전 환경세팅용 참고 게시물
[ROS] ubuntu 18.04에 ROS Melodic 설치하기(PC)
우분투 18.04 LTS에 ROS Melodic을 설치하는 방법을 소개한다. Melodic은 12번째로 릴리즈 된 ROS 배포판이다. 2018년 5월에 릴리즈 되어 2023년 5월까지 지원 예정이다. 현재 가장 오래 지원 예정이기 때문에
doljokilab.tistory.com
WSL2로 윈도우10에서 ROS 설치하기
매번 듀얼부팅으로 껐다 켰다 하기도 귀찮다. 윈도우10에서 WSL2를 사용해서 ROS를 설치해보자. WSL이란? WSL(Windows Subsystem for Linux)는 윈도우에서 경량 가상화 기술을 이용해 리눅스을 구동할 수 있
doljokilab.tistory.com
ROS 작업영역 만들기
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
mkdir명령어를 사용하여 catkin_ws와 src폴더를 생성해주었다. 그 뒤 cd 명령어를 통해 작업공간으로 이동한다.
ros melodic 및 이전버전의 python3 사용자의 경우 다음과 같이 첫 catkin_make 명령어를 입력해야한다.(python3 호환성을 위해 사용, python3로 catkin_make가 구성되고, 다음 빌드부터는 catkin_make만 사용해도 된다.)
나는 ros 개발을 melodic 버전과 언어를 python3으로 진행하기 때문에 아래와 같이 명령어를 입력했다.
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
ros설정이 포함된 bash 셀을 실행하기 위해 다음과 같이 입력해준다.
source ~/catkin_ws/devel/setup.bash
새로운 패키지를 만들기 위해 ~/catkin_ws/src로 이동한 뒤 catkin_create_pkg 스크립트를 통해 test라는 패키지를 만들어 주었다.
cd ~/catkin_ws/src/
catkin_create_pkg test std_msgs rospy roscpp
catkin_create_pkg 스크립트는 다음과 같이 사용한다.
catkin_create_pkg <패키지명 > <의존성1> <의존성2> <의존성3> ...
위 코드 "catkin_create_pkg test std_msgs rospy roscpp" 가 의미하는 것은 tstd_msgs, rospy, roscpp에 의존성을 가지는 패키지를 test라고 이름 붙여서 만든다는 뜻이다. 이렇게 사용되는 의존성들은 1차 의존성이라고 한다. (의존성 안에서 의존성 패키지를 또 가지고 있다. 이런걸 간접의존성이라고 한다. )
ls명령어로 새로 만든 패키지 안에 뭐가 있는지 확인해보자.
catkin 패키지의 조건인
pakage.xml과 CMakeLists.txt가 존재하며
include, src 폴더가 있다는 것을 확인 할 수 있다.
패키지와 관련된 내용은 추후 다른 포스팅으로 정리하겠다.
test패키지 안에 scripts라는 폴더를 생성하고, 여기에 간단한 Publisher과 Subscriber 파이썬 코드를 다운받아보자.
cd ~/catkin_ws/src/test
mkdir scripts
cd scripts
먼저 Publisher인 talker.py 를 wget 명령어로 가져온다. chmod로 권한을 지정해 주어야 한다.
talker.py
wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py
chmod +x talker.py
다운받은 코드를 살펴보면 다음과 같다.
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
글이 길어지므로 코드의 분석은 다음 링크로 분리하여 작성했다.
[ROS] talker.py(Publisher) 코드 분석하기
#!/usr/bin/env python import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(1..
doljokilab.tistory.com
먼저 Subscriber인 listener.py 를 마찬가지로 wget 명령어로 가져온다. chmod로 권한을 지정해 주어야 한다.
listener.py
wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py
chmod +x listener.py
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
글이 길어지므로 코드의 분석은 분리하여 추후 작성하겠다.
이제 다음과 같이 catkin_make를 사용하여 패키지를 빌드 해보도록 하자. 지금은 ~/catkin_ws/안에 있는 모든 패키지를 다 빌드하려고 하는 것이지만, 일부 패키지만 빌드하기 위해 "--pkg [빌드하려는 패키지이름]" 이런 식으로 옵션을 지정 할 수도 있다.
cd ~/catkin_ws/
catkin_make
. ~/catkin_ws/devel/setup.bash
실행하게 되면 위 사진과 같이 -- ~~ traversing 1 packages in topological order: 아래 방금 만든 패키지가 생성된다.
rospack 명령어를 통해 방금 만들어준 test 패키지의 관련 정보를 표시 해 보자.
rospack <옵션> <패키지명> 나는 방금 만든 test패키지의 1차 의존성만 출력해보았다.
rospack depends1 test
만약 패키지의 간접의존성들까지 모두 보고싶다면 다음과 같이 입력해보자.
rospack depends test
이제 만들어준 패키지가 정상적으로 동작하는지 알아보도록 하자.
새로운 터미널에서 roscore를 실행한다.
roscore
새로운 터미널에서 talker.py를 실행한다.
rosrun test talker.py
새로운 터미널에서 listener.py를 실행한다.
rosrun test listener.py
각 노드의 연결을 확인하기 위해 rqt_graph를 실행한다.
rosrun rqt_graph rqt_graph
새로운 창에서 rostopic echo를 통해 chatter에서 출력되는 내용이 어떻게 출력되고 있는지 확인해보자.
rostopic echo /chatter
rqt_graph에서 새로고침을 실행 해주면 /talker에서 나오는 /chatter가 /rostopic 노드로도 연결 되는 것을 볼 수 있다.
아주 간단하게 ros에서 Publisher과 Subscriber 예제를 진행 해 보았다. 직접 코드와 패키지를 작성하여 구동 시켜 보면 좋을 것 같다.
'개발관련 > ROS' 카테고리의 다른 글
rosserial esp8266 wifi통신(tcp) (7) | 2021.01.28 |
---|---|
[ROS] talker.py(Publisher) 코드 분석하기 (0) | 2021.01.22 |
WSL2 에서 Publickey error 발생시 (0) | 2021.01.02 |
WSL2로 윈도우10에서 ROS 설치하기 (2) | 2021.01.01 |
[ROS] ubuntu 18.04에 ROS Melodic 설치하기(PC) (1) | 2020.05.25 |