최대 1 분 소요

PCL개발 3일차

1. 우분투에 Github Desktop을 설치했다.

해당링크를 참고했다.

# 1. GPG 키 추가
wget -qO - https://mirror.mwt.me/ghd/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null

# 2. 패키지 소스 목록에 저장소 추가
sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'

# 3. 패키지 목록 업데이트 및 Github Desktop 설치
sudo apt update && sudo apt install github-desktop

2. 차선인식코드를 작성하다.

소스코드

#!/usr/bin/env python3

""" 
`/ouster/points` 토픽으로부터 정보를 받아와 차선만 인식할 수 있도록 필터링 하는 예제코드(pcl패키지 사용)
""" 

import rospy
from sensor_msgs.msg import PointCloud2
import sensor_msgs.point_cloud2 as pc2
import numpy as np
import pcl

def point_cloud_callback(msg):
    # Convert ROS PointCloud2 message to PCL PointCloud
    cloud_points = list(pc2.read_points(msg, field_names=("x", "y", "z"), skip_nans=True))
    cloud_points = np.array(cloud_points, dtype=np.float32)

    # Create a PCL point cloud from the numpy array
    pcl_cloud = pcl.PointCloud(cloud_points)

    # Apply a simple height filter to isolate the lane points
    passthrough = pcl_cloud.make_passthrough_filter()
    passthrough.set_filter_field_name('y')
    passthrough.set_filter_limits(0.0, 0.001)
    lane_points = passthrough.filter()

    rospy.loginfo("Number of lane points detected: %d", lane_points.size)

def main():
    rospy.init_node('lane_detection_node', anonymous=True)
    
    # Subscribe to the /ouster/points topic
    rospy.Subscriber('/ouster/points', PointCloud2, point_cloud_callback)
    
    rospy.spin()

if __name__ == '__main__':
    main()

코드분석

  1. 필요한 라이브러리 임포트

  2. 포인트 클라우드 콜백 함수

    ROS 포인트클라우드2 메세지를 PCL 포인트 클라우드로 변환

    넘파이배열로부터 PCL 포인트 클라우드 생성

    PCL의 통과필터를 생성

  3. 메인함수 rospy.init_node: lane_detection_node 라는 이름의 노드 초기화

    rospy.Subscriber(): /ouster/points토픽을 구독,PointCloud2 메시지를 수신할 때, point_cloud_callback함수를 호출

    rospy.spin(): --loop 로 설정

  4. 스크립트 시작점 main() 함수를 호출하여 노드 시작

언어:

카테고리:

업데이트:

댓글남기기