ROS2 듀얼부팅 우분투 설치 & ROS2 talker listner
노트북으로 윈도우랑 리눅스 선택 부팅 가능하도록 설정
공간 확인
윈도우 + x
디스크 관리
(C:)에서 오른쪽 마우스 > 볼륨 축소
축소할 공간 입력(MB)(E): 에 숫자 확인
제어판 열기
윈도우 + R
control 검색
Ubuntu iso 다운로드
ubuntu-20.04.6-desktop-amd64.iso
우분투 설치 디스크
노트북 부팅 시 우선순위 변경
부팅 시 USB Disk를 최우선으로 변경하여 삼성 노트북에 리눅스 듀얼 부팅 설치하기
삼성 노트북에서 F2 계속 누르고
BOOT 에서 Secure 에 OFF 를 선택하고 Save 하고 F10 계속 누르고 USB Disk 선택한다.
ROS2 Foxy 설치
Ubuntu 20.04 에 ROS2 foxy 설정
~/.bashrc 파일에 작성
# P
alias python='python3'
alias pip='pip3'
# ROS2
alias cw='cd ~/robot_ws'
alias cs='cd ~/robot_ws/src'
alias sb='source ~/.bashrc'
alias si='source ~/robot_ws/install/local_setup.bash'
alias cb='cd ~/robot_ws && colcon build'
alias cbs='cd ~/robot_ws && colcon build --packages-select'
source /opt/ros/foxy/setup.bash
source ~/robot_ws/install/local_setup.bash
export ROS_DOMAIN_ID=37
반영
source ~/.bashrc
ROS 버전 확인
printenv | grep ROS
/*
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DOMAIN_ID=37
ROS_LOCALHOST_ONLY=0
ROS_DISTRO=foxy
*/
빌드
mkdir -p ~/robot_ws/src
cd ~/robot_ws
ls // src만 있는 상태
colcon build --symlink-install
ls // 하면 build install log src
패키지 만들기
cd ~/robot_ws/src
ros2 pkg create [패키지명] --build-type [빌드타입] --dependencies [의존하는패키지1] [의존하는패키지n]
ros2 pkg create py_pubsub --build-type ament_python --dependencies rclpy std_msgs
cd py_pubsub/py_pubsub
ls // __init__.py 확인
minimal_pub.py 만들기
# ROS 2 라이브러리 임포트
import rclpy # ROS 2 Python 클라이언트 라이브러리
from rclpy.node import Node # ROS 2 노드 클래스
from std_msgs.msg import String # ROS 2 표준 메시지 타입(String)
# 퍼블리셔 노드를 정의하는 클래스
class MinimalPublisher(Node):
def __init__(self):
# 부모 클래스(Node)를 초기화하면서 노드 이름을 설정
super().__init__('minimal_publisher')
# 퍼블리셔 생성
# - 메시지 타입: String
# - 토픽 이름: 'hello'
# - QoS 설정: 큐 크기 10
self.publisher_ = self.create_publisher(String, 'hello', 10)
# 타이머 설정
# - 타이머 주기: 0.5초
# - 타이머 콜백 함수: self.timer_callback
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
# 메시지 카운터 초기화
self.i = 0
# 타이머 콜백 함수
# - 0.5초마다 호출되며 메시지를 생성하고 퍼블리셔를 통해 게시
def timer_callback(self):
# 새로운 String 메시지 생성
msg = String()
# 메시지 데이터 설정 (예: 'Hello World: 0')
msg.data = 'Hello World: %d' % self.i
# 메시지 게시
self.publisher_.publish(msg)
# 게시된 메시지를 로그로 출력
self.get_logger().info('Publishing: "%s"' % msg.data)
# 메시지 카운터 증가
self.i += 1
# 메인 함수
def main(args=None):
# ROS 2 초기화
rclpy.init(args=args)
# 퍼블리셔 노드 인스턴스 생성
minimal_publisher = MinimalPublisher()
# 노드를 실행하여 퍼블리싱 시작
rclpy.spin(minimal_publisher)
# 실행이 종료되면 노드를 명시적으로 파괴 (선택 사항)
minimal_publisher.destroy_node()
# ROS 2 종료
rclpy.shutdown()
# 엔트리 포인트: 이 파일이 메인 프로그램으로 실행될 때만 main() 호출
if __name__ == '__main__':
main()
cd .. 한 후에 setup.py 에서 ‘talker = py_pubsub.minimal_pub:main’, 만 추가
entry_points={
'console_scripts': [
'talker = py_pubsub.minimal_pub:main',
],
},
cd py_pubsub 한 후에 minimal_sub.py 에
# ROS 2 라이브러리 임포트
import rclpy # ROS 2 Python 클라이언트 라이브러리
from rclpy.node import Node # ROS 2의 기본 노드 클래스
from std_msgs.msg import String # ROS 2 표준 메시지 타입(String)
# 구독자 노드를 정의하는 클래스
class MinimalSubscriber(Node):
def __init__(self):
# 부모 클래스(Node)를 초기화하면서 노드 이름을 설정
super().__init__('minimal_subscriber') # 노드 이름을 'minimal_subscriber'로 설정
# 구독자 생성
# - 메시지 타입: String
# - 토픽 이름: 'hello'
# - 콜백 함수: self.listener_callback
# - QoS 설정: 메시지 대기열 크기 10
self.create_subscription(
String, # 구독할 메시지 타입 (std_msgs.msg.String)
'hello', # 구독할 토픽 이름
self.listener_callback, # 메시지를 수신할 때 호출되는 콜백 함수
10 # QoS: 메시지 대기열 크기
)
# 메시지 수신 시 호출되는 콜백 함수
def listener_callback(self, msg):
# 수신한 메시지 내용을 ROS 2 로그로 출력
# msg.data는 String 메시지의 데이터 필드
self.get_logger().info('I heard: "%s"' % msg.data)
# 메인 함수
def main(args=None):
# ROS 2 초기화
rclpy.init(args=args)
# 구독자 노드 인스턴스 생성
minimal_subscriber = MinimalSubscriber()
# 노드를 실행하여 토픽 메시지를 대기 (구독)
rclpy.spin(minimal_subscriber)
# 실행이 끝나면 노드를 명시적으로 파괴 (선택 사항)
minimal_subscriber.destroy_node()
# ROS 2 종료
rclpy.shutdown()
# 엔트리 포인트: 이 파일이 메인 프로그램으로 실행될 때만 main() 호출
if __name__ == '__main__':
main()
cd .. 한 후에 setup.py 에 ‘listener = py_pubsub.minimal_sub:main’, 추가
entry_points={
'console_scripts': [
'talker = py_pubsub.minimal_pub:main',
'listener = py_pubsub.minimal_sub:main',
],
},
cd ~/robot_ws 가서 워크 스페이스의 노드 패키지 빌드
colcon build --symlink-install
cd ~/robot_ws 가서 특정 패키지만 선택하여 빌드
colcon build --symlink-install --packages-select py_pubsub
source 반영
source ~/robot_ws/install/local_setup.bash
talker 실행
ros2 run py_pubsub talker
listenter 실행
ros2 run py_pubsub listener
topic 확인
ros2 topic list
/*
/hello
/parameter_events
/rosout
*/
ros2 topic type /hello
/*
std_msgs/msg/String
*/
Comments