ROS导航小车经验总结

经验教训

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 地图

流程:

  1. 启动urdf_gazebo/launch/union.launch (模型启动文件 和 gazebo环境)

  2. 然后再启动nav_ma/launch/nav.launch(rviz建图),rviz地图与同步gazebo。但此时的rviz只有雷达检测到的部分地图,无法从一开始获取全部地图信息.

  3. 因此需要手动移动小车,运行 rosrun teleop_twist_keyboard teleop_twist_keyboard.py,控制小车前进,通过雷达扫描各处更新地图,最后获取完整地图。

  4. 启动 nav_ma/launch/map_save.launch ,即可直接保存完整地图为nav.yaml

QS3:运动时出现Extrapolation Error

工作空间:仿真项目

问题描述:使用ted_local_planner_params.yaml后,进行仿真运动时出现如下报错。

image-20220216115920653

解决方法:

此处是local_costmap_params.yamlglobal_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/^apt\t//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地图,有效范围占比很小。通过修改上述文件部分参数,以及摆正机器人初始位置,可有效减少无用的地图范围。

image-20220421220312119

修改重要参数:

      <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" />	
	<!--注意 机器必须摆在初始位置,否则,倾斜的角度将增大无效地图 -->

image-20220421221041983

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)

  1. 下载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
  1. 编译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 
  1. .重编译Python

注意:这里要重开一个终端,让ssl的设置生效

cd /usr/local/Python-3.6.9
sudo vim Modules/Setup   # 将红框的内容解注释 209行左右

img

然后尝试 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的原因:

  1. py2ROS 是运行底层ROS功能包的基础环境
  2. 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源码链接,复制解压到 py3ROSros_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: 小车在目标点前后震荡,不到达目标点

方法:

  1. 降低move_base 控制频率
  2. 关闭速度平滑器yocs velocity smoothe

QS18:Wheeltec ros源码,arm64(arrch64)平台编译

  • tts 语音模块编译失败

    问题在于,其CMakelist.txt 指定错误的动态库版本,原本为x64 ,应该更改为arm64

  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS小车导航期末大作业是一个基于机器人操作系统(Robot Operating System,ROS)进行开发和实现的项目。该项目的目标是设计一个能够自主导航小车,通过传感器获取环境信息并进行路径规划,实现自动驾驶。 在开发过程中,首先需要建立ROS环境并配置相应的软硬件设备,如安装和配置ROS的核心软件、传感器等。接下来,需要编写ROS程序来实现小车导航功能括实时接收传感器数据、通过算法处理数据、生成路径、控制小车运动。 关于传感器部分,可以使用激光雷达、摄像头等多种传感器来获取环境信息。通过激光雷达,可以实时测量小车周围的障碍物位置和距离,通过摄像头可以获取图像信息来检测交通标志、车道线等。 在算法方面,可以使用SLAM(Simultaneous Localization and Mapping)算法来实现同时定位和地图构建,通过激光雷达获取的数据,可以实时构建地图并确定小车的位置。使用路径规划算法,如A*算法、Dijkstra算法等,来生成小车的路径并避免碰撞。 最后,通过ROS提供的控制节点,可以控制小车的驱动器,实现小车的运动。通过将路径信息发送到小车的电机,结合传感器数据进行实时调整,使小车按照预定的路径行驶,实现自主导航。 在项目的实施过程中,需要深入理解ROS框架和相关算法原理,并进行代码开发和调试。同时,还需要对机器人的硬件进行配置和调试,确保传感器和驱动器的正常工作。 通过ROS小车导航期末大作业的实施,不仅能够加深对ROS和机器人导航的理解,还能提高编程能力和项目实施能力,为今后从事相关领域的工作奠定基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值