Skip to content

moby-ros2 패키지로 Moby 제어하기

실행 방법

1. 터미널 열기

2. ROS2 환경설정 확인하기

  • ROS2 패키지가 실행되기 위해서는 필요한 워크스페이스가 로드되어 있어야 합니다. 설치 챕터에서 moby-ros2 패키지가 빌드된 ros2_ws 워크스페이스를 불러오려면 아래의 명령어를 사용할 수 있습니다.
1
source $HOME/ros2_ws/install/setup.bash
  • 다만, 설치 챕터에서 위의 명령어를 .bashrc 파일에 추가해두었기 때문에 이제 터미널을 열 때마다 워크스페이스가 자동으로 로드됩니다.

3. Moby 제어 노드 실행하기

  • ROS2에서 Moby를 제어하기 위해서는 Moby SW Framework와 통신할 제어 노드를 실행해야 합니다. 뿐만 아니라 SLAM 및 Navigation을 위해서는 탑재된 LiDAR와 RGBD 센서의 데이터를 ROS2 Topic으로 발행해 줄 노드도 필요합니다.

  • moby_bringup.launch.py 파일은 이에 필요한 모든 노드를 한번에 실행해줍니다.

1
ros2 launch moby_bringup moby_bringup.launch.py launch_rviz:=true
  • 이제 Moby 모델이 표시된 RViz 화면이 실행되고 조이패드를 이용한 이동 조작이 가능해집니다.

    • 조이패드를 이용한 조작 방법에 대한 설명은 기본조작 에서 확인할 수 있습니다.
  • RViz 화면의 왼쪽 리스트에서 LaserScan, RealSense, Proximity 좌측의 박스를 체크해 LiDAR, RGBD, 근접 센서 데이터를 시각화할 수 있습니다.


RViz 화면을 통해 시각화 가능한 센서들

자동 실행 등록

moby_bringup.launch.py 파일은 ROS2에서 Moby를 제어하기 위해 항상 실행해야 하는 파일입니다. systemd 파일 등록을 통해 매번 다시 실행할 필요 없이 전원이 켜질때마다 백그라운드에서 자동 실행될 수 있도록 등록할 수 있습니다.

  • nano 에디터로 systemd 경로에 moby_bringup.service 파일을 생성 합니다.
1
sudo nano /etc/systemd/system/moby_bringup.service
  • 아래의 실행 규칙을 입력합니다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Unit]
Description=Bringup Moby by Neuromeka

Wants=network.target
After=syslog.target network-online.target

[Service]
User=user
Type=simple

ExecStart=/bin/bash -c 'source /home/user/ros2_ws/install/setup.bash; ros2 launch moby_bringup moby_bringup.launch.py'
WorkingDirectory=/home/user
KillMode=process

[Install]
WantedBy=multi-user.target
  • ExecStart 항목에 입력된 커맨드를 부팅 시 실행하게 됩니다. 위 예제에서는 워크스페이스를 로드하고 moby_bringup.launch.py 파일을 실행하는 커맨드가 입력되어 있습니다.

  • Ctrl+X, Y, Enter를 순서대로 눌러 저장합니다.

  • 추가된 파일을 적용하고 moby_bringup 서비스를 백그라운드에서 실행하기 위해서 아래의 명령을 실행합니다.

1
2
3
sudo systemctl daemon-reload \
&& sudo systemctl enable moby_bringup.service \
&& sudo systemctl start moby_bringup.service
  • 백그라운드에서 실행중인 moby_bringup 서비스의 상태는 아래의 커맨드로 확인할 수 있습니다.
1
systemctl status moby_bringup
  • 백그라운드의 moby_bringup 서비스를 종료하기 위해서는 아래의 커맨드를 입력합니다.
1
sudo systemctl stop moby_bringup
  • 아래의 명령으로 백그라운드 서비스의 실시간 터미널 출력을 확인할 수 있습니다. 과거의 기록을 모두 보기 위해서는 -f 옵션을 빼고 실행하면 됩니다.
1
jounarlctl -f -u moby_bringup

moby_bringup.launch.py 파일의 구성

  • moby_bringup.launch.py 실행 시, Moby-RP의 구성 관련 정보는 아래의 경로에서 불러옵니다.
1
moby-ros2/moby_bringup/param/moby_config.yaml
  • 파일 구성은 아래와 같습니다.

이름 형식 설명
moby_type string 제어할 Moby의 타입입니다. 현재 moby_rp가 지원됩니다.
step_ip string Moby를 제어하고 있는 STEP3의 내부 아이피 주소입니다. Moby-RP에서는 출고시 192.168.214.20으로 설정되어 있습니다.
use_gyro bool Moby의 odometry 계산에 내장된 자이로 센서의 방향 정보를 사용할 지를 결정합니다.
lidar_ip dict LiDAR 센서의 IP 입니다. Moby-RP의 기본 설정은 front/rear 두 개의 LiDAR가 사용되며, 각각 192.168.214.10192.168.214.11로 지정되어 있습니다.
realsense_serial dict 탑재된 RGBD 센서의 시리얼 번호입니다. Moby-RP에는 front/rear/left/right 4 개가 설치되어 있으며, 출고시 각 센서에 맞는 시리얼 번호가 입력된 상태로 출고됩니다.

  • moby_bringup.launch.py 실행 시 커맨드 라인에서는 상황에 따라 아래의 옵션들을 지정할 수 있습니다.

이름 형식 설명 기본값
name string 로봇의 이름 moby
prefix string 복수의 로봇을 사용할 경우, 각 로봇 구분을 위한 접두사 없음
launch_rviz bool RViz 화면의 실행 여부 false
use_joypad bool 조이패드 컨트롤의 실행 여부 true

moby_bringup.launch.py 파일에서 실행하는 주요 노드들과 각 노드들이 발행하거나 구독하는 주요 토픽 및 기능은 아래와 같습니다.

이름 발행 구독 기능
front_lidar /front_lidar/scan 전면 LiDAR 데이터 발행
rear_lidar /rear_lidar/scan 후면 LiDAR 데이터 발행
laserscan_multi_merger /scan /front_lidar/scan, /rear_lidar/scan 전/후면 LiDAR 데이터를 하나의 토픽으로 병합
front_camera /front_camera/ depth/color/points 전면 RGBD 센서의 포인트클라우드 데이터 발행
rear_camera /rear_camera/ depth/color/points 후면 RGBD 센서의 포인트클라우드 데이터 발행
left_camera /left_camera/ depth/color/points 좌측 RGBD 센서의 포인트클라우드 데이터 발행
right_camera /right_camera/ depth/color/points 우측 RGBD 센서의 포인트클라우드 데이터 발행
robot_state_publisher /tf /joint_states /joint_states을 받아 순기구학 결과를 /tf에 발행
moby_grpc /imu, /odom_encoders /cmd_vel cmd_vel의 명령에 따라 Moby를 구동하고 자이로 센서 데이터 및 odometry 결과를 발행
ekf_filter_node /odom /imu, /odom_encoders 자이로 센서 데이터와 odometry 정보에 EKF 필터를 적용해 개선된 odometry 발행
rviz2 RViz 화면을 통해 현재 상황을 그래픽 인터페이스 제공
joy_linux /joy 조이스틱 정보를 /joy 토픽으로 발행
console_controller /cmd_vel /joy /joy 토픽에 따라 속도 명령 발행