코딩일지(2024-08-03)
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()
코드분석
-
필요한 라이브러리 임포트
-
포인트 클라우드 콜백 함수
ROS 포인트클라우드2 메세지를 PCL 포인트 클라우드로 변환
넘파이배열로부터 PCL 포인트 클라우드 생성
PCL의 통과필터를 생성
-
메인함수 rospy.init_node:
lane_detection_node
라는 이름의 노드 초기화rospy.Subscriber():
/ouster/points
토픽을 구독,PointCloud2 메시지를 수신할 때,point_cloud_callback
함수를 호출rospy.spin():
--loop
로 설정 -
스크립트 시작점 main() 함수를 호출하여 노드 시작
댓글남기기