Limo 실행

1. 로그인

전원을 켜고 로그인을 수행합니다.

id : wego

pw: wego

2. ssh 원격 로그인

1) 네트워크 연결

터치 화면에서 현재 작업 위치에서 네트워크를 연결합니다.

2) 이미 ssh 설정이 완료된 상태입니다. ifconfig를 이용하여 연결된 네트워크의 ip 주소를 확인합니다.

3) putty나 원격 연결 클라이언트 프로그램을 이요하여 ssh로 Limo에 접속합니다.

1)을 선택합니다.

3. ROS2 실행환경 확인

1) ROS2 버전 확인

설치된 ROS2를 확인합니다.

printenv ROS_DISTRO

2) turtlesim 실행

Limo Pro 터미널에서 turtlesim을 실행하여 거북이를 움직여 봅니다. 실행에 2개의 터미널이 필요합니다.

첫번째 터미널에서 아래의 명령을 실행합니다.

ros2 run turtlesim turtlesim_node

두번째 터미널에서 아래의 명령을 실행합니다.

ros2 run turtlesim turtle_teleop_key

4. Limo Pro 소프트웨어 실행

1) Limo Dashboard 실행

좌측 툴바에 그림과 같은 아이콘을 클릭하여 프로그램을 실행합니다. 이 프로그램을 이용하면 Lane Detection, SLAM & Navigation 등 다양한 기능을 빠르게 실행할 수 있습니다.

아래의 그림과 같은 창이 출력됩니다.

센서 활성화: ROS2 Limo Driver, Lidar Driver, Camera Driver 가동

차선 주행: 차선 주행 Application 실행

네비게이션: ROS2 Differential 기반 Navigation 실행

맵 생성: ROS2 SLAM 실행

맵 저장: SLAM 맵 저장

위의 프로그램 명령어 실행 위치는 아래의 그림과 같습니다.

센서 활성화

맵 생성

맵 저장

네비게이션

차선 주행

5. VS Code 실행

왼쪽 툴바에 VS Code 아이콘을 클릭하거나 터미널에서 code를 입력하면 실행됩니다.

6. Terminator 실행

터미널에서 terminator를 입력합니다.

터미널을 분할하는 간단한 방법은 다음과 같습니다.

  • Ctrl + Shift + e(세로로 터미널 나누기)
  • Ctrl + Shift + o(가로로 나누기)
  • Ctrl + Shift + w(터미널 하나 없애기)

7. Nomachine 설치

NoMachine은 네트워크를 통해 다른 컴퓨터의 화면을 확인하고 키보드와 마우스로 제어할 수 있는 원격 데스크톱 프로그램입니다.

Windows, Ubuntu, Debian, macOS, Raspberry Pi 등 다양한 운영체제를 지원하며, 동일한 내부 네트워크뿐만 아니라 인터넷을 통한 원격 접속도 구성할 수 있습니다. 원격 컴퓨터의 파일 전송, 화면 공유, 오디오 전달과 같은 기능도 제공합니다.

1) NoMachine 다운로드하기

NoMachine 공식 다운로드 페이지에 접속한 후 운영체제와 CPU 아키텍처에 맞는 설치 파일을 내려받습니다.

https://www.nomachine.com/download

운영체제별 설치 파일 형식은 다음과 같습니다.

  1. Windows: EXE
  2. Ubuntu 및 Debian: DEB
  3. Fedora, Rocky Linux, RHEL: RPM
  4. macOS: DMG
  5. Raspberry Pi 및 Linux ARM: ARM용 DEB 또는 TAR.GZ

Linux에서는 CPU 아키텍처를 먼저 확인하는 것이 좋습니다.

uname -m

출력 결과는 일반적으로 다음과 같이 구분됩니다.

x86_64   일반적인 Intel 또는 AMD 64비트 PC
aarch64  ARM 64비트 장치
armv7l   ARM 32비트 장치

Intel 또는 AMD 기반의 일반적인 Ubuntu PC라면 amd64 또는 x86_64 패키지를 선택하면 됩니다.

Jetson 장치나 일부 Raspberry Pi에서는 aarch64 또는 ARM64 패키지가 필요합니다.

2) Windows에 NoMachine 설치하기

Windows에서는 EXE 설치 파일을 사용합니다.

  1. 내려받은 EXE 파일을 더블 클릭합니다.
  2. 사용자 계정 컨트롤 창이 나타나면 예를 선택합니다.
  3. 설치 언어를 선택합니다.
  4. 라이선스 내용을 확인하고 동의합니다.
  5. 설치 경로를 확인합니다.
  6. Install 버튼을 눌러 설치합니다.
  7. 설치가 완료되면 시스템을 재시작합니다.

NoMachine 설치 프로그램은 필요한 서버와 클라이언트 구성요소를 함께 설치합니다. 공식 설치 안내에서도 EXE 파일을 실행하면 Setup Wizard가 설치 과정을 진행한다고 설명합니다.

설치가 완료되면 Windows 작업 표시줄의 시스템 트레이에 NoMachine 아이콘이 표시됩니다.

대상 컴퓨터의 IP 주소는 명령 프롬프트에서 확인할 수 있습니다.

ipconfig

출력 내용에서 현재 사용 중인 네트워크 어댑터의 IPv4 주소를 확인합니다.

예시는 다음과 같습니다.

IPv4 Address. . . . . . . . . . : 192.168.200.18

이 IP 주소는 다른 컴퓨터에서 NoMachine으로 접속할 때 사용합니다.

3) Ubuntu에 NoMachine 설치하기

Ubuntu와 Debian에서는 DEB 패키지를 사용하는 것이 가장 간단합니다.

공식 다운로드 페이지에서 Linux DEB 64비트 패키지를 내려받습니다. NoMachine 공식 Linux 다운로드 페이지는 DEB 패키지를 dpkg -i 명령으로 설치하도록 안내합니다.

터미널을 열고 다운로드 폴더로 이동합니다.

cd ~/Downloads

다운로드한 NoMachine 패키지를 확인합니다.

ls nomachine*.deb

다음 명령으로 설치합니다.

sudo dpkg -i ./nomachine_*_amd64.deb

패키지 이름이 다르다면 실제로 내려받은 파일명을 입력합니다.

예시는 다음과 같습니다.

sudo dpkg -i nomachine_9.x.x_1_amd64.deb

의존성 오류가 발생하면 다음 명령을 실행합니다.

sudo apt --fix-broken install

이후 NoMachine 패키지를 다시 설치합니다.

sudo dpkg -i ./nomachine_*_amd64.deb

설치된 패키지는 다음 명령으로 확인할 수 있습니다.

dpkg -l | grep nomachine

NoMachine 서버 상태는 다음 명령으로 확인합니다.

sudo /etc/NX/nxserver --status

정상적으로 실행 중이라면 NoMachine 서비스가 실행 중이라는 상태가 표시됩니다.

Ubuntu의 내부 IP 주소는 다음 명령으로 확인합니다.

hostname -I

또는 다음 명령을 사용할 수 있습니다.

ip addr

출력되는 주소 중 127.0.0.1이 아닌 192.168.x.x, 10.x.x.x 또는 172.16.x.x 형태의 주소를 확인합니다.

4) NoMachine 라이선스 활성화하기

대상 컴퓨터에 설치한 NoMachine 서버 제품에서 라이선스를 요구하는 경우 평가 라이선스 또는 구입한 라이선스 파일을 등록해야 합니다.

NoMachine 프로그램을 실행한 후 다음 메뉴로 이동합니다.

Settings → Server → Updates → License info

라이선스 파일을 선택하고 등록합니다.

NoMachine 버전 9 이상의 서버 라이선스는 온라인 검증 방식 또는 외부 인터넷에 연결되지 않는 환경을 위한 온프레미스 검증 방식을 사용할 수 있습니다. 온라인 검증 방식은 대상 컴퓨터에서 라이선스 서버로 나가는 HTTPS 443 포트 연결이 필요합니다.

접속 전용 클라이언트만 사용하는 컴퓨터에서는 일반적으로 서버 라이선스 활성화가 필요하지 않습니다.

5) NoMachine 서버 상태 확인하기

설치가 완료되면 대상 컴퓨터에서 NoMachine 서버가 실행 중인지 확인합니다.

그래픽 화면에서는 시스템 트레이의 NoMachine 아이콘을 클릭한 후 Server status 또는 Show the service status 메뉴를 선택합니다.

다음 항목을 확인합니다.

  1. 서버 실행 상태
  2. 대상 컴퓨터의 내부 IP 주소
  3. NX 서비스 포트
  4. 원격 연결 허용 상태

NoMachine의 기본 프로토콜은 NX이며 기본 포트는 4000입니다. 대부분의 내부 네트워크 환경에서는 기본 설정을 그대로 사용할 수 있습니다.

Linux에서는 다음 명령으로 상태를 확인합니다.

sudo /etc/NX/nxserver --status

NoMachine 서버를 사용하지 않을 때는 프로그램의 서버 상태 화면에서 종료할 수 있습니다.

6) 다른 컴퓨터에서 원격 접속하기

접속에 사용할 컴퓨터에도 NoMachine 또는 Enterprise Client를 설치합니다.

설치 후 다음 순서로 접속합니다.

  1. NoMachine을 실행합니다.
  2. Machines 화면으로 이동합니다.
  3. 검색창에 대상 컴퓨터의 IP 주소를 입력합니다.
  4. Connect를 선택합니다.
  5. 처음 접속할 때 표시되는 호스트 인증 정보를 확인합니다.
  6. 대상 컴퓨터의 사용자 이름을 입력합니다.
  7. 대상 컴퓨터의 로그인 비밀번호를 입력합니다.
  8. 원격 데스크톱 연결을 시작합니다.

예를 들어 대상 컴퓨터의 IP 주소가 다음과 같다고 가정합니다.

192.168.200.18

NoMachine 검색창 또는 Add 메뉴의 Host 항목에 해당 주소를 입력합니다.

수동 연결 설정은 다음과 같이 구성합니다.

Name: Ubuntu-PC
Host: 192.168.200.18
Protocol: NX
Port: 4000

7) Ubuntu 사용자 이름 확인하기

NoMachine 로그인 화면에는 대상 Ubuntu 컴퓨터의 사용자 이름과 비밀번호를 입력해야 합니다.

현재 사용자 이름은 다음 명령으로 확인합니다.

whoami

등록된 사용자 계정은 다음 명령으로 확인할 수 있습니다.

getent passwd | grep "/home"

Ubuntu에 비밀번호가 설정되지 않은 계정은 NoMachine 로그인이 정상적으로 되지 않을 수 있습니다.

첫 번째 줄:

syslog:x:107:114::/home/syslog:/usr/sbin/nologin

의 의미는 다음과 같습니다.

  • syslog → 사용자 이름
  • x → 실제 비밀번호는 /etc/shadow에 저장
  • 107 → UID(User ID)
  • 114 → 기본 그룹의 GID(Group ID)
  • 빈 칸 → 사용자 설명 없음
  • /home/syslog → 홈 디렉터리
  • /usr/sbin/nologin → 직접 로그인 불가

즉, syslog는 일반 사람이 로그인해서 쓰는 계정이 아니라 시스템 서비스용 계정입니다.

/usr/sbin/nologin이 핵심입니다. SSH나 콘솔에서 다음처럼 로그인하려고 해도 일반적으로 허용되지 않습니다.

ssh syslog@192.168.0.10

두 번째 줄:

wego:x:1000:1000:wego,,,:/home/wego:/bin/bash

은 일반 사용자 계정입니다.

  • wego → 사용자 이름
  • x → 비밀번호는 /etc/shadow에 저장
  • 1000 → UID
  • 1000 → 기본 GID
  • wego,,, → 사용자 설명(GECOS) 필드
  • /home/wego → 홈 디렉터리
  • /bin/bash → 로그인 시 Bash shell 사용

즉,

wego

계정은 실제 사람이 로그인해서 사용할 수 있는 일반 Linux 사용자입니다.

특히 Ubuntu에서는 보통 첫 번째 일반 사용자의 UID/GID가 1000부터 시작합니다.

정리하면:

계정UID용도홈로그인
syslog107시스템 로그 서비스/home/syslog불가
wego1000일반 사용자/home/wego가능
Shellwego는 /bin/bash

8. ROS2 워크스페이스 구성

Limo의 ROS2는 Humble으로 구성 되어 있고, 워크 스페이스는 wego_ws입니다.

해당 workspace 구성은 다음 그림과 같습니다.

workspace 구성 Tree

각각의 패키지는 다음과 같이 구성되어 있습니다.(화살표를 눌러 Scroll)

  • wego_ws
    • src
      • limo_ros2(meta package)
        • catmux limo에 대한 간단한 실행 파일이 있는 패키지입니다.
        • limo_base limo에 드라이버 코드 및 실행 launch 파일이 있는 패키지입니다.
        • limo_description limo에 대한 하드웨어 관련 URDF가 있는 패키지입니다.
        • limo_msgs limo의 상태 메시지와 같은 데이터 타입이 구현되어 있는 패키지입니다.
      • limo_ros2_application limo를 활용한 application 예제들이 구현되어 있습니다.
      • navigation2 기본 Navigation2 Meta Package(github URL: https://github.com/ros-planning/navigation2/tree/humble)
      • robot_localization EKF(Extended Kalman Filter), UKF(Unscented Kalman Filter)가 구현되어 있는 패키지입니다.
      • OrbbecSDK_ROS2
        • orbbec_camera 카메라 관련 드라이버 코드 및 실행 launch 파일 카메라 관련 파라미터 설정들이 있는 Package 입니다.
        • orbbec_msgs astra 카메라 관련 상태 메시지, 제어 메시지 등이 구현되어 있는 패키지 입니다.
        • orbbec_description canera 관련 URDF 파일이 있는 패키지 입니다.
      • wego 여러 드라이버 및 알고리즘을 한번에 실행 시키는 패키지입니다.
      • wego_2d_nav navigation을 실행하기 위한 파라미터 세팅, 지도 파일, launch 파일 등이 있습니다.
      • wego_msgs 어플리케이션 관련 메시지들이 구현되어 있는 패키지입니다.
      • ydlidar_ros2_driver 라이다 드라이버 패키지가 구현되어 있는 패키지입니다.
      • lift_ctr Track과 함께 제공되는 차단기를 제어하는 코드가 구현되어 있는 Package 입니다.

9. Wego LIMO ROS2 주요 패키지 구성

Wego LIMO의 ROS2 시스템은 크게 다음과 같이 구성됩니다.

  1. limo_description
    • LIMO 로봇의 URDF 모델 제공
    • 링크와 조인트 구조 정의
    • TF 트리 구성
    • RViz 로봇 모델 시각화
  2. limo_base
    • LIMO 하부 MCU와 시리얼 통신
    • 속도 명령 전달
    • 엔코더, IMU, 배터리 상태 수신
    • Odometry 및 상태 토픽 발행
  3. ydlidar_ros2_driver
    • 전방 2D LiDAR 구동
    • /scan 토픽 발행
  4. orbbec_camera
    • RGB-D 카메라 구동
    • 컬러 영상, 깊이 영상, PointCloud 발행
  5. wego
    • LIMO, LiDAR, 카메라 드라이버 통합 실행
    • Robot Localization 기반 EKF 실행
    • RViz 및 카메라 TF 설정

10. limo_description 패키지와 URDF 확인

limo_description 패키지에는 Wego LIMO의 외형과 링크 구조를 표현하는 URDF 또는 Xacro 파일이 포함되어 있습니다.

URDF는 다음과 같은 정보를 정의합니다.

  1. base_link, base_footprint와 같은 기준 프레임
  2. 바퀴와 차체 사이의 연결 관계
  3. LiDAR와 카메라의 설치 위치
  4. 조인트의 회전축과 이동 범위
  5. RViz에서 표시할 메시와 색상
  6. 센서와 로봇 본체 사이의 TF 관계

다음 명령어를 실행하면 LIMO의 URDF를 불러와 RViz에서 확인할 수 있습니다.

ros2 launch limo_description display_models_diff.launch.py

Launch 파일이 정상적으로 실행되면 robot_state_publisher가 URDF를 기반으로 TF를 발행합니다. RViz에서는 RobotModel 항목을 통해 LIMO의 전체 모델을 확인할 수 있습니다.

TF 구조는 다음 명령어로도 확인할 수 있습니다.

ros2 run rqt_tf_tree rqt_tf_tree

또는 TF 정보를 PDF 형태로 생성할 수 있습니다.

ros2 run tf2_tools view_frames

명령 실행 후 현재 디렉터리에 생성된 frames.pdf를 열면 링크 간 연결 상태를 확인할 수 있습니다.

11. Differential 모드 드라이버 실행

Differential 모드는 좌우 바퀴의 속도 차이를 이용해 로봇의 진행 방향을 변경하는 방식입니다. 일반적인 2륜 또는 4륜 차동구동 로봇과 동일하게 geometry_msgs/msg/Twist 메시지를 사용합니다.

LIMO 본체를 Differential 모드로 설정한 후 다음 명령어를 실행합니다.

ros2 launch limo_base limo_base.launch.py

드라이버가 실행되면 별도의 터미널에서 토픽 목록을 확인합니다.

ros2 topic list

정상적으로 연결되었다면 /cmd_vel, /imu, /odom, /limo_status 등의 토픽을 확인할 수 있습니다.

1) /cmd_vel

메시지 형식은 다음과 같습니다.

geometry_msgs/msg/Twist

LIMO의 직진 속도와 회전 속도를 전달하는 명령 토픽입니다.

  1. linear.x
    • 전진 및 후진 속도
    • 단위는 m/s
    • 양수는 전진, 음수는 후진
  2. angular.z
    • 좌우 회전 속도
    • 단위는 rad/s
    • 양수와 음수에 따라 회전 방향이 달라짐

Differential 모드에서는 일반적으로 linear.y를 사용하지 않습니다.

2) /imu

메시지 형식은 다음과 같습니다.

sensor_msgs/msg/Imu

LIMO에 내장된 IMU에서 측정된 데이터를 제공합니다.

  1. 자세 정보
  2. 각속도
  3. 선형 가속도
  4. 각 데이터의 공분산

토픽 데이터는 다음 명령어로 확인할 수 있습니다.

ros2 topic echo /imu --once

3) /limo_status

메시지 형식은 다음과 같습니다.

limo_msgs/msg/LimoStatus

LIMO의 현재 동작 상태를 나타내는 토픽입니다. 배터리 전압, 주행 모드, 제어 상태 등의 정보를 확인하는 데 사용됩니다.

ros2 topic echo /limo_status --once

4) /odom

메시지 형식은 다음과 같습니다.

nav_msgs/msg/Odometry

바퀴 엔코더와 IMU 정보를 기반으로 계산된 로봇의 이동 정보를 제공합니다.

주요 데이터는 다음과 같습니다.

  1. 로봇의 위치
  2. 로봇의 방향
  3. 선속도
  4. 각속도
  5. 위치와 속도의 공분산
ros2 topic echo /odom --once

12. cmd_vel 토픽으로 LIMO 움직이기

먼저 LIMO 드라이버를 실행합니다.

ros2 launch limo_base limo_base.launch.py

다른 터미널에서 다음 명령어를 실행하면 약 0.1m/s의 속도로 전진합니다.

ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

제자리 회전 명령은 다음과 같이 전달할 수 있습니다.

ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}"

후진하려면 linear.x에 음수를 입력합니다.

ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: -0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

실내에서 처음 시험할 때는 0.1m/s 이하의 낮은 속도부터 시작하는 것이 안전합니다.

13. 키보드로 Differential 모드 제어하기

LIMO 드라이버가 실행된 상태에서 teleop_twist_keyboard 패키지를 이용하면 키보드로 로봇을 제어할 수 있습니다.

첫 번째 터미널에서 드라이버를 실행합니다.

ros2 launch limo_base limo_base.launch.py

두 번째 터미널에서 키보드 제어 노드를 실행합니다.

ros2 run teleop_twist_keyboard teleop_twist_keyboard

기본 조작 키는 다음과 같습니다.

  1. i : 전진
  2. , : 후진
  3. j : 좌회전
  4. l : 우회전
  5. u, o : 전진하면서 좌우 회전
  6. m, . : 후진하면서 좌우 회전
  7. k : 정지

키보드 입력을 사용하려면 명령을 실행한 터미널 창이 활성화되어 있어야 합니다.

14. Ackermann 모드 드라이버 실행

Ackermann 조향 방식은 자동차처럼 앞바퀴의 조향각을 변경해 진행 방향을 제어합니다.

Differential 모드와 달리 제자리 회전이 어렵지만 고속 주행 시 움직임이 자연스럽고 실제 차량과 유사한 경로를 생성할 수 있습니다.

LIMO 본체가 Ackermann 모드로 설정된 상태에서 다음 Launch 파일을 실행합니다.

ros2 launch limo_base limo_base_ackerman.launch.py

토픽 목록은 다음 명령어로 확인합니다.

ros2 topic list

Ackermann 모드에서는 로봇의 기준 프레임이 후륜 중심을 기준으로 설정될 수 있습니다. 따라서 Differential 모드에서 기록한 경로나 파라미터를 그대로 사용할 경우 위치 오차가 발생할 수 있습니다.

1) /limo/ack_cmd

메시지 형식은 다음과 같습니다.

ackermann_msgs/msg/AckermannDrive

ros2 topic info /limo/ack_cmd

ros2 interface show ackermann_msgs/msg/AckermannDrive

Ackermann 모드의 속도와 조향각을 전달합니다.

주요 필드는 다음과 같습니다.

  1. steering_angle
    • 조향각
    • 단위는 rad
  2. steering_angle_velocity
    • 조향각 변화 속도
  3. speed
    • 차량 진행 속도
    • 단위는 m/s
  4. acceleration
    • 가속도
  5. jerk
    • 가속도 변화율

LIMO에서 사용할 수 있는 조향각 범위는 일반적으로 약 -0.42rad부터 0.42rad 사이입니다. 실제 허용 범위는 펌웨어와 드라이버 설정을 함께 확인해야 합니다.

2) /imu

LIMO 내장 IMU의 자세, 각속도, 가속도 정보를 제공합니다.

3) /limo_status

배터리와 현재 주행 모드 등 LIMO의 상태 정보를 제공합니다.

4) /odom

Ackermann 운동학에 따라 계산된 위치와 속도 정보를 제공합니다.

15. AckermannDrive 토픽으로 제어하기

첫 번째 터미널에서 Ackermann 드라이버를 실행합니다.

ros2 launch limo_base limo_base_ackerman.launch.py

두 번째 터미널에서 다음 명령어를 실행합니다.

ros2 topic pub -r 10 /limo/ack_cmd ackermann_msgs/msg/AckermannDrive \
"{steering_angle: 0.2, steering_angle_velocity: 0.0, speed: 0.1, acceleration: 0.0, jerk: 0.0}"

위 명령은 다음과 같은 제어 값을 전달합니다.

  1. 주행 속도: 0.3m/s
  2. 조향각: 0.2rad
  3. 조향각 변화 속도: 0.0
  4. 가속도: 0.0
  5. Jerk: 0.0

반대 방향으로 조향하려면 steering_angle 값을 음수로 입력합니다.

ros2 topic pub -r 10 /limo/ack_cmd ackermann_msgs/msg/AckermannDrive \
"{steering_angle: -0.2, steering_angle_velocity: 0.0, speed: 0.1, acceleration: 0.0, jerk: 0.0}"

회전 각도를 ‘0’도로 설정하고 선속도도 ‘0’으로 입력합니다.

ros2 topic pub -r 10 /limo/ack_cmd ackermann_msgs/msg/AckermannDrive \
"{steering_angle: 0.0, steering_angle_velocity: 0.0, speed: 0.0, acceleration: 0.0, jerk: 0.0}"

16. Mecanum 모드 드라이버 실행

Mecanum 모드는 전후진과 회전뿐만 아니라 로봇의 횡방향 이동도 지원합니다.

LIMO 본체를 Mecanum 모드로 전환한 후 다음 명령어를 실행합니다.

ros2 launch limo_base limo_base_mecanum.launch.py

실행된 토픽은 다음 명령어로 확인합니다.

ros2 topic list

Mecanum 모드에서는 Twist 메시지의 주요 값을 다음과 같이 사용합니다.

  1. linear.x : 전진 및 후진
  2. linear.y : 좌우 횡이동
  3. angular.z : 회전

오른쪽 또는 왼쪽으로 이동시키는 예시는 다음과 같습니다.

ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.0, y: 0.2, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

설치된 드라이버 버전에 따라 토픽 이름이 다를 수 있으므로 다음 명령어로 실제 연결 상태를 확인하는 것이 좋습니다.

ros2 topic info /cmd_vel

17. ROS2 LiDAR 드라이버 실행

Wego LIMO 전방에는 주변 장애물을 측정할 수 있는 2D LiDAR가 장착되어 있습니다. LiDAR는 약 270도 범위의 거리 데이터를 스캔하며, 장애물 감지와 SLAM, Navigation에 활용할 수 있습니다.

LiDAR 드라이버를 실행합니다.

ros2 launch ydlidar_ros2_driver ydlidar.launch.py

다른 터미널에서 RViz를 실행합니다.

rviz2

LiDAR가 정상적으로 연결되면 /scan 토픽이 발행됩니다.

ros2 topic list | grep scan

토픽 메시지 형식은 다음과 같습니다.

sensor_msgs/msg/LaserScan

데이터 발행 주파수는 다음 명령어로 확인할 수 있습니다.

ros2 topic hz /scan

18. RViz에서 LiDAR 데이터 표시하기

RViz에서 다음 순서로 설정합니다.

  1. 왼쪽 Displays 패널에서 Add를 선택합니다.
  2. By topic 탭으로 이동합니다.
  3. /scan 아래의 LaserScan을 선택합니다.
  4. Global Options의 Fixed Frame을 base_link로 변경합니다.
  5. LaserScan 항목의 Topic을 /scan으로 설정합니다.
  6. Reliability Policy를 Best Effort로 변경합니다.

데이터가 너무 작게 보일 경우 LaserScan의 Size 값을 조절하면 점을 더 크게 표시할 수 있습니다.

LiDAR 데이터가 보이지 않는다면 다음 항목을 확인합니다.

  1. USB 장치가 정상적으로 인식되었는지 확인
  2. 시리얼 포트 권한 확인
  3. /scan 토픽 존재 여부 확인
  4. TF에서 base_link와 LiDAR 프레임 연결 여부 확인
  5. RViz의 QoS 설정 확인

19. ROS2 RGB-D 카메라 드라이버 실행

LIMO에 장착된 Orbbec RGB-D 카메라는 컬러 영상과 깊이 정보를 동시에 제공합니다.

환경과 카메라 모델에 따라 차이가 있지만, 가까운 실내 공간의 물체 인식, 거리 측정, PointCloud 생성 등에 활용할 수 있습니다.

카메라 드라이버를 실행합니다.

ros2 launch orbbec_camera astra_stereo_u3.launch.py

다른 터미널에서 영상 확인 도구를 실행합니다.

ros2 run rqt_image_view rqt_image_view

rqt_image_view의 토픽 선택 메뉴에서 다음 토픽을 선택합니다.

/camera/color/image_raw

정상적으로 연결되었다면 카메라의 RGB 영상이 화면에 표시됩니다.

카메라 관련 전체 토픽은 다음 명령어로 확인할 수 있습니다.

ros2 topic list | grep camera

영상의 실제 발행 속도는 다음과 같이 확인합니다.

ros2 topic hz /camera/color/image_raw

20. 카메라 PointCloud 활성화

RGB-D 카메라의 PointCloud 데이터를 사용하려면 Launch 파일에서 깊이 정합과 PointCloud 출력을 활성화해야 할 수 있습니다.

Launch 파일의 위치는 다음과 같습니다.

~/wego_ws/src/OrbbecSDK_ROS2/orbbec_camera/launch/astra_stereo_u3.launch.py

드라이버 버전에 따라 파라미터 이름은 다를 수 있습니다. Launch 파일에서 다음과 관련된 설정을 확인합니다.

  1. point_cloud
  2. enable_point_cloud
  3. depth_registration
  4. enable_colored_point_cloud
  5. align_depth

필요한 값을 true로 변경한 후 패키지를 다시 빌드합니다.

cd ~/wego_ws
colcon build --packages-select orbbec_camera

빌드가 완료되면 워크스페이스를 다시 적용합니다.

source install/setup.bash

카메라 드라이버를 다시 실행합니다.

ros2 launch orbbec_camera astra_stereo_u3.launch.py

RViz를 실행합니다.

rviz2

RViz에서 다음 순서로 설정합니다.

  1. Add를 선택합니다.
  2. By topic을 선택합니다.
  3. /camera/depth_registered/points 항목을 찾습니다.
  4. PointCloud2를 추가합니다.
  5. Fixed Frame을 camera_link로 설정합니다.

PointCloud 토픽 이름은 일반적으로 다음과 같습니다.

/camera/depth_registered/points

정확한 토픽은 다음 명령어로 확인할 수 있습니다.

ros2 topic list | grep points

PointCloud 데이터가 표시되지 않으면 다음 항목을 확인합니다.

  1. 깊이 스트림이 활성화되어 있는지 확인
  2. PointCloud 출력 파라미터 확인
  3. Depth registration 설정 확인
  4. PointCloud2 토픽의 발행 주파수 확인
  5. RViz Fixed Frame 확인
  6. 카메라 TF 연결 상태 확인
ros2 topic hz /camera/depth_registered/points

PointCloud 데이터는 일반 이미지보다 처리량이 크기 때문에 PC 사양이나 USB 연결 상태에 따라 화면 갱신 속도가 낮아질 수 있습니다.

22. wego 통합 드라이버 패키지

wego 패키지는 개별적으로 실행하던 LIMO, LiDAR, 카메라 드라이버를 하나의 Launch 파일로 실행할 수 있도록 구성된 통합 패키지입니다.

주요 Launch 파일은 다음과 같습니다.

wego/launch/teleop_launch.py

teleop_launch.py는 일반적으로 다음 기능을 담당합니다.

  1. LIMO 베이스 드라이버 실행
  2. LiDAR 드라이버 실행
  3. RGB-D 카메라 드라이버 실행
  4. 카메라 기울기에 따른 TF 설정
  5. Robot Localization EKF 실행
  6. 필터링된 Odometry 생성
  7. odom 관련 TF 구성
  8. 선택적으로 RViz 실행

여러 센서를 개별 터미널에서 실행할 필요가 없기 때문에 전체 시스템 시험이나 자율주행 기능 개발 시 편리하게 사용할 수 있습니다.

1) 통합 Launch 파일 기본 실행

카메라 기울기를 기본값으로 사용하고 RViz를 실행하지 않으려면 다음 명령어를 사용합니다.

ros2 launch wego teleop_launch.py

Launch 실행 후 다음 명령어로 주요 토픽을 확인할 수 있습니다.

ros2 topic list

다음 토픽들이 정상적으로 발행되는지 확인합니다.

/cmd_vel
/imu
/odom
/odometry/filtered
/scan
/camera/color/image_raw
/limo_status

환경과 드라이버 버전에 따라 실제 토픽 이름에는 차이가 있을 수 있습니다.

2) RViz와 함께 통합 드라이버 실행

통합 드라이버와 RViz를 함께 실행하려면 viz 인자를 사용합니다.

ros2 launch wego teleop_launch.py viz:=true

RViz 설정 파일이 Launch에 포함되어 있다면 RobotModel, LaserScan, TF, Odometry 등의 항목이 자동으로 표시됩니다.

화면에 데이터가 나타나지 않으면 RViz의 Fixed Frame을 다음 중 하나로 변경해 확인합니다.

  1. map
  2. odom
  3. base_link
  4. camera_link

일반적인 주행 상태 확인에는 odom 또는 base_link를 사용하고, 카메라 PointCloud만 확인할 때는 camera_link를 사용할 수 있습니다.

3) 카메라 기울기 값을 적용한 실행

카메라가 수평이 아니라 아래쪽 또는 위쪽을 향하도록 설치되어 있다면 실제 설치 각도를 TF에 반영해야 합니다.

예를 들어 카메라가 아래쪽으로 약 0.4rad 기울어진 경우 다음과 같이 실행합니다.

ros2 launch wego teleop_launch.py viz:=true degree:=0.4

여기서 주의할 점은 Launch 인자의 이름이 degree이더라도 실제 코드에서는 라디안 값을 입력하도록 작성되어 있을 수 있다는 것입니다.

따라서 teleop_launch.py 내부에서 해당 값이 다음 중 어떤 방식으로 사용되는지 확인해야 합니다.

  1. 입력값을 그대로 라디안으로 사용
  2. Degree 값을 라디안으로 변환
  3. Roll, Pitch, Yaw 중 특정 축에 적용

잘못된 단위를 입력하면 RViz에서 카메라와 PointCloud가 실제 방향과 다르게 표시됩니다.

4) Robot Localization을 이용한 센서 융합

바퀴 엔코더만 이용한 Odometry는 장시간 이동하거나 바퀴가 미끄러질 때 오차가 누적될 수 있습니다.

IMU 데이터 역시 단독으로 적분하면 드리프트가 발생합니다.

robot_localization 패키지는 EKF 또는 UKF를 이용해 여러 센서 데이터를 결합하고 더 안정적인 위치와 속도 정보를 생성합니다.

Wego LIMO에서는 일반적으로 다음 데이터를 사용합니다.

  1. 바퀴 엔코더 기반 Odometry
  2. IMU 각속도
  3. IMU 자세 정보
  4. IMU 선형 가속도
  5. 필요에 따라 외부 위치 센서 정보

센서 융합 결과는 다음 토픽으로 확인할 수 있습니다.

/odometry/filtered

5) 필터링된 Odometry 확인하기

첫 번째 터미널에서 통합 Launch 파일을 실행합니다.

ros2 launch wego teleop_launch.py

두 번째 터미널에서 EKF 결과를 확인합니다.

ros2 topic echo /odometry/filtered --once

발행 속도는 다음과 같이 확인할 수 있습니다.

ros2 topic hz /odometry/filtered

정상적인 경우 필터링된 메시지에는 위치, 방향, 선속도, 각속도와 각각의 공분산 정보가 포함됩니다.

RViz에서는 Odometry 항목을 추가하고 Topic을 /odometry/filtered로 설정해 이동 경로와 방향을 시각화할 수 있습니다.

6) EKF 파라미터 파일 위치

LIMO의 EKF 설정 파일은 다음 경로에 위치할 수 있습니다.

/home/wego/wego_ws/src/robot_localization/params/limo_ekf.yaml

사용자 계정 또는 워크스페이스 위치가 다르다면 실제 경로도 달라질 수 있습니다.

다음 명령어로 파일을 검색할 수 있습니다.

find ~/wego_ws/src -name "limo_ekf.yaml"

EKF 파라미터 설명

Leave a Comment