안녕하세요.
오늘은 라이다를 사용하는 방법에 대해 알려드리겠습니다.
우분투 20.04 noetic 버전과 ros1 기준이며
velodyne lidar VLP16 장비를 사용함을 가정하고 설명된 글 입니다.
sudo ifconfig enp3s0 192.168.3.100
sudo route add 192.168.1.201 enp3s0
enp3s0 이 부분은
ifconfig 명령어를 터미널에서 실행한 뒤 나오는 첫번째 인터페이스로 대체해줘야합니다.
sudo apt-get install ros-VERSION-velodyne
VERSION에 자신의 ROS버전에 맞는 버전이름을 입력해주면 됩니다.
저는 noetic version을 사용 중이기에 다음과 같이 입력했습니다.
sudo apt-get install ros-noetic-velodyne
cd ~/catkin_ws/src/ && git clone https://github.com/ros-drivers/velodyne.git
cd ..
rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y
cd ~/catkin_ws/ && catkin_make
roslaunch velodyne_pointcloud VLP16_points.launch
rosnode list
rostopic echo /velodyne_points
rosrun rviz rviz -f velodyne
이를 통해 rviz로 라이다 데이터를 확인 할 수 있게 되었습니다.
rivz 들어가서 fixed frame 은 velodyne으로 수정해야하지만 rosrun rviz rviz -f velodyne 이렇게 실행시키면 수정 안해줘도 됩니다.
rostopic echo /velodyne_points
이 명령어를 통해서 라이다 데이터가 잘 들어오는지 확인할 수 있다.
rosbag은 ROS에서 제공하는 로깅 툴입니다. rosbag을 이용하여 센서에서 들어는 모든 메시지들을 시간 순서에 맞게 저장 하고 재생 할 수 있습니다. 저장시 확장자는 *.bag입니다.
rosbag record -O velodyne_data.bag /velodyne_points
이 명령은 ROS에게 '/velodyne_points' 토픽의 메시지를 기록하고 이를 'velodyne_data.bag'라는 이름의 백 파일에 저장하도록 지시합니다.
'velodyne_data.bag'을 원하는 파일 이름으로 바꿀 수 있습니다.
rosbag Record
명령이 실행되는 동안 지정된 주제에 게시된 메시지를 계속해서 bag 파일에 저장합니다.모든 토픽을 포함하는 bag 파일을 저장하려면 rosbag record -a
명령어를 사용하면 됩니다.
예를 들어 gps 토픽도 받아오고 싶은데 토픽이름을 모르면 일단 -a로 다 받아오는 방법도 있습니다.
명령어 설명:
사용 예시:
rosbag record -a /my_bag_file.bag
백 파일(이 경우 velodyne_data.bag
)이 있으면 rosbag play
를 사용하여 재생할 수 있습니다. RViz에서 고정 프레임을 'velodyne'으로 설정하고 토픽을 '/velodyne_points'로 설정하여 LiDAR 데이터를 시각화할 수 있습니다.
rosbag play [저장경로]
여기에 play 뒤에 -l을 붙여서 rosbag play -l [저장경로] 라고 하면 bag파일이 무한히 재생됩니다.
여기서 중요한것은 마지막 줄의 topics입니다.
이 토픽은 LiDAR (Light Detection and Ranging) 센서로부터 수집된 3D 데이터를 나타냅니다. LiDAR 센서는 레이저 펄스를 발사하여 주변 환경의 표면 거리를 측정하고, 이 정보를 사용하여 3D pointcloud를 생성합니다.
pointcloud는 주변 환경의 표면을 나타내는 수백만 개의 데이터 포인트로 구성됩니다. 각 데이터 포인트에는 x, y, z 좌표 (3D 공간에서의 위치) 및 강도 (레이저 펄스의 반사 강도)와 같은 정보가 포함됩니다.
/velodyne_points 토픽은 이러한 LiDAR 점 구름 데이터를 로봇 시스템에 전달하는 데 사용됩니다.
sensor_msgs/PointCloud2는 ROS에서 3D pointcloud 데이터를 표현하는 데 사용되는 표준 메시지 형식입니다. 이 메시지는 다음과 같은 정보를 포함합니다.
헤더(header): 메시지의 시간, 프레임 ID 및 기타 메타데이터를 포함합니다.
필드(field): pointcloud 데이터를 구성하는 각 데이터 포인트에 대한 정보를 포함합니다. 일반적으로 필드에는 x, y, z 좌표, 강도 및 기타 추가 정보가 포함됩니다.
오늘은 라이다 드라이버를 설치하는 방법, 라이다 데이터 백 파일 저장, 백 파일 실행 그리고 토픽과 메시지에 대한 이야기를 하였습니다.
다시 한번 리마인드 해보면서 직접 vlp 16으로 사용해보시다가 모르는 부분이 생기면 댓글 남겨주세요.
감사합니다.
good morning ~
"gps 토픽도 받아오고 싶은데 토픽이름을 모르면 일단 -a로 다 받아오는 방법도 있습니다." 이렇게 써주셨는데, 이러면 충돌은 일어나지 않나요?