(13) 메카넘 바퀴 로봇(Ubuntu)의 IMU 센서 기능 테스트

Ubuntu 20.04 LTS 환경에서 패키지 빌드

마지막으로 IMU 센서의 완성은 윈도우 환경에서 실행 가능한 EXE로 확인했습니다.

우분투에서 바로 테스트해보고 싶었는데 AMD64 라이브러리가 공식 Github 저장소에 잘못 업로드 되어서 확인하고 수정하는데 시간이 좀 걸렸습니다.

(10) 메카넘 바퀴달린 로봇 IMU 센서 동작 테스트(창)

IMU 센서 IMU 센서는 NTREX에서 개발한 MW-AHRSv2를 사용합니다. MW-AHRSv1 (3축 가속도, 3축 자이로, 3축 지자기 AHRS 모듈) NTREX의 두 번째 IMU 런칭!! 3축 가속도, 3축 자이로

merobot.tistory.com

Ntrex에서 제공하는 ROS2 패키지를 빌드합니다.

GitHub 저장소는 아래와 같습니다.

GitHub – ntrexlab/2th_NtrexAHRS_lib_ROS

GitHub에서 계정을 생성하여 ntrexlab/2th_NtrexAHRS_lib_ROS 개발에 기여하십시오.

github.com

빌드 환경은 다음과 같습니다.

  • 우분투 20.04 LTS AMD64
  • ROS2 은하계

이 패키지는 ROS2 Foxy용으로 제작되었기 때문에 ROS2 Galactic에서 사용하려면 일부 수정이 필요합니다.

여러 플랫폼에서 빌드할 수 있도록 다양한 아키텍처용 라이브러리 파일도 제공되었습니다.

Jetson Nano에서 구축할 때도 쉽게 가능할 것 같습니다.

사용 중인 플랫폼의 아키텍처에 따라 라이브러리 파일 교체

다음과 같은 많은 유형의 CPU 아키텍처가 있습니다. B. 소형 기기에 특화한 ARM, 현재 대부분의 노트북에 탑재된 AMD64, 오랫동안 사용해온 x86.

라이브러리 호환성은 아키텍처 유형에 따라 다르므로 적절한 라이브러리가 패키지에 포함되어야 합니다.

터미널에 arch를 입력하여 아키텍처를 확인하십시오.

arch
# AMD64의 경우 x86_64
# JetsonNano B01의 경우 aarch64

AMD64 아키텍처를 의미하는 x86_64가 나왔습니다.

위의 리포지토리에서 복제하면 폴더 구조는 다음과 같습니다.

.
├── lib_aarch64
│   └── MW_AHRS_aarch64.a
├── lib_amd64
│   └── MW_AHRS_amd64.a
├── lib_arm64
│   └── MW_AHRS_arm64.a
├── lib_armv7l
│   └── MW_AHRS_armv7l.a
├── README.md
└── ros2_example
    └── stella_ahrs

위는 모든 아키텍처에 적합한 라이브러리 파일(.a)과 샘플 ROS2 파일입니다.

자신의 아키텍처에 맞는 라이브러리 파일(.a)을 복사하여 파일을 삭제한 후 아래 폴더에 붙여넣습니다.

.
└── stella_ahrs
    ├── CMakeLists.txt
    ├── config
    │   └── config.yaml
    ├── include
    │   ├── mw
    │   └── serial
    ├── launch
    │   └── stella_ahrs_launch.py
    ├── lib
    │   └── MW_AHRS_aarch64.a #이 파일 삭제 후 붙여넣기!
    ├── mw
    │   └── mw_ahrs.cpp
    ├── package.xml
    ├── rviz
    │   └── imu_test.rviz
    ├── serial
    │   ├── list_ports_linux.cc
    │   ├── serial.cc
    │   └── unix.cc
    └── src
        └── listener.cpp

그리고 CMakeLists.txt 파일에서 라이브러리 변경 사항을 변경합니다.

target_link_libraries(${PROJECT_NAME}_node ${CMAKE_CURRENT_SOURCE_DIR}/lib/MW_AHRS_aarch64.a)
# 위 내용에서 변경한 라이브러리 이름으로 수정
target_link_libraries(${PROJECT_NAME}_node ${CMAKE_CURRENT_SOURCE_DIR}/lib/MW_AHRS_amd64.a)

ROS2 Galactic과 일치하도록 수정된 실행 파일

colcon build 이후 네임스페이스, 네이밍, 실행 오류가 없으면 커밋할 수 있습니다.

기존 부팅 파일은 다음과 같습니다.

driver_node = LifecycleNode(package="stella_ahrs",
                            node_executable="stella_ahrs_node",	# 이 부분
                            node_name="stella_ahrs_node",# 이 부분
                            output="screen",
                            emulate_tty=True,
                            node_namespace="/",	# 이 부분
                            )

주석이 달린 부분을 다음과 같이 수정합니다.

driver_node = LifecycleNode(package="stella_ahrs",
                            executable="stella_ahrs_node",
                            name="stella_ahrs_node",
                            output="screen",
                            emulate_tty=True,
                            namespace="/",
                            )

포트 이름 변경

USB로 RS-232를 통해 IMU 센서를 데스크톱 또는 SBC에 연결합니다.

그렇다면 포트는 /dev 아래에 할당되지만 권한을 chmod하고 포트 이름을 정의해야 합니다.

ls /dev/tty*

위 명령어를 입력하여 할당된 USB 포트 수를 확인합니다.

ttyUSB0에 할당되었다고 합니다.

sudo chmod 777 /dev/<IMU센서의 포트>

포트 권한을 부여합니다.

그런 다음 패키지 내의 src 폴더로 이동하여 listener.cpp 파일을 엽니다.

#include "mw_ahrs.hpp"

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);

    char *port = "/dev/AHRS"; #이 부분을 수정!

    /*
        <ntrex::MwAhrsRosDriver>(port_name, baudrate, sel)

        sel 0 - 기능사용하지 않음
        sel 1 - Z축 캘리브레이션
        sel 2 - 각도리셋
        sel 3 - Z축 캘리브레이션및 각도리셋
    
    */
    rclcpp::spin(std::make_shared<ntrex::MwAhrsRosDriver>(port,115200,3));
    rclcpp::shutdown();
    return 0;
}

위의 주석 부분에서 포트 이름을 자신의 이름으로 변경하십시오.

짓다

나만의 작업 공간을 구축하세요.

빌드하는 동안 무시할 수 있는 경고가 표시됩니다.

그런 다음 시작 파일을 실행하면 평소와 같이 CLI에 나타납니다.

(INFO) (launch): Default logging verbosity is set to INFO
(INFO) (stella_ahrs_node-1): process started with pid (18437)
(stella_ahrs_node-1) 
(stella_ahrs_node-1) PortName : /dev/ttyUSB0 Connect OK 
(stella_ahrs_node-1) 
(stella_ahrs_node-1) (AHRS INFO) AHRS_Calibration OK ....
(stella_ahrs_node-1) 
(stella_ahrs_node-1) (AHRS INFO) AHRS_Euler_RESET OK ....
(stella_ahrs_node-1) 
(stella_ahrs_node-1) (AHRS INFO) ACC, GYR, DEG, MAG / 10ms / binary 
(stella_ahrs_node-1) (AHRS INFO) RUN ....
(stella_ahrs_node-1)

배송 시 보정이 완료되고 전송 속도가 115200으로 설정됩니다.

Jetson Nano 기반 구축

Jetson Nano 위에 구축된 경우 Github 리포지토리는 기본적으로 aarch64 아키텍처를 사용합니다. Jetson Nano에서 빌드할 때 라이브러리 경로 및 이름 변경을 생략할 수 있습니다.

결과 확인

우분투에서는 리포지토리를 확인하고 빌드에 성공했기 때문에 Jetson Nano에도 빌드되었습니다.

그런 다음 노트북과의 SSH 통신에 대한 ROS2 항목을 확인했습니다.

(주제 목록)

/imu/데이터
/imu/data_raw
/imu/mag
/imu/ 갈망

– 테마 /imu/data

header:
  stamp:
    sec: 1678905590
    nanosec: 355329601
  frame_id: ''
orientation:
  x: -0.0022650316823273897
  y: 0.008727502077817917
  z: -0.00041651472565717995
  w: 0.9999592304229736
orientation_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
angular_velocity:
  x: 0.0
  y: -0.0017453292780017621
  z: -0.0017453292780017621
angular_velocity_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
linear_acceleration:
  x: 0.0
  y: 0.0
  z: 9.767423320505022
linear_acceleration_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0

– 테마 /imu/data_raw

header:
  stamp:
    sec: 1678905686
    nanosec: 766772919
  frame_id: ''
orientation:
  x: 0.0
  y: 0.0
  z: 0.0
  w: 1.0
orientation_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
angular_velocity:
  x: -0.0017453292780017621
  y: 0.0017453292780017621
  z: -0.0017453292780017621
angular_velocity_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
linear_acceleration:
  x: -0.029419950255728324
  y: -0.05883990051145665
  z: 9.80665
linear_acceleration_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0

– /imu/mag 테마

header:
  stamp:
    sec: 1678905788
    nanosec: 136699912
  frame_id: ''
magnetic_field:
  x: 1.0300000212737359e-05
  y: -1.06999996205559e-05
  z: -2.5800000003073364e-05
magnetic_field_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0

– 테마 /imu/yaw

data: 18.940000534057617