라이다 데이터 활용 및 데이터 시각화

/scan 토픽

image

패키지 및 launch 디렉터리 만들기

  • $ catkin_create_pkg my_lidar std_msgs rospy

  • $ mkdir launch

파이썬 코드 및 xml 작성

  • lidar_scan.py
#!/usr/bin/env python

import rospy
import time
from sensor_msgs.msg import LaserScan # LaserScan 메시지 사용 준비 

lidar_points = None

def lidar_callback(data): # 라이다 토픽이 들어오면 실행되는 콜백함수 정의
	global lidar_points 
	lidar_points = data.ranges


rospy.init_node('my_lidar', anonymous = True) # my_lidar 이름의 노드 생성
rospy.Subscriber('/scan', LaserScan, lidar_callback, queue_size = 1) # LaserScan 토픽이 오면 콜백함수가 호출되도록 세팅

while not rospy.is_shutdown():
	if lidar_points == None:
		continue

	rtn = ""
	for i in range(12):	# 30도씩 건너뛰면서 12개 거리값만 출력함
		rtn += str(format(lidar_points[i * 30], '.2f')) + ", "

	print(rtn[:-2])
	time.sleep(1.0) # 천천히 출력함
  • lidar_scan.launch
<launch>
	<include file="$(find xycar_lidar)/launch/lidar_noviewer.launch" />
	<node name="my_lidar" pkg="my_lidar" type="lidar_scan.py" output="screen" />
</launch>

실행

  • $ roslaunch my_lidar lidar_scan.launch

실행 결과

라이다 데이터 시각화

  • $ catkin_create_pkg rviz_lidar rospy tf geometry_msgs urdf rviz xacro
  • $ mkdir launch

xml 작성

  • lidar_3d.launch
<launch>
	<!-- rviz display-->
	<node name="rviz_visualizer" pkg="rviz" type="rviz" required="true" args="-d $(find rviz_lidar)/rviz/lidar_3d.rviz" />
	<node name="xycar_lidar" pkg="xycar_lidar" type="xycar_lidar" output="screen">
		<param name="serial_port" type="string" value="/dev/ttyRPL" />
		<param name="serial_baudrate" type="int" value="115200" />
		<param name="frame_id" type="string" value="laser" />
		<param name="inverted" type="bool" value="false" />
		<param name="angle_compensate" type="bool" value="true" />
	</node>
</launch>

라이다 장치가 없는 경우(ROSBAG)

  • 실제 라이다 장치를 대신하여 /scan 토픽을 발행하는 프로그램을 이용
  • ROS에서 제공하는 “rosbag” 이용 (디버깅용으로 괜찮은 도구)
    • 라이다에서 발행하는 /scan 토픽을 저장해놓은 파일을 사용하여 그 당시의 시간 간격에 맞춰 /scan 토픽을 발행할 수 있음

image

  • lidar_3d_rosbag.launch 작성
<launch>
	<!-- rviz display-->
	<node name="rviz_visualizer" pkg="rviz" type="rviz" required="true" args="-d $(find rviz_lidar)/rviz/lidar_3d.rviz" />
	<node name="rosbag_play" pkg="rosbag" type="play" output="screen" required="true" args="-d $(find rviz_lidar)/src/lidar_topic.bag" />
</launch>
  • $ roslaunch rviz_lidar lidar_3d.launch

라이다 Viewer

  • RVIZ 우측 Displays 탭 하단에 Add 버튼을 클릭한 후 LaserScan 선택하고 OK 버튼 클릭

image

  • RVIZ Displays Tab - Topic 설정

image

  • RVIZ Displays Tab - Fixed Frame 설정

image

  • RVIZ Displays Tab - Size(m)

image

실행결과

  • 주변에 있는 장애물의 위치를 빨간색 점으로 표시함

image

  • rqt_graph

image