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
    • 改訂
    • import 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 chomod +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. Pythonファイルの先頭に追加します
    #! /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 request が表示されます

  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. デフォルトの Python2 を Python3 に調整
    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. デフォルトの Python3 を Python2 に調整
    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" )
    

    これら 2 行のコードにより、文字セットの問題を解決できます。

おすすめ

転載: blog.csdn.net/weixin_45827203/article/details/131092263