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: No laser scan received (and thus no pose updates have been published) for xxxx seconds ?

问题3. 运行.py文件报错

原因:

  1. 是否授予.py文件权限,
  2. 是否在CMakeLists.txt中标记为可执行文件,
  3. 是否因为中文备注。

解决方案:

扫描二维码关注公众号,回复: 16118199 查看本文章
  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. 在roalaunch一个launch文件时报 ModuleNotFoundError: No module named ‘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" )
    

    这两行代码即可解决字符集的问题。

猜你喜欢

转载自blog.csdn.net/weixin_45827203/article/details/131092263
今日推荐