🚴🏻‍♂️

[VMware-ROS1-4] ROS1과 CygLiDAR 연동하기!

생성일
2023/02/02 05:56
태그

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.pycam_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 단위로 확인할 수 있습니다.