frame ID로 map을 받아오지 못하고 있습니다
페이지 정보

본문
REMOTE PC 버전: Ubuntu 20.04
ROS 버전: ROS Foxy
저번 질문과 다른 문제가 발생하고 있어서 다시 질문 드립니다.
SLAM으로 제작한 map에 대해서 navigation 하는 과정에서 문제가 발생하고 있습니다.
첨부된 사진은 오류가 발생하고 있는 rviz 화면을 캡쳐한 것입니다.
처음에는 첫 번째 사진처럼 global status에서 warning이 뜨다가 몇 초 시간이 지나면 두 번째 사진처럼 global status에서 Error가 발생합니다.
Fixed Frame에서 Frame [map]이 존재하지 않다고 하는데 무엇이 문제이며 어떻게 해결할 수 있나요?
gloabl options의 Fixed Frame을 보면 map이라고 되어있긴 한데, 확장시켜보면 [map]이 존재하지 않는 것을 확인할 수 있었습니다.
navigation을 실행하기 위해 사용하는 명령어로 "ros2 launch stella_navigation2 navigation2.launch.py map:=$HOME/track_box.yaml"를 사용하고 있습니다.
명령어에서는 map 파일을 지정해서 실행시키기 때문에 Fixed Frame이 map으로 지정되어 실행되지만, 실제로는 data를 받아오지 못하고 있어서 이 문제가 발생하는 것으로 생각하고 있는데 맞을까요?
위 명령어를 실행한 후, 해당 터미널에서는 아래와 같은 메세지가 뜹니다.
"[rviz2-10] Warning: Invalid frame ID "map" passed to canTransform argument source_frame - frame does not exist"
--------------------------------------------------------------------------------------------
혹시 상황 전달을 명확히 하는데 도움이 될까 해서 추가합니다.
라즈베리파이의 터미널에서 "ros2 topic echo /imu/data"라고 입력해 값을 받아보면 아래와 같이 출력됩니다.
---
header:
stamp:
sec: 1756309077
nanosec: 819201058
frame_id: ''
orientation:
x: -0.26259902119636536
y: 0.2591439187526703
z: 0.6622866988182068
w: 0.6521216034889221
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.008726646259971648
z: 0.0
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.03922660186316352
y: 0.07845320372632704
z: 9.836070155751704
linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
---
이때 frame_id 부분이 ' '으로 비워져 있는 것을 확인할 수 있었습니다.
이 또한 비슷한 원인이라고 생각되어 함께 보내드립니다. 확인해주시면 감사하겠습니다.
- 이전글EAI 보드 구매 문의 25.08.29
- 다음글navtigation 오류 문제로 문의드립니다 25.08.20
댓글목록

오오잉님의 댓글
오오잉 작성일
추가로 질문 사항이 생겨 댓글로 질문 남깁니다.
두 대의 ROS를 이용해 SLAM으로 map을 실시간으로 그려내고, 그렇게 업데이트된 map에 대한 navigation 기능을 수행하는 시스템을 구현하고 싶습니다.
기존의 map 파일을 저장하고, 저장된 map 파일을 열어서 navigation을 하는 것이 아닌, 실시간으로 파악되는 map topic 값을 이용해서 다른 ROS 로봇에서 navigation을 할 수 있는지가 궁금합니다.
navigation을 하는 로봇이 SLAM을 하는 로봇으로부터 실시간 업데이트 되는 map topic을 기반으로 동작하는 것이 가능한가요?
이를 위한 명령어가 있을까요? 혹은 패키지 단위에서 커스터마이징이 가능할까요?
또한 costmap이 동적으로 변하는 상황에서 경로 계획이 정상적으로 이루어 질 수 있나요?
(단, 경로를 생성하는 그 순간에 대해서만 '실시간'이 성립되어도 만족합니다. 경로가 생성된 이후에도 경로 수정이 되는 것까지 바라는 것은 아닙니다.)

최고관리자님의 댓글
최고관리자 작성일
안녕하세요.
아이디어 로봇입니다.
map의 tf가 연결되지 않는 문제는 주로 원격PC에서 로봇의 tf를 받아올 때 지연이 발생하는 경우 로봇의 tf와 map의 tf가 시간이 맞지 않아 발생하게 됩니다.
이러한 문제는 주로 DDS 문제로 발생하기 때문에 우선 로봇과 원격PC의 DDS를 Navigation2에서 권장하는 Cyclone DDS로 통일 시켜 주세요.
dds의 자세한 정보는 아래 ROS 문서에서 확인하실 수 있습니다.
https://docs.ros.org/en/foxy/Installation/DDS-Implementations.html
추가로 질문 주신 실시간 맵을 사용한 navigation의 경우에는 현재 STELLA의 cartographer와 navigation2 패키지는 아래의 링크에서 확인하실 수 있는 ros2 기본 패키지를 STELLA에 맞게 실행시켜주는 패키지이기 때문에 해당 패키지를 수정하셔도 해당 기능을 구현하기는 어려울 것으로 예상됩니다.
https://github.com/ros2/cartographer_ros
https://docs.nav2.org/index.html
아래 문서를 확인하여 보시면 navigation2와 slam을 동시에 실행하는 내용이 있습니다.
https://docs.nav2.org/tutorials/docs/navigation2_with_slam.html
원하시는 기능과 유사한 기능으로 예상되어 개발에 참고하실 수 있으실 것 같습니다.

오오잉님의 댓글
오오잉 작성일
말씀해주신 Cyclone DDS로 문제를 해결하려고 해보았습니다. apt를 통해 ros-foxy-cyclonedds를 설치하고 RMW_IMPLEMENTATION 환경 변수를 설정하는 표준 방식을 시도했으나 PC에 구성된 커스텀 작업 공간(ydlidar_ros2_driver 포함)의 빌드 스크립트와 충돌하여 colcon build 과정에서 CMake 오류가 반복적으로 발생했습니다.
--- stderr: ydlidar_ros2_driver
CMake Error at /opt/ros/foxy/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:54 (message):
The RMW implementation has been specified as 'rmw_cyclonedds_cpp' via
environment variable 'RMW_IMPLEMENTATION', but it is not available at this
time.
Currently available middlewares:
'rmw_fastrtps_cpp'
Call Stack (most recent call first):
이 문제를 우회하기 위해 시스템 패키지 대신 작업 공간 내에서 Cyclone DDS를 소스코드로부터 직접 빌드하려고 하였으나 VM 네트워크 오류로 계속 다운로드에 실패했습니다. 이에 수동으로 ZIP 파일을 가상머신의 디렉토리로 옮기고 Cyclone DDS의 핵심 라이브러리를 별도로 설치했음에도 불구하고 최종적으로 rmw_cyclonedds_cpp가 컴파일 단계에서 필요한 헤더파일 ddsi_sertopic.h을 찾지 못하는 빌드 오류가 발생했습니다. 아래는 Cyclone DDS 설정을 마친 후 ros 관련 명령어를 입력했을 때 뜨는 error log입니다.
[ERROR] [1756405692.390605652] [rcl]: Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_cyclonedds_cpp'), with error message 'failed to find shared library 'rmw_cyclonedds_cpp', at /tmp/binarydeb/ros-foxy-rmw-implementation-1.0.3/src/functions.cpp:73', exiting with 1., at /tmp/binarydeb/ros-foxy-rcl-1.1.14/src/rcl/rmw_implementation_identifier_check.c:139

최고관리자님의 댓글의 댓글
최고관리자 작성일
해당 에러메시지는 cyclonedds가 설치되지 않았다는 내용으로 확인 됩니다.
다만 apt 설치가 되었기 때문에 설치가 되지 않은 것이 아니고 ros2의 설치 위치가 달라 발생하는 것으로 예상됩니다.
STELLA N2 의 ROS2 foxy는 아래 명령어를 통하여 설치됩니다.
wget https://raw.githubusercontent.com/ntrexlab/ROS_INSTALL_SCRIPT/main/install_ros2_foxy_rp4.sh && chmod 755 ./install_ros2_foxy_rp4.sh && bash ./install_ros2_foxy_rp4.sh
위 명령어로 설치된 경우 현재 ros foxy가 설치된 디렉터리가 /opt/ros 가 아닌 ~/ros_colcon_ws 디렉터리로 설치되어 있을 것으로 예상됩니다.
~/ros_colcon_ws/src 에서 아래 명령어로 dds 소스를 설치하시고
git clone https://github.com/eclipse-cyclonedds/cyclonedds.git
git clone -b foxy https://github.com/ros2/rmw_cyclonedds.git
~/ros_colcon_ws 에서 빌드 전 아래 명령어로 필요한 의존성이 생긴 경우 추가 설치를 먼저 진행하고
rosdep install --from-paths src --ignore-src -r -y
설치 후 symlink-install으로 빌드하여 주세요. ros를 전체 빌드하기 때문에 1~2시간 소요될 수 있습니다.
colcon build --symlink-install
source ~/.bashrc를 진행하기 전에
source ~/ros_colcon_ws/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
로 별도로 source를 진행하고 ros2가 잘 작동하는지 확인하시고
.bashrc에 export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp 를 추가하셔서 source ~/.bashrc를 실행하고
stella 패키지를 실행하시어 문제가 없는지 확인하여 주세요.
