ultrasonic sensor

정승균·2021년 1월 14일
0

ROS

목록 보기
13/14
post-thumbnail

1. 아두이노 설정


  • 툴에서 보드 / 프로세서 / 포트 설정

    • 보드 : Arduino Nano
    • 프로세서 : ATmega328P
    • 포트 : /dev/ttyUSB0
  • 아두이노 파일 작성 컴파일 및 업로드

  • 시리얼 모니터로 확인


2. ROS에서 시리얼 통신


1. 포트 권한 받기

  • sudo usermod -a -G dialout <username>

2. 토픽 발행

  • ultrasonic_pub.py : 아두이노에서 보내는 신호 받아서 토픽 발행
#!/usr/bin/env python

import serial, time, rospy, re
from std_msgs.msg import Int32

ser_front = serial.Serial(
    port='/dev/ttyUSB0',	# 신호를 받을 포트
    baudrate=9600,		# 포트 속도
    )

def read_sensor():
    serial_data = ser_front.readline()
    ser_front.flushInput()
    ser_front.flushOutput() 
    ultrasonic_data = int(filter(str.isdigit, serial_data))
    msg.data = ultrasonic_data
 
if __name__ == '__main__':

    rospy.init_node('ultrasonic_pub', anonymous=False) # initialize node
    pub = rospy.Publisher('ultrasonic', Int32, queue_size=1)

    msg = Int32() # message type
    while not rospy.is_shutdown():
        read_sensor() 
        pub.publish(msg) # publish a message
        time.sleep(0.2)
   
    ser_front.close()	# 포트는 꼭 닫자

3. 토픽 구독

  • ultrasonic_sub.py : ultrasonic 토픽 구독후 터미널에 출력
#!/usr/bin/env python

import rospy
from std_msgs.msg import Int32

def callback(msg):
    print(msg.data)

rospy.init_node('ultrasonic_sub')
sub = rospy.Subscriber('ultrasonic', Int32, callback)

rospy.spin()

4. launch 파일

<launch>
    <node pkg="ultrasonic" type="ultrasonic_pub.py" name="ultrasonic_pub"/>
    <node pkg="ultrasonic" type="ultrasonic_sub.py" name="ultrasonic_sub" output="screen"/>
</launch> 

5. 결과

0개의 댓글