ROS 학습에서 발생하는 문제 및 해결 방법

질문 1. xarco를 사용하여 urdf를 생성할 때 joint_state_publisher/joint_state_publisher_gui를 실행할 때 오류가 보고됩니다.

오류는 다음과 같습니다.

[joint_state_publisher_gui-4] process has died [pid 97153, exit code 1, cmd /opt/ros/melodic/lib/joint_state_publisher_gui/joint_state_publisher_gui __name:=joint_state_publisher_gui __log:=/home/ros/.ros/log/4422783c-0504-11ee-8b5a-000c29b0c758/joint_state_publisher_gui-4.log].
log file: /home/ros/.ros/log/4422783c-0504-11ee-8b5a-000c29b0c758/joint_state_publisher_gui-4*.log

이유: 일반적으로 urdf에 한자가 포함되어 있기 때문입니다.

해결책:

  1. urdf 파일에서 모든 중국어 문자를 삭제하십시오.
  2. joint_state_publisher 및 joint_state_publisher_gui 구성 수정
    • cd /opt/ros/melodic/lib/joint_state_publisher (joint_state_publisher_gui类似)
    • sudo gedit joint_state_publisher
    • 개정하다
    • sys 가져오기 후 reload(sys) sys.setdefaultencoding("utf-8") 추가
  3. 오류가 계속 보고되면 실행 권한을 수정합니다.

    cd /opt/ros/melodic/lib/joint_state_publisher

    chmod 777 joint_state_publisher

질문 2. amcl을 사용하여 를 찾을 때 경고가 표시되며 No laser scan received/scan 주제에 데이터가 있고 amcl도 이 주제를 구독했습니다.

오류는 다음과 같습니다.

amcl: No laser scan received (and thus no pose updates have been published) for xxxx seconds ?

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

이유: 주행 기록계 정보가 없어 amcl 좌표계가 무질서합니다.
해결책:

  1. 주행 정보 추가
  2. 게시물 /odom 주제
  3. base_link에서 odom으로 변환 추가

参考
amcl: xxxx초 동안 수신된 레이저 스캔이 없습니다(따라서 포즈 업데이트가 게시되지 않음)?

질문 3. .py 파일을 실행하면 오류가 보고됩니다.

이유:

  1. .py 파일 권한 부여 여부,
  2. CMakeLists.txt에 실행 파일을 표시할지 여부,
  3. 중국 발언 때문인가.

해결책:

  1. sudo 초모드 +x .py
  2.  ## Mark executable scripts (Python etc.) for installation
     ## in contrast to setup.py, you can choose the destination
     # catkin_install_python(PROGRAMS
     #   scripts/my_python_script
     #   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
     # )
     # 
     catkin_install_python(PROGRAMS
     scripts/talker.py
     DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
     )
    
  3. 파이썬 파일 맨 위에 추가
    #! /usr/bin/env python
    # -*- coding: UTF-8 -*-
    

질문 4. ModuleNotFoundError: 실행 파일이 roalaunch에서 시작될 때 'xxxxx'라는 모듈이 보고되지 않습니다.

문제 설명:

Traceback (most recent call last):
  File "/home/ros/catkin_workspace/src/arbotix_ros/arbotix_python/bin/arbotix_driver", line 30, in <module>
    import rospy
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
    from .client import spin, myargv, init_node, \
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
    import roslib
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
    from roslib.launcher import load_manifest  # noqa: F401
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
    import rospkg
ModuleNotFoundError: No module named 'rospkg'

이유

ubuntu18.04에서 사용하는 ros 버전이 melodic이고 melodic은 기본적으로 python2를 사용하지만 실제로는 python3을 사용하여 코드를 실행하기 때문입니다.

해결책

  1. bashrc 파일에 추가alias python=python3
  2. 저장 후source ~/.bashrc
  3. 다운로드pip3 install rospkg

질문 5. vscode 터미널의 글자 간격이 너무 큽니다.

문제 설명:
여기에 이미지 설명 삽입

원인
Linux의 글꼴로 인해 문자 간격이 너무 큽니다.

해결책
여기에 이미지 설명 삽입

질문 6. ROS에서 Gazebo를 처음 시작할 때 Err [REST.cc:205] Error in REST 요청이 나타납니다.

  1. 문제 설명
    여기에 이미지 설명 삽입

  2. 솔루션:
    여기에서 .ignition/fuel/config.yaml 파일을 수정해야 합니다.

    yaml 파일 명령을 엽니다.

    sudo gedit ~/.ignition/fuel/config.yaml

    url : https://api.ignitionfuel.org#으로 주석 처리

    그런 다음 추가

    url: https://api.ignitionrobotics.org

    아래 그림과 같이:

    여기에 이미지 설명 삽입

<!-- 将 Urdf 文件的内容加载到参数服务器 -->
<param name="robot_description" textfile="$(find simu02)/urdf/urdf02_helloworld.urdf" />
<node pkg="rviz" type="rviz" name="rviz" />
<!-- 启动 gazebo -->
<!-- <include file="$(find gazebo_ros)/launch/empty_world.launch" /> -->

<!-- 在 gazebo 中显示机器人模型 -->
<!-- <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model car -param robot_description"  /> -->

python3을 사용하도록 기본값 설정

  1. Python3으로 조정된 기본 Python2
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 200
    
  2. Python2로 조정된 기본 Python3
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 200
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 100
    
  3. 터미널에 python을 입력하고 python3이 기본적으로 성공적으로 사용됨을 확인하십시오!
    여기에 이미지 설명 삽입

질문 7. joint_state_publisher와 같은 파일 문자 세트 비호환성

  1. 문제 설명

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 53-57: ordinal not in range(128)
    
    [joint_state_publisher-1] process has died [pid 9340, exit code 1, cmd /opt/ros/melodic/lib/joint_state_publisher/joint_state_publisher __name:=joint_state_publisher __log:=/home/yzh/.ros/log/5314feca-c547-11ed-b4c2-000c2907fba7/joint_state_publisher-1.log].
    
    log file: /home/yzh/.ros/log/5314feca-c547-11ed-b4c2-000c2907fba7/joint_state_publisher-1*.log
    
    
  2. 문제 원인

    문자셋의 문제때문인데요 중국어 주석을 쓰지 말라는 해결방법을 많이 보았는데 주석은 매우 중요합니다.

  3. 해결책

    /opt/ros/melodic/lib/joint_state_publisher/joint_state_publisher에서 파일을 찾아 추가합니다.

    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    

    이 두 줄의 코드는 문자 집합 문제를 해결할 수 있습니다.

추천

출처blog.csdn.net/weixin_45827203/article/details/131092263