0. Outline
1. CygLiDAR 연결하기
관련 정보는 여기서 보실 수 있습니다.
ls /dev/ttyUSB*를 통해 연결되었는지 확인합니다.
1.1. CygLiDAR 패키지 설치
먼저 패키지를 다운로드합니다.
$ cd ~/ros_workspace/src
$ git clone https://github.com/CygLiDAR-ROS/cyglidar_d1.git
Shell
복사
cyglidar.launch의 port를 dev/ttyUSB0 (ls에서 확인한 결과물)로 변경합니다.
catkin_make 할 차례!
$ cd ~/ros_workspace/
$ catkin_make
Shell
복사
roscore 및 ros 관련해서 실행된 모든 프로그혀램을 정지한 후 아래 명령으로 프로그램을 실행합니다.
$ source devel/setup.bash
$ roslaunch cyglidar_d1 cyglidar.launch
Shell
복사
이런 실행 화면이 뜨실겁니다.
1.2. CygLiDAR 개별 실행
cyglidar.launch가 아닌 rosrun을 통해서 실행하도록 하겠습니다.
프로그램은 종료해주세요. (Ctrl C)
터미널을 5개 실행 후 각각 명령어를 실행해주세요.
1.2.1. 첫번째 터미널 : roscore
# 작업환경 세팅
cd ~/ros_workspace/
source devel/setup.bash
# roscore
roscore
Shell
복사
1.2.2. 두번째 터미널 : uvc_camera
# 작업환경 세팅
cd ~/ros_workspace/
source devel/setup.bash
# uvc_camera
rosrun uvc_camera uvc_camera_node _skip_frames:=5
Shell
복사
1.2.3. 세번째 터미널 : yolov5_ros
# 작업환경 세팅
cd ~/ros_workspace/
source devel/setup.bash
# yolov5
rosrun yolov5_ros detect.py
Shell
복사
1.2.4. 네번째 터미널 : cyglidar
# 작업환경 세팅
cd ~/ros_workspace/
source devel/setup.bash
# cyglidar
# run_mode 0은 2D를 의미합니다.
rosrun cyglidar_d1 cyglidar_pcl_publisher _port:=/devttyUSB0 _run_mode:=0
Shell
복사
1.2.5. 다섯번쨰 터미널 : rviz
# 작업환경 세팅
cd ~/ros_workspace/
source devel/setup.bash
# rviz
rviz -d ~/ros_workspace/src/cyglidar_d1/rviz/cyglidar_config.rviz
Shell
복사
만약 1.2.4 실행 중 [Error] instantiating laser object. Are you sure you have the correct port and baud rate? Error was open: Permission denied 에러가 발생한다면, chmod를 통해 777 권한을 부여하니 해결됬습니다.
마지막까지 실행하면 다음과 같은 결과물을 얻을 수 있습니다
1.3. LiDAR 정보 확인하기
다시 네 번째 터미널을 킨 뒤, 다음의 명령어들을 실행하며 결과를 확인해 보세요.
rosrun cyglidar_d1 cyglidar_pcl_publisher _port:=/devttyUSB0 _run_mode:=1
rosrun cyglidar_d1 cyglidar_pcl_publisher _port:=/devttyUSB0 _run_mode:=2
Shell
복사
각도를 돌려보면 다음과 같은 결과를 얻을 수도 있어요!
1.4. robot_ctrl 패키지에서 LiDAR 정보 수신하기
기존 control.py를 cam_control.py로 변경하고, 기존 control.py에 다음과 같은 내용들을 추가해 주세요.
# #!/usr/bin/env python3
# ------------------------------------------------------------------------------
# - import
# ------------------------------------------------------------------------------
# : importing system libraries
import math
# : importing externel libraries
import rospy
import numpy
# : importing - from
from sensor_msgs.msg import LaserScan
from yolov5_ros.msg import BoundingBoxes
# ------------------------------------------------------------------------------
# - class: robotctrl
# ------------------------------------------------------------------------------
class RobotControl:
def __init__(self):
self.RAD2DEG = 180/math.pi
rospy.Subscriber('/yolov5_ros', BoundingBoxes, self.bbox_cb)
rospy.Subscriber('/scan_laser', LaserScan, self.lidar_cb)
def bbox_cb(self, _box_msg):
pass
def lidar_cb(self, _scn):
# 6~7 frame per second
distance_dic = {}
for i, distance in enumerate(_scn.ranges):
# ang -60 ~ 60
angle = (_scn.angle_min + _scn.angle_increment * i) * self.RAD2DEG
distance_dic[angle] = distance
print(distance_dic)
print()
if __name__ == "__main__":
rospy.init_node("robot_control", anonymous=True)
control = RobotControl()
rospy.spin()
Python
복사
위와 같이 2D의 경우 -60 ~ 60도 각도를 0.75도 간격으로 분할하여 간격별로 거리 정보를 m 단위로 확인할 수 있습니다.