目录
- 问题1. 在使用xarco建立urdf时,运行joint_state_publisher/joint_state_publisher_gui报错
- 问题2. 使用amcl定位时报`No laser scan received`警告, /scan 话题有数据,amcl也订阅了该话题。
- 问题3. 运行.py文件报错
- 问题4. 在roalaunch一个launch文件时报 ModuleNotFoundError: No module named 'xxxxx'
- 问题5. vscode 终端字符间距过大
- 问题6. 首次在 ROS 中启动 Gazebo 时,出现 Err [REST.cc:205] Error in REST request 问题
- 设置默认使用python3
- 问题7. joint_state_publisher等文件字符集不兼容问题
问题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內部含有中文字符
解决方案:
- 将urdf文件内部中文字符全部刪除;
- 修改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”)
- 若仍然報錯修改執行權限:
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坐标系紊乱。
解决方案:
- 加入里程计信息
- 发布/odom话题
- 加入从base_link到odom的转换
参考
amcl: No laser scan received (and thus no pose updates have been published) for xxxx seconds ?
问题3. 运行.py文件报错
原因:
- 是否授予.py文件权限,
- 是否在CMakeLists.txt中标记为可执行文件,
- 是否因为中文备注。
解决方案:
- sudo chomod +x .py
-
## 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} )
- 在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。
解决方案
- 在bashrc文件里加
alias python=python3
- 保存后
source ~/.bashrc
- 下载
pip3 install rospkg
问题5. vscode 终端字符间距过大
问题描述:
原因
由于Linux下字体原因,导致字符间距过大
解决方案
问题6. 首次在 ROS 中启动 Gazebo 时,出现 Err [REST.cc:205] Error in REST request 问题
-
问题描述
-
解决方法:
这里需要修改.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
- 默认 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
- 默认 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
- 终端输入python,发现默认使用 python3 成功!
问题7. joint_state_publisher等文件字符集不兼容问题
-
问题描述
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
-
问题原因
是由于字符集的问题,看到很多解决办法说不要写中文注释,但是注释是很重要的啊,不然以后重新审视代码就会不知道在干啥。
-
解决方法
找到/opt/ros/melodic/lib/joint_state_publisher/joint_state_publisher里的文件加入
reload(sys) sys.setdefaultencoding( "utf-8" )
这两行代码即可解决字符集的问题。