터틀봇 버거를 사용중인데 bringup에서 warn이 나고 있습니다

ubuntu@ubuntu:~$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
… logging to /home/ubuntu/.ros/log/021fca42-f3ad-11ed-9d3f-c83dd465bfa7/roslaunch-ubuntu-2301.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://192.168.61.187:35545/

SUMMARY

PARAMETERS

  • /rosdistro: melodic
  • /rosversion: 1.14.10
  • /turtlebot3_core/baud: 115200
  • /turtlebot3_core/port: /dev/ttyACM0
  • /turtlebot3_core/tf_prefix:
  • /turtlebot3_lds/frame_id: base_scan
  • /turtlebot3_lds/port: /dev/ttyUSB0

NODES
/
turtlebot3_core (rosserial_python/serial_node.py)
turtlebot3_diagnostics (turtlebot3_bringup/turtlebot3_diagnostics)
turtlebot3_lds (hls_lfcd_lds_driver/hlds_laser_publisher)

ROS_MASTER_URI=http://192.168.61.164:11311

process[turtlebot3_core-1]: started with pid [2310]
process[turtlebot3_lds-2]: started with pid [2311]
process[turtlebot3_diagnostics-3]: started with pid [2312]
[INFO] [1684216100.935510]: ROS Serial Python Node
[INFO] [1684216101.056369]: Connecting to /dev/ttyACM0 at 115200 baud
[INFO] [1684216103.203027]: Requesting topics…
[INFO] [1684216103.295627]: Note: publish buffer size is 1024 bytes
[INFO] [1684216103.321543]: Setup publisher on sensor_state [turtlebot3_msgs/SensorState]
[INFO] [1684216103.375564]: Setup publisher on firmware_version [turtlebot3_msgs/VersionInfo]
[INFO] [1684216104.013301]: Setup publisher on imu [sensor_msgs/Imu]
[INFO] [1684216104.061038]: Setup publisher on cmd_vel_rc100 [geometry_msgs/Twist]
[INFO] [1684216104.370265]: Setup publisher on odom [nav_msgs/Odometry]
[INFO] [1684216104.470047]: Setup publisher on joint_states [sensor_msgs/JointState]
[INFO] [1684216104.514156]: Setup publisher on battery_state [sensor_msgs/BatteryState]
[INFO] [1684216104.562306]: Setup publisher on magnetic_field [sensor_msgs/MagneticField]
[INFO] [1684216107.340736]: Setup publisher on /tf [tf/tfMessage]
[INFO] [1684216107.535306]: Note: subscribe buffer size is 1024 bytes
[INFO] [1684216107.561533]: Setup subscriber on cmd_vel [geometry_msgs/Twist]
[INFO] [1684216107.621173]: Setup subscriber on sound [turtlebot3_msgs/Sound]
[INFO] [1684216107.685457]: Setup subscriber on motor_power [std_msgs/Bool]
[INFO] [1684216107.753399]: Setup subscriber on reset [std_msgs/Empty]
[WARN] [1684216107.804414]: Failed to get param: timeout expired
[INFO] [1684216107.835099]: Setup TF on Odometry [odom]
[INFO] [1684216107.859878]: Setup TF on IMU [imu_link]
[INFO] [1684216107.887358]: Setup TF on MagneticField [mag_link]
[INFO] [1684216107.919770]: Setup TF on JointState [base_link]
[INFO] [1684216107.971009]: --------------------------
[INFO] [1684216108.002886]: Connected to OpenCR board!
[INFO] [1684216108.030975]: This core(v1.2.2) is compatible with TB3 Burger
[INFO] [1684216108.059094]: --------------------------
[INFO] [1684216108.087005]: Start Calibration of Gyro
[INFO] [1684216108.115519]: Calibration End

[WARN] [1684216107.804414]: Failed to get param: timeout expired ==>> bringup할때 이런 에러가 나지 않아야 뒤에 slam이나 다른걸 할때 오류가 안나는걸로 아는데 해결방법 없을까요??
그리고 저 메시지가 나와서 slam과 Rviz에서 Nav Goal을 하는데 터틀봇 버거가 위치추정을 못하고 계속 맵이 뒤죽박죽 입니다.

오류 메시지 "Failed to get param: timeout expired"는 매개변수(param) 값을 가져올 수 없을 때 발생하는 경고 메시지입니다. 이 메시지는 일반적으로 ROS 시스템에서 매개변수 값을 가져오려고 할 때 해당 매개변수가 존재하지 않거나 접근 권한이 없을 때 발생합니다.

해결 방법을 찾기 위해 다음 단계를 따를 수 있습니다:

  1. ROS 매개변수 확인: 다음 명령어를 사용하여 ROS 시스템의 매개변수 목록을 확인합니다.

    rosparam list

반환된 목록에서 해당 매개변수(/timeout)가 있는지 확인합니다. 만약 매개변수가 존재하지 않는다면, 이 경고 메시지가 발생하는 원인일 수 있습니다.

  1. 매개변수 설정: 매개변수가 존재하지 않거나 접근 권한이 없는 경우, 해당 매개변수를 설정하여 이 문제를 해결할 수 있습니다. 다음 명령어를 사용하여 매개변수를 설정합니다.

    rosparam set <매개변수_이름> <값>

여기서 <매개변수_이름>/timeout로 지정하고 <값>에는 적절한 값을 입력합니다.

  1. 다른 노드와의 충돌 확인: 때로는 다른 노드가 동일한 매개변수에 접근하여 충돌이 발생할 수 있습니다. 다른 노드에서 해당 매개변수를 사용하고 있는지 확인하고, 충돌이 있는 경우 충돌을 해결하기 위해 해당 노드를 종료하거나 매개변수 사용을 조정해야 할 수도 있습니다.

  2. ROS 시스템 재시작: 문제가 지속되는 경우, ROS 시스템을 완전히 재시작하고 다시 시도해 보세요. 모든 노드와 프로세스를 종료한 후 다시 실행합니다.

위의 단계를 따라 해결해 보고 문제가 여전히 발생하는 경우, 더 많은 정보가 필요할 수 있습니다.

slam과 Rviz에서 맵이 제대로 생성되지 않는 문제에 대해서는 맵 작성, 로봇 설정, 센서 캘리브레이션 등을 검토해야 할 수 있습니다.

/timeout의 적절한 값이 얼마인거죠?

적정한 타임아웃 값은 많은 요인에 따라 달라질 수 있으며, 다음과 같은 요소들이 고려되어야 합니다:

  1. 작업의 특성: 작업의 복잡성, 수행 시간, 외부 리소스에 대한 응답 시간 등을 고려해야 합니다. 작업이 더 많은 시간이 필요한 경우 타임아웃 값을 늘리는 것이 적절할 수 있습니다.
  2. 네트워크 지연: 네트워크 통신이 필요한 경우, 네트워크 지연을 고려하여 타임아웃 값을 설정해야 합니다. 일반적으로 네트워크 지연은 통신하는 장치 및 네트워크 환경에 따라 다르므로, 적정한 타임아웃 값을 설정하기 위해서는 실제 환경에서의 테스트와 조정이 필요합니다.
  3. 안정성 요구 사항: 작업이 중단되거나 예상치 못한 상황이 발생할 경우에 대비하여 적절한 타임아웃 값을 선택해야 합니다. 안정성 요구 사항이 높을수록 긴 타임아웃 값을 설정하는 것이 적절할 수 있습니다.
  4. 사용자 경험: 사용자가 작업이 진행 중인지를 인지하고, 작업이 오랫동안 대기하는 것으로 인해 사용자 경험이 저하되지 않도록 고려해야 합니다. 사용자가 너무 오랜 시간을 기다리게 되면 타임아웃이 너무 짧게 설정되었을 수 있습니다.

타임아웃 값은 각 상황에 따라 다르므로, 애플리케이션 및 시스템 요구 사항을 고려하여 적정한 값을 결정해야 합니다. 초기 설정 값이 주어졌다면, 해당 값으로 테스트를 진행하고 작업이 올바르게 동작하는지 확인하며 필요한 경우 조정해 나가는 것이 좋습니다.

또한, “Failed to get param: timeout expired” 오류 메시지는 OpenCR과 Raspberry Pi(RPi) 간의 통신이 원활하지 않을 때 발생할 수 있습니다. 이 경우에는 OpenCR을 재부팅해 주는 것이 해결 방법 중 하나일 수 있습니다.

OpenCR을 재부팅하려면 다음 단계를 따를 수 있습니다:

  1. ROS 시스템을 종료합니다. 이는 ROS 노드 및 프로세스를 모두 중지하는 것을 의미합니다.
  2. OpenCR을 연결한 RPi의 전원을 끄고, 몇 초간 대기한 후 다시 전원을 켭니다.
  3. ROS 시스템을 다시 시작합니다. 필요한 노드와 프로세스를 실행하여 통신을 재개합니다.

위의 단계를 따라 OpenCR을 재부팅하면 "Failed to get param: timeout expired"와 관련된 문제가 해결될 수 있습니다. 그러나 만약 문제가 계속되면, 다른 원인이 있을 수 있으므로 추가적인 확인이 필요할 수 있습니다.

알려주신 방법대로 했는데 “Failed to get param: timeout expired” 오류 메시지는 그대로 뜨고 개선된 부분이 없습니다…