概述
经验教训
QS1:rviz地图与gazebo不同步
详细描述:
工作空间:仿真项目
文件位置 course03
启动urdf_gazebo/launch/union.launch (模型启动文件 和 gazebo环境),然后再启动nav_ma/launch/nav.launch(rviz建图),出现rviz中 no map receive , 地图无显示,且无报错。
正常应该是rviz同步显示gazebo地图中被雷达检测到的部分。
问题解决:
发现是更改urdf_gazebo/xacro/my_base.urdf.xacro中的小车底盘时,添加了车轮,从二轮转为四轮,并修改了之前的轮子名称。但没有修改urdf_gazebo/xacro/gazebo/move.xacro小车控制器对应的joint,导致运行出错,节点未正常发布,修改后即可。
QS2:仿真运动需要保证rviz与gazebo地图相同
详细描述:
工作空间:仿真项目
文件位置 course03
仿真运动是指用gazebo环境模拟真实环境,然后通过运动控制模拟导航效果。
因此需要保证rviz的地图与gazebo相同。
一般 gazebo地图 --> rviz 地图
流程:
-
启动urdf_gazebo/launch/union.launch (模型启动文件 和 gazebo环境)
-
然后再启动nav_ma/launch/nav.launch(rviz建图),rviz地图与同步gazebo。但此时的rviz只有雷达检测到的部分地图,无法从一开始获取全部地图信息.
-
因此需要手动移动小车,运行
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
,控制小车前进,通过雷达扫描各处更新地图,最后获取完整地图。 -
启动 nav_ma/launch/map_save.launch ,即可直接保存完整地图为nav.yaml
QS3:运动时出现Extrapolation Error
工作空间:仿真项目
问题描述:使用ted_local_planner_params.yaml后,进行仿真运动时出现如下报错。
解决方法:
此处是local_costmap_params.yaml中global_frame
需要设置为map
,而不是odam
引用:https://answers.ros.org/question/304537/could-not-transform-the-global-plan-to-the-frame-of-the-controller/
QS4:rosdep update urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
解决方法:
export SSL_CERT_FILE=/usr/lib/ssl/certs/ca-certificates.crt
引用:https://answers.ros.org/question/264262/rosdep-update-urlopen-error-ssl-certificate_verify_failed-certificate-verify-failed/
QS4:手动安装编译movelt,缺少依赖
工作空间:仿真项目
由于需要python3的支持,不能直接使用apt 下载,采用手动编译方式。
在~/ros_catkin_ws/src
,通过git clone方式从github下载相关包,一般可以使用rosdep
,批量下载依赖包,但我由于存在一个依赖[libcurl-dev]的包报了cannot-locate-rosdep-definition的错误,由下列链接得知时没有对应key,需要修改对应包的package.xml里的依赖包名,
https://answers.ros.org/question/320734/cannot-locate-rosdep-definition/
key值查询
但由于报错没说明是哪个包的依赖于[libcurl-dev],故放弃rosdep方法,采用手动git clone下载。大部分包一般多在ros-planning仓库中,部分不在的,手动搜索也可以得到。
提示以下rosdep的用法:
一般是使用rosdep install --from-paths src --ignore-src -y
自动批量安装src内包对应的依赖包,但由于我们使用python3支持,有些包是基于python2的,需要添加指令屏蔽这些包,完整指令如下:
rosdep install --from-paths src --ignore-src -y --skip-keys="`rosdep check --from-paths src --ignore-src | grep python | sed -e "s/^aptt//g" | sed -z "s/n/ /g"`"
流程:
movelt 编译流程
先在~/ros_catkin_ws/src
,下载 movelt 的包,然后在~/ros_catkin_ws/
运行catkin build
,然后报出新错误再下载缺少的包,重复以上操作直至无错误,大约下了十几个包,才编译无误,正常运行。
QS5:测试仿真机械臂时,需要用到joint_state_publisher_gui
工作空间:仿真项目
运行项目:~/arm-master/src/arm_description/launch/rviz.launch
项目环境: python3
出现报错:
Traceback (most recent call last):
File "/home/meroke/ros_catkin_ws/install/lib/joint_state_publisher_gui/joint_state_publisher_gui", line 44, in <module>
import joint_state_publisher_gui
ImportError: No module named joint_state_publisher_gui
在之前已经通过sudo apt install ros-melodic-joint_state_publisher_gui
安装过了相关包,因此/opt/ros/melodic/
和 中查看,发现/home/meroke/ros_catkin_ws/install
对比包文件,发现一致没有问题,如果不一致可以直接复制文件夹。
后来注意到报错是在python文件,因此 对比 /opt/ros/melodic/lib/python2.7/dist-packages
和 /home/meroke/ros_catkin_ws/install/lib/python3/dist-packages
发现,后者缺少 joint_state_publisher_gui
的文件夹,因此从前者复制到后者,即可解决问题。
QS6:缩小gampping建立的地图范围
工作空间: eaibot机器人
具体文件 /home/eaibot/2022_jsjds/ros_base/src/dashgo/dashgo_nav/launch/include/imu/gmapping_base_adjusted.launch
问题描述:gmapping生成的pgm地图,有效范围占比很小。通过修改上述文件部分参数,以及摆正机器人初始位置,可有效减少无用的地图范围。
修改重要参数:
<param name="maxUrange" value="4.0" /> <!-- maxUrange < real sensor range < maxRange -->
<param name="maxRange" value="5.0" /> <!--实际设置,如果大于5.0,如13.0, 将导致雷达光线外射,检测范围过大 -->
<!--超级重要, 经过测试,实际使用如下配置有效占比将接近一半-->
<param name="xmin" value="-1.0" />
<param name="ymin" value="-1.0" />
<param name="xmax" value="5.0" />
<param name="ymax" value="5.0" />
<!--注意 机器必须摆在初始位置,否则,倾斜的角度将增大无效地图 -->
QS7:非节点python文件调用ROS包
工作空间:eaibot机器人
问题描述:在detection2021中的ros文件夹下的ros python包无法调用
因此采用新建ros_packages_2022文件夹 将所需要的包git cloen 入src中,并重新编译,在所需运行的非节点python文件(slide.py)头上添加路径:
sys.path.append('../ros_packages_2022/devel/lib/python3/dist-packages/')
并且需要指定去除ROS 默认的python2.7的包文件夹
sys.path.remove("/opt/ros/kinetic/lib/python2.7/dist-packages")
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqLERtLr-1671259460591)(/home/meroke/.config/Typora/typora-user-images/image-20220423201220723.png)]
QS8:Python pip3 开启ssl(HTTPS)
- 下载openssl,并解压进入文件夹
wget http://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -xf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
- 编译openssl
sudo mkdir /usr/local/ssl
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
sudo make && make install
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf # 或者sudo vim /etc/ld.so.conf ,把/usr/local/ssl/lib追加到文件末尾
sudo ldconfig -v
- .重编译Python
注意:这里要重开一个终端,让ssl的设置生效
cd /usr/local/Python-3.6.9
sudo vim Modules/Setup # 将红框的内容解注释 209行左右
然后尝试 sudo make ,会报错(如下类似,图是网上找的,报错是 一致的)
此处由于/usr/local/lib/ 中没有 libssl.so.1.1,故我们从系统环境中搜索
cd ~/
find . -name "libssl.so.1.1"
(base) eaibot@EAI_LEO:~$ find . -name "libssl.so.1.1"
./anaconda3/pkgs/openssl-1.1.1i-h27cfd23_0/lib/libssl.so.1.1
./anaconda3/pkgs/openssl-1.1.1k-h27cfd23_0/lib/libssl.so.1.1
./anaconda3/pkgs/openssl-1.1.1g-h7b6447c_0/lib/libssl.so.1.1
./anaconda3/lib/libssl.so.1.1
./anaconda3/envs/pac_2021/lib/libssl.so.1.1
./anaconda3/envs/pro/lib/libssl.so.1.1
部分人可能在/usr/lib/x86_64-linux-gnu/libssl.so.1.1
中也可找到
# 如果有文件,先备份文件,确保修改不会出现问题,如果出错可以返回原来配置,否则可忽略此步
sudo mv /usr/local/lib/libssl.so.1.1 /usr/local/lib/libssl.so.1.1.old
# 拷贝其他文件覆盖
sudo cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/local/lib/
再次make可能还有类似的错误,处理方法一样,不赘述了。
直至make无误,最后
make install
测试 pip3 -V 是否正常显示
参考链接:
(77条消息) mysql mysql: /usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1’ not found (required by mysql)_senjie_wang的博客-CSDN博客
(77条消息) 解决 /usr/local/lib/libssl.so.1.1: version OPENSSL_1_1_1 not found_sunhson的博客-CSDN博客_libssl.so.1.1
[(77条消息) 解决openssl缺失libssl.so.1.1问题_zzwlyly的博客-CSDN博客_libssl.so.1.1](
QS9:ROS安装 Python3的支持
基础环境配置
首先通过本段链接安装Melodic desktop full
版本ROSROS Melodic Install,以下称其 py2ROS
然后按如下教程安装新的ROSROS python3支持 ,以下称其py3ROS
安装两个版本的ROS的原因:
py2ROS
是运行底层ROS功能包的基础环境py3ROS
是用来配置python3 与ROS相关功能库的
在实际使用中仍然以py2ROS
作为主环境,即最终在~/.bashrc中设置
source /opt/ros/melodic/setup.bash
基础环境配置完毕!
项目需求环境
方法一:
由于导航运行环境是py2ROS
,但Desktop Full 仍不能满足项目运行的所有需要功能包,直接caktin_make项目会失败,需要手动安装部分包。因此可以使用rosdep进行批量安装
rosdep install --from-paths src --ignore-src --rosdistro=melodic -y
如有遗漏,再使用 sudo apt install ros-melodic-[package]
方法二:
也有想直接使用py3ROS
作为主要环境的,这是可以的,但不保证稳定性。对于缺少的包,需要自行从ROS Wiki 搜索,然后找到github源码链接,复制解压到 py3ROS
的 ros_catkin_ws/src
文件夹下,最后使用catkin build package
单独编译包。
PS:如何知道缺少了什么功能包,直接在项目下catkin_make 后,有缺失的依赖会报错提示的
补充具体无效的文章-具体执行步骤
1 问题描述
在Ubuntu18.04中正常安装ROS Melodic后,利用Python3编写节点无法运行,于是补充安装ROS Melodic的Python3支持。
2 解决方法
2.1 安装Python3依赖和ROS包
安装Python3依赖
sudo apt update
sudo apt install -y python3 python3-dev python3-pip build-essential1
利用pip3安装ROS包
sudo -H pip3 install rosdep rospkg rosinstall_generator rosinstall wstool vcstools catkin_tools catkin_pkg
2.2 初始化ROS
sudo rosdep init
rosdep update
若在第一步提示相关文件已存在,利用sudo rm
2.3 创建工作空间
cd ~
mkdir ros_catkin_ws
cd ros_catkin_ws
2.4 下载ROS源码(以Common版本为例)
rosinstall_generator ros_comm --rosdistro melodic --deps --tar > melodic-ros_comm.rosinstall
wstool init -j8 src melodic-ros_comm.rosinstall
wstool update -j 8 -t src 可以从断点处继续下载这些包。
2.5 修改默认Python环境,编译安装
修改ros_catkin_ws//src/catkin/bin/中各文件的环境为Python3,即打开各文件,将第一行#!/usr/bin/env python改为#!/usr/bin/env python3。
rosdep install --from-paths src --ignore-src --rosdistro melodic -y
export ROS_PYTHON_VERSION=3
sudo ./src/catkin/bin/catkin_make_isolated --install --install-space /opt/ros/melodic -DCMAKE_BUILD_TYPE=Release
source /opt/ros/melodic/setup.bash
QS10:连接新机器时,远程rviz显示无map
问题详述:使用新的jetson nano 完成系统配置后,尝试远程连接控制,端口映射无误、功能包齐全,也无报错。但是打开rviz, 什么也没显示,只有网格。
问题原因:主机和从机的ip地址没有匹配,导致雷达数据没有发送到PC端。
问题解决:
PC端
在 ~/.bashrc中修改:
export ROS_HOSTNAME=meroke-W650KJ1-KK1 # PC 名
export ROS_MASTER_URI=http://192.168.31.157:11311 # 小车IP
并在 /etc/hosts 中添加:
192.168.31.157 tdb2 # 小车 ip
192.168.31.226 meroke-W650KJ1-KK1 # PC ip
小车
在 ~/.bashrc中添加:
export ROS_MASTER_URI=http://192.168.31.157:11311
export ROS_HOSTNAME=tdb2
并在 /etc/hosts 中添加:
# ROS host
192.168.31.226 meroke-W650KJ1-KK1
192.168.31.157 tdb2
QS11:catkin_make单独编译一个功能包
catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2"
如果想要再回到那种catkin_make 编译所有包的状态,执行:
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
备注:建议直接使用catkin build编译环境
QS12: catkin build fatial
Errors << qt_gui_cpp:make /home/tdb2/ros_catkin_ws/logs/qt_gui_cpp/build.make.030.log
In file included from siplibqt_gui_cpp_sipcmodule.cpp:7:0:
sipAPIlibqt_gui_cpp_sip.h:10:10: fatal error: sip.h: No such file or directory
#include <sip.h>
- sudo apt install python3-sip-dev
By not providing "FindPCL.cmake"
sudo apt-get install python3-empy
gnome-devel
libgazebo9-dev
libgtk2.0-dev
libgtk-3-dev
QS13:ROS python3 支持问题汇总
1.1 无法定位软件包
Installing python33-rospkg-modules
E: 无法定位软件包 python33-rospkg-modules
Installing python33-catkin-pkg
E: 无法定位软件包 python33-catkin-pkg
Installing python33-nose
E: 无法定位软件包 python33-nose
Installing python33-rospkg
E: 无法定位软件包 python33-rospkg
Installing python3-mock
Installing python3-coverage
Installing python33-numpy
E: 无法定位软件包 python33-numpy
Installing python33-pydot
E: 无法定位软件包 python33-pydot
解决:
sudo apt install python3-rospkg-modules
python3-catkin-pkg
python3-nose
python3-rospkg
python3-mock
python3-coverage
python3-numpy
python3-pydot
pip3 install empy
1.2 catkin build error
- Errro01
Errors << genmsg:install /home/eaibot/2022_jsjds/ros_ws/logs/genmsg/build.install.008.log
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
error: option --install-layout not recognized
CMake Error at catkin_generated/safe_execute_install.cmake:4 (message):
execute_process(/home/eaibot/2022_jsjds/ros_ws/build/genmsg/catkin_generated/python_distutils_install.sh)
returned error code
Call Stack (most recent call first):
cmake_install.cmake:147 (include)
catkin build (python3 支持)可参考指令:
catkin build python_orocos_kdl -DPYTHON_EXECUTABLE=/usr/bin/python3 -DSETUPTOOLS_DEB_LAYOUT=OFF -DPYTHON_INCLUDE_DIR=/usr/local/python3/include/python3.6m -DPYTHON_LIBRARY=/usr/local/python3/lib/libpython3.so
- Error02
发现 DPYTHON_LIBRARY 没有对应的python动态库.so文件,需要重新手动编译python
引用:https://blog.csdn.net/lien0906/article/details/107361822
1. 在下载的python文件夹下,执行指令:
sudo ./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC
2. make
3. sudo make install
- Error03
Assertion failed: check for file existence, but filename (RT_LIBRARY-NOTFOUND) unset. Message: RT Library
catkin clean # 清理之前得到错误残留
catkin build # 重新编译
- Error04
Could not find the following Boost libraries:
boost_python3
# 到libboost_python-py35所在文件夹下,建立软连接
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py35.so libboost_python3.so
sudo ln -s libboost_python-py35.a libboost_python3.a
- Error05
Traceback (most recent call last):
File "/home/tdb3/ros_catkin_ws/src/gencpp/scripts/gen_cpp.py", line 43, in <module>
import genmsg.template_tools
File "/home/tdb3/ros_catkin_ws/src/genmsg/src/genmsg/template_tools.py", line 39, in <module>
import em
ModuleNotFoundError: No module named 'em'
pip3 install empy
1.3 Could not find SIP
下载SIP源文件,进入下载文件夹,执行以下指令,即可完成
python configure.py
make
sudo make install
QS14 :雷达偏移全局地图
方法:
确定不是算法问题后,尝试给轮胎增加摩擦力,如贴上胶带
QS15:eaibot 接入网线仍然无法上网
尝试重启网络服务
sudo service networking restart
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHRFYyNG-1671259460593)(/home/meroke/.config/Typora/typora-user-images/image-20220806222435692.png)]
QS16:小车容易撞到物体,减速不足
减速主要依靠penalty_epsilon
,其值应该接近 max_val_x
如 max_val_x
设为0.5,则penalty_epsilon
可设为0.4 ,减速效果良好。
但避免导航产生负值速率,acc_lim_x
应该大于 penalty_epsilon
,可设为 0.401
QS17: 小车在目标点前后震荡,不到达目标点
方法:
- 降低move_base 控制频率
- 关闭速度平滑器yocs velocity smoothe
QS18:Wheeltec ros源码,arm64(arrch64)平台编译
-
tts 语音模块编译失败
问题在于,其CMakelist.txt 指定错误的动态库版本,原本为x64 ,应该更改为arm64
最后
以上就是健康胡萝卜为你收集整理的ROS导航小车经验总结的全部内容,希望文章能够帮你解决ROS导航小车经验总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复