DOI QR코드

DOI QR Code

Construction of Simulation Environment for Line Tracer Using Gazebo In ROS

ROS에서 Gazebo를 이용한 라인 트레이서 시뮬레이션 환경 구축

  • 황보승 (호남대학교 미래자동차공학부)
  • Received : 2023.01.20
  • Accepted : 2023.03.14
  • Published : 2023.04.30

Abstract

In this paper, we directly implemented the Line Tracer ROS package that can detect and follow lines drawn on the map on Gazebo, an open-source that is widely used in autonomous driving research. For line detection, the cv_bridge package was used to enable OpenCV's image processing tools, and parameters such as robot speed, line color and ground material could be changed. In addition, proportional (P) and PID controls could be implemented using the color centroid obtained through image processing. Through this approach, the effect of proportional and differential coefficients on the robot's line tracer motion could be analyzed effectively. In addition, by displaying robot simulation results using various tools of ROS, an efficient development for control nodes could be established in ROS.

Keywords

1. 서 론

시뮬레이션은 모든 자율주행 및 로봇 공학자의 필수 도구이다. 잘 설계된 시뮬레이터를 사용하면 알고리즘을 빠르게 테스트하고, 로봇을 설계하고, 회귀 테스트를 수행하고, 현실적인 시나리오를 사 용하여 시스템을 테스트 할 수 있다. Gazebo는 로봇 운영 체제(ROS)의 기본 시뮬레이터이다. 다 양한 물리 엔진, 고급 3D 그래픽, 센서 및 소음, 로봇용 플러그인(plugins), 사용할 수 있는 로봇 모델 중에서 선택할 수 있는 동적 시뮬레이션 환 경을 제공한다[1]. 자신이 작성한 패키지를 이용해 시뮬레이션을 실행하면 환경과 로봇에 대해 필요 한 모든 정보를 알 수 있으며, 디버깅을 통해 실 패 원인과 성능 개선 연구도 가능하다. 또한 특정 사례를 테스트하려는 경우 상황을 강요하고 필요 한 정보를 얻을 때까지 SW를 반복적으로 실행함 으로써 비용 절감과 개발시간 단축이 가능하다 [2][3].

이 연구에서는 실제 로봇을 통한 동작 구현에 앞서 open-source인 Gazebo 상에서 모의 로봇과 함께 라인 트레이서 환경(world)을 직접 구축하고 자 하였다. 이를 위해 실제 로봇 대신에 모의 로 봇을 사용해 다양한 시뮬레이션 환경에서 여러 제 어 방법 등을 통해 로봇을 제어하고 분석할 수 있 는 라인 트레이서 ROS 패키지를 구현하고 테스트 하고자 하였다. 그리고 이를 바탕으로 여러 인자 들이 로봇의 라인 트레이서 동작에 미치는 영향을 분석할 수 있는 시뮬레이션 환경을 개발하고자 하 였다. 여기서 사용한 시뮬레이션의 기본 환경은 다음과 같다.

- OS : Ubuntu 20.04

- ROS : Noetic

- Simulated Robot : Turtlebot3_burger

- Gazebo vesion : 11.11.0

2. 시뮬레이션 환경(GAZEBO WORLD)

Gazebo 세계(World)는 하늘, 주변 조명 및 지 면(ground)의 물리적 속성과 같은 전역 매개 변수 와 로봇 및 개체 모음을 사용해 시뮬레이션 전체 환경을 기술하는데 사용된다. 즉, 이것은 Fig. 1과 같이 실제 환경과 유사한 물리적 환경에서 로봇의 움직임을 시뮬레이션하기 위해 사용된다[4].

2.1 시뮬레이션 환경 구축

시뮬레이션에서 사용한 모의로봇은 ROBOTIS 사의 turtlebot3_simulation 패키지의 burger 모델을 사용 하였으며[5], turtlebot3_autorace_for_autorace.urdf. xacro 파일을 이용해 구현되었다. 다음 Fig. 2는 모의 로봇과 시뮬레이션 환경을 만들기 위한 launch 파일을 나타낸 것이다.

SOOOB6_2023_v26n2_2_265_f0001.png 이미지

Fig. 1 Gazebo world example

SOOOB6_2023_v26n2_2_265_f0002.png 이미지

Fig. 2 launch file for the construction of robot and simulation world

모의 로봇의 초기 위치와 방향과 함께 지도상에 노란색 라인을 표시하는 세계(lf1.world)를 지 정하였으며, 시뮬레이션 시작 조건을 중지(paused) 모드로 설정함으로써 비교 관찰이 용이하도록 하 였다. 또한 시뮬레이션은 ROS 환경에서 라인 트 레이서 모의를 위한 환경 구축과 태스트를 위한 것 으로써 주로 3 개의 센서 토픽(/odom, /cmd_vel, /camera/image)과 1개의 에러검출용 토픽을 사용 하였다. 여기서 /odom 토픽은 로봇의 위치(pose) 를 파악하기 위해, /cmd_vel 토픽은 로봇에 이동 명령을 전달하기 위해, 그리고 /camera/image 토 픽은 카메라 이미지를 모의하기 위해 사용하였으 며, 편의상 이름을 변경(remap) 하였다.

2.2 라인 및 Ground 변경하기

시뮬레이션 세계를 구축하기 위한 라인, 지면 등의 객체들은 sdf 파일을 통해 직접 설정하거나 또는 CAD 작업을 통해 작성된 도면을 STL 또는 DAE 파일로 변환해서 gazebo 상에 불러올 수 있 다. 또는 png 이미지 파일을 통해 지면 이미지를 구현할 수도 있다. 본 연구에서는 YugAjimera에 서 제공하는 XML 구문으로 작성된 세계를 본 연구 환경에 맞게 수정해서 사용하였다[6]. 먼저 여 기서 벽(wall)은 본 연구에서는 불필요하기 때문에 제거를 하였으며(향후 lidar를 모의할 경우에는 필 요함), 라인이 겹쳐지는 부분을 미세 조정해서 모 서리 부분을 가능한 한 줄이고자 하였다. 라인의 경우 선의 폭와 길이, 원점 위치 및 색상 등을 변 경할 수 있으며 지면(ground) 부분의 색상과 재질 도 변경이 가능하도록 하였다. 그 다음 링크(link), 시각(visual), 운동학(kinematic), 중력 및 포즈 (pose) 프레임과 같은 매개변수도 해당 world 파 일을 직접 설정함으로써 변경이 가능하다.

SOOOB6_2023_v26n2_2_265_f0003.png 이미지

Fig. 3 Map configuration for line tracer(red: x-axis, green: y-axis, blue: z-axis)

Fig. 3은 본 연구에서 사용한 라인 구성의 예를 나타낸 것으로써 단순히 8 개의 직선을 사용해 구성하였다. 여기서 격자간 거리는 1 미터이다. 그림에서 녹색 사각형은 태양 조명을 모의한 것이 고, 원점 부분의 직선은 각각 x축(red), y축 (green), z축(blue) 방향을 나타낸다.

Fig. 4는 world 파일에 있는 8 개의 직선 중 6 번째 라인에 대한 설정 부분을 표시한 것으로 <collision>, <friction>, <geometry>, <material> 등을 설정할 수 있는 것을 알 수 있다. 여기서는 편의상 라인 폭을 10 cm로 설정하였다.

SOOOB6_2023_v26n2_2_265_f0004.png 이미지

Fig. 4 line configuration example

SOOOB6_2023_v26n2_2_265_f0005.png 이미지

Fig. 5 various line/ground examples (top left: Dark Yellow/ DarkGrey, top right: Yellow/Residential, bottom left: Yellow/Road, bottom right: Dark Yellow/ Asphalt)

본 연구에서는 조명 설정은 기본적인 값을 사 용하였지만 라인 색과 지면은 Gazebo에서 제공하 는 여러 재질(materials) 중에서 선택이 가능하도 록 하였다.

Fig. 5는 그 중 하나의 예시로써 라인색은 노란 색(Yellow)과 어두운 노란색(DarkYellow)를 사용 하였으며, 지면 재질은 다음 4 가지(DarkGrey, Road, Residential, Asphalt) 중에서 하나를 선택 해서 사용할 수 있도록 함으로써 시뮬레이션 환경 을 좀 더 다양화하고자 하였다.

3. 라인 트레이서 ROS 패키지

3.1 ROS 패키지 구성

ROS 환경에서 프로그램의 작성 단위는 패키지 (package)이며, 실행 단위는 노드(node)이다. 본 연구에서는 python(버전 3.8)을 사용해 라인 트레 이서 ROS 패키지를 구축했으며, 최종적으로 작성 된 패키지의 트리 구성은 Fig. 6과 같다. worlds 폴더에 있는 파일들은 world에 대한 구성 파일로써 라인 및 지면 특성 변경이 가능하도록 하였으며, test_world.launch 파일은 Fig. 3에 표시된 이미 지와 같이 로봇과 지도가 포함된 시뮬레이션 환경 을 생성하기 위한 launch 파일이다.

SOOOB6_2023_v26n2_2_265_f0006.png 이미지

Fig. 6 ROS package configuration for line tracer

scripts 폴더에는 4개의 파일이 있으며, 이중에 서 move_robot.py는 시뮬레이션 환경에서 로봇 을 구동하기 위해 /cmd_vel 토픽을 게시(publish) 하기 위한 노드이며, 나머지 3 개의 python 파일 들은 라인 트레이서 카메라의 이미지 데이터에 대 한 이미지 처리와 제어(P 및 PID)를 담당하는 노드들이다.

이 중에서 line_follower_basics.py 파일은 수 신된 이미지 토픽에 OpenCV 이미지 처리함수를 적용해서 색상의 중심을 도출하고 표시함으로써 이미지 처리 과정을 확인하기 위한 노드이다. 그 리고 다른 2 개의 파일(follow _line_step_hsv_p. py, follow_line_step_hsv_ pid.py)은 색 중심과 이미지의 폭 중심까지의 거리를 기반으로 한 오차 를 추종하기 위해 각각 비례(P) 제어와 PID 제어 를 적용해 로봇을 구동하기 위한 노드들이다[7].

3.2 OpenCV를 이용한 라인 트레이서 노드

OpenCV는 컴퓨터 비전 및 기계 학습에 집중 된 오픈 소스 라이브러리로써 주로 이미지 처리, 비디오 캡처, 물체 및 얼굴 감지와 같은 동작을 수행할 때 사용된다. 하지만 OpenCV가 bgr8 인 코딩을 사용하는 반면에 ROS 이미지는 RGB 인 코딩이다. 따라서 먼저 burger 로봇에서 게시하는 이미지 토픽 데이터를 가져와서 OpenCV가 처리 할 수 있는 형식으로 변환해야 한다[8]. 이때 주로 사용되는 것이 CvBridge 클래스이다. 그 다음 ROS 이미지 데이터를 수신하는 수신자(subscriber)와 함 께 수신된 데이터를 처리하는 콜백(callback) 함수 를 선언한다. 주로 이 함수를 통해 원하는 작업을 수행하는 것이 일반적이다.

Fig. 7은 라인 트레이서 이미지처리 노드의 이미 지 처리 과정을 나타낸 개략도이다. 일반적으로 이 미지 크기는 컴퓨터 처리 속도에 크게 영향을 미치 기 때문에 이미지 자르기를 먼저 실시하였다. 그 다음 RGB 및 BGR 이미지 모두 채도(saturation) 에 매우 민감하기 때문에 BGR 이미지를 채도에 덜 취약한 HSV 이미지로 변환하였다. HSV의 기본 아이디어는 채도를 제거하는 것이며, HSV 값을 찾는 것은 쉽지 않기 때문에 ColorZilla와 같은 색상 선택기 도구를 사용해 RGB 값을 찾고 이를 HSV 로 변환한 후 HSV 색상의 상한 및 하한을 선택 하였다[6].

SOOOB6_2023_v26n2_2_265_f0007.png 이미지

Fig. 7 Image processing for line tracer

HSV 임계값을 적용해 얻어진 이진 마스크 (binary mask)를 이용해 노란색이 아닌 모든 픽 셀을 제거한 후 모멘트(moment) 함수를 사용해 라인의 질량 중심(색 중심과 동일)을 계산하고 빨 간색 점으로 표시하였다[4]. 그 다음 로봇이 이 빨 간색 점을 추종할 수 있도록 이미지 너비 중심과 의 차이(오차에 해당)를 계산해서 비례(P) 또는 PID 제어를 통해 로봇을 제어하였다.

Fig. 8은 line_follower_basics.py 노드에 의해 Fig. 7의 처리 프로세스에 의해 얻어진 결과로써 라인 색은 노란색(Gazebo/Yellow)을, 지면은 아 스팔트(asphalt) 재질을 사용하였다. 그림의 우측 에 있는 이미지에서 볼 수 있듯이 원본 이미지 (Original, 640×480 pixels)와 함께 잘린 이미지 에 HSV 변환을 적용한 이미지(hsv), 마스크 이미 지(mask) 및 색 중심 이미지(res)가 적절히 얻어 지고 있는 것을 확인할 수 있다.

SOOOB6_2023_v26n2_2_265_f0008.png 이미지

Fig. 8 Images obtained by line_follower_basics.py node

SOOOB6_2023_v26n2_2_265_f0009.png 이미지

Fig. 9 Control code of PID for line tracer node

Fig. 9는 라인 트레이서의 제어 노드의 PID 제 어 코드 부분을 나타낸 것으로써 비례 제어 상수 (kp), 적분 제어 상수(ki), 이분 제어 상수 (kd)를 통해 제어를 실시하였으며, 전역 변수로써 설정하 였다. 그리고 다양한 값으로 변경해 보면서 적절 한 값을 찾는 작업(파라미터 튜닝)을 실시하였으 며, 변수를 줄이기 위해 ki 값은 Ziegler-Nichols 계수 조정법에 의해 얻어진 값을 사용하였다[9].

4. 시뮬레이션 결과

Fig. 10은 시뮬레이션을 실행했을 때의 노드 및 토픽을 나타낸 것으로써 gazebo의 이미지 토픽 (/camera/rgb/image_raw)을 PID 제어 노드가 수 신해서 이미지 처리/PID 제어를 실시한 후, 이를 바탕으로 로봇을 구동하기 위한 토픽(/cmd_vel)과 동작 특성을 파악하기 위한 에러 토픽(/error_x)을 게시되는 것을 확인할 수 있다.

Fig. 11은 컴퓨터에서 실제 라인 트레이서 시뮬 레이션을 실행했을 때의 화면으로써 지면 재질은 아스팔트, 라인 색은 노란색(Yellow), 로봇의 선속 도는 0.25 m/s인 경우이다. 우축에 있는 플롯 (rqt_plot)은 색 중심과 이미지 폭의 중심과의 차 이를 나타낸 오차 토픽 그래프로써 PID 계수를 추론하는데 활용하였다.

SOOOB6_2023_v26n2_2_265_f0016.png 이미지

Fig. 10 Nodes/topics graph by rqt_graph command

SOOOB6_2023_v26n2_2_265_f0010.png 이미지

Fig. 11 Display image when running line tracer simulation

Fig. 12는 위의 라인 트레이서 시뮬레이션 환경 에서 적절한 PID 계수를 찾기 위한 시뮬레이션 결과 중 하나로써 kd=0.15인 상태에서 kp 값을 0.002에서 0.016까지 변화시켜가며 오차 토픽 그 래프를 표시한 것이다.

그림에서 몇 개의 피크가 발생하는데 이것은 두 직선이 서로 연결된 곡선 부분을 로봇이 통과 할 때 발생하는 오차로써 상대적으로 큰 것을 알 수 있다. 또한 그림에서 알 수 있듯이 kp 값이 0.008보다 커지면 로봇이 순간적으로 진동이 발생 하며 불안정해지고 kp=0.016에서는 로봇이 라인 을 이탈하는 것을 볼 수 있다. 따라서 이 시뮬레 이션 결과에서는 kd=0.15인 경우에는 kp가 0.006 부근에서 상대적으로 안정한 동작을 하는 것을 알 수 있었다.

SOOOB6_2023_v26n2_2_265_f0011.png 이미지

Fig. 12 Error graphs due to kp when kd=0.015 in case of PID control

SOOOB6_2023_v26n2_2_265_f0012.png 이미지

Fig. 13 Error graphs due to kd when kp=0.006 in case of PID control

SOOOB6_2023_v26n2_2_265_f0013.png 이미지

Fig. 14 Failure cases of line tracing due to kd and kp in case of PID control

Fig. 13은 Fig. 12의 경우와 반대로 kp=0.006 인 상태에서 kp 값을 0.005에서 0.02까지 0.005 씩 증가시켰을 때의 오차 토픽 그래프를 나타낸 것이다. 그림에서 알 수 있듯이 kd 값이 작을 때 는 비례제어 성분이 상대적으로 커서 진동이 발생 하지만 0.02 이상이 되면 순간적인 진동으로 인해 오히려 이탈가능성이 점점 커지는 것을 알 수 있 었다.

Fig. 14는 라인 트레이서가 경로에서 이탈하는 몇 가지 경우에 있어서 kp와 kd 값을 나타낸 것 이다. 이러한 올바른 PID 계수를 선정할 때 중요 한 지표가 될 수 있다[7,10].

Fig. 15는 한라대학교에서 제작한 경진대회용 트랙(race track)으로 경로 폭이 5 cm로 우리가 제작한 트랙의 1/2 수준이다. 기존 시뮬레이션 결 과와 비교하기 위해 이 트랙을 사용해 Fig. 12에서 수행된 것과 동일한 조건에서 시뮬레이션을 실시 했으며, 그 결과를 Fig. 16에 표시하였다. Fig. 12와 16을 보면 거의 유사한 결과가 얻어진 것을 알 수 있다. 따라서 본 연구에서 얻어진 라인 트레이 서 시뮬레이션 환경은 다른 gazebo world에서도 잘 적용될 수 있는 것을 알 수 있었다.

SOOOB6_2023_v26n2_2_265_f0014.png 이미지

Fig. 15 Autonomous driving track (produced by Halla University)

SOOOB6_2023_v26n2_2_265_f0015.png 이미지

Fig. 16 Error graphs due to kp when kd=0.015 in the autonomous driving track (PID control)

5. 결 론

본 연구에서는 ROS 환경에서 Gazebo world를 사용해 라인 트레이서 시뮬레이션 환경을 구축하 였으며, 라인 색과 지면 재질 등 여러 파라미터들 을 변경할 수 있도록 하였다. 이를 바탕으로 비례 (P) 또는 PID 제어를 통해 로봇을 구동할 수 있는 패키지를 제작하고 오차를 최소화하기 위한 PID 계수 조정을 실시하였다. 시뮬레이션 결과에 서 알 수 있듯이 자율주행 및 로봇 공학 분야에서 ROS 환경에서 Gazebo world를 이용해 패키지를 구축하고 이를 활용해서 코드를 분석 및 검증하는 모듈식 접근 방법은 비용 및 시간 측면에서 매우 효율적이다. 또한, 센서 판독과 속도 제어 등의 정보 표준화 등을 통해 프로그래머는 전적으로 알 고리즘개발에 집중할 수 있다는 장점도 있다.

향후에는 본 연구에 이어서 PNG 파일을 이용 한 추가적인 Gazebo 세계들과 함께 Lidar와 IMU 센서 등을 포함한 환경에서 로봇 제어 방법에 대 한 연구를 진행하고자 한다.

References

  1. 김학준, 강수민, 김동환, "Gazebo 시뮬레이터를 활용한 고층 건물에서의 이동 로봇 실내 자율주행 알고리즘 개발", Journal of Institute of Control, Robotics and Systems Vol. 28 No.8, pp.758-767, (2022). https://doi.org/10.5302/J.ICROS.2022.22.0093
  2. 정양근, 임오득, 김민성, 도기훈, 한성현, "휴머노이드 로봇 관절 아암의 운동학적 해석 및 모션제어에 관한 연구", 한국산업융합학회 논문집 제20권 1호, pp. 49-54, (2017). https://doi.org/10.21289/KSIC.2017.20.1.049
  3. 정양근, 심현석, 이우송, 한성현, "영상 피드백에 의한 4축 스카라 로봇의 실시간 궤적추적제어에 관한 연구", 한국산업융합학회 논문집 제17권 3호, pp. 136-144, (2014). https://doi.org/10.21289/KSIC.2014.17.3.136
  4. O. S. R. Foundation : Building a world, (2014) https://bit.ly/2HN90FI
  5. 표윤석, 조한철, 정려운, 임태훈: ROS 로봇 프로그래밍, 루비페이퍼, pp. 293-324, (2019).
  6. P. Shalini, P. M. Fani, E. M. Vela, "Line Detector ROS Node", ResearchGate (2019) DOI: 10.13140/RG.2.2.28947.94247
  7. Open Robotics, Pid (2018) http://wiki.ros.org/pid
  8. RaduBogdanRusu, cv bridge (2010) https://bit.ly/2EK1MAA
  9. Wikipedia, Ziegler-Nichols method https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
  10. 김윤정, 김진산, 이선영, 민경원, "Gazebo와 ROS를 사용한 자율주행 제어 시스템 환경 구축", 2018년 대한전자공학회 추계학술대회 논문집, pp.621-624, (2018).