嵌入式方向实践 小车实验报告

嵌入式方向实践 小车实验报告

实验任务

背景

主要学习和考核以ROS为主的机器人相关知识、非常符合目前机器人产业界的人才需求,同时其更高的技术门槛,以及更激烈的对抗性。

为保证线上比赛的公平性,智能车室外光电组线上仿真比赛平台统一用「Gazebo」。赛道模型和无人车三维模型统一提供。线上比赛需要先把赛道模型导入Gazebo,采用ROS中建地图的方式构建赛道地图,通过自主导航算法实现无人车完成从起到到终点的运动。仿真平台的传感器可以使用IMU,激光雷达或摄像头,仿真平台自主导航算法不限。

赛道模型不允许修改。赛道示意图如下

image-20241215154416407

统一使用提供的仿真车模型。仿真车模型的示意图如下:

image-20241215154424244

仿真车模型自带传感器如下:

​ IMU ;激光雷达; 深度摄像头

仿真车模型如下方面禁止修改:

​ 尺寸大小;自带传感器参数;无人车质量;无人车中各部位的转动惯量矩阵;碰撞系数

关于碰撞,线上仿真比赛赛道中会有锥桶等障碍物,车模运行时要避开障碍物,否则会有相应处罚,障碍物位置是随机的,会在赛前公布。赛道中的锥桶采用的是Gazebo models中的标准锥桶模型。

比赛时,仿真车根据提供的统一地图自主导航,避开障碍物,从赛道起点跑到终点,记录比赛完成时间,作为线上仿真比赛的成绩。

比赛违规说明

1、车模碰触到锥桶,加罚5s

2、车模碰触到赛道围栏,加罚5s

3、车模碰触到锥桶或赛道围栏后停止运行,计比赛失败

4、车模在赛道中停止运行,计比赛失败

5、为了考查参赛队员在传感器数据融合方面的能力,在Gazebo仿真比赛中,禁止使用Gazebo直接发布无人车的精准位置消息(odometry)。

https://blog.csdn.net/Lovely_him/article/details/107948765

综合实践说明

采用ROS中建地图的方式构建赛道地图,通过自主导航算法实现无人车完成从起点到终点的运动。仿真平台的传感器可以使用IMU,激光雷达或摄像头,仿真平台自主导航算法不限。

统一提供已经构建好的竞赛地图和车模。车模参数和地图参数不得私自修改。车模根据构建好的地图自主导航,避开锥桶障碍物,从赛道起点跑到终点,记录完成时间,根据完成时间进行成绩排名。

实验报告

一 创建虚拟机

  1. 使用Orcale VM VirtualBox创建一个新的虚拟机,基本配置如下:

    image-20231223005528730

​ 2. 虚拟机系统为ubuntu-18.04.06

二 安装ROS-melodic

​ 以下内容参考了:

​ ros-racecar.pdf

melodic/Installation/Ubuntu - ROS Wiki

Ubuntu18.04安装ROS Melodic(详细,亲测安装完成,有清晰的截图步骤)_ubuntu 18 ros melodic-CSDN博客

ROS Melodic 安装必成功流程+避坑指南(超详细)-CSDN博客

  1. 更换源服务器为南京大学镜像,在“软件和更新”中可以找到:

    image-20231222174905401

  2. 输入以下指令,将ROS软件仓库的信息添加到Ubuntu系统的APT源列表中:

    1
    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' 
  3. 添加两个密钥(来自ros-racecar.pdf):

    1
    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
    1
    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key F42ED6FBAB17C654

    结果遇到了报错(可能是公钥服务器的问题,也可能是密钥有问题):

    image-20231222175853498

    上网查询后,改为使用以下命令:

    1
    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    成功,显示如下:

    image-20231222180151569

  4. 更新软件列表

    1
    sudo apt-get update
  5. 安装ros-melodic桌面完整版, 包含 ROS、rqt、rviz、机器人通用库、2D/3D 模拟器、导航以及 2D/3D 感知包:

    1
    sudo apt install ros-melodic-desktop-full
  6. 添加环境变量

    1
    2
    echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
  7. 安装依赖

    1
    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
  8. 初始化rosdep

    1
    sudo rosdep init

    看到以下内容说明成功:

    image-20231222182045717

    然后输入:

    1
    rosdep update

    结果报错了:

    image-20231222182303433

    大概是网络问题,多次执行rosdep update命令可能可以解决(本人执行了快二十遍才成功)。

    像下面这样说明成功了:

    image-20231222193402720

  9. 测试:

    1
    roscore

    结果是以下内容,想执行install python-roslaunch也失败:

    image-20231222193729221

​ 参考ROS安装问题: “Command ‘roscore‘ not found, but can be installed with: sudo apt install python-roslaunch“-CSDN博客解决了,但是这个解决办法总感觉有点奇怪。

三 运行racecar

  1. 使用虚拟文件夹将准备好的代码放进虚拟机里,并移动至/~目录下。

  2. 初始化工作空间,给的代码好像是ros kinetic版本的,因此先将src/CMakeLists.txt中的kinetic改成melodic。

    1
    2
    cd ~/racecar_ws/src
    catkin_init_workspace

    然后它显示 File “/home/jinqq/racecar_ws/src/CMakeLists.txt” already exists,这个指令就跳过了。

  3. 编译源代码,先回到racecar_ws中

    1
    catkin_make

    结果遇到以下问题:

    image-20231222203853820

    执行权限的问题,输入以下添加权限:

    1
    sudo chmod -R a+rwx * 

    结果又报错:

    image-20231222233216409

    好像是符号格式的问题,太麻烦了,直接把CMakeLists里指向的/opt/ros/melodic/share/catkin/cmake/toplevel.cmake复制进CMakeLists算了…也就是把CMakeLists里的内容变为toplevel.cmake的内容。

    重新执行catkin_make后,会发现报错找不到包,例如:

    image-20231223002340928

    这是缺少包导致的,首先输入以下命令安装这些包(来自ros-racecar.pdf):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sudo apt-get install ros-melodic-driver-base
    sudo apt-get install ros-melodic-ackermann-msgs
    sudo apt-get install ros-melodic-controller-manager
    sudo apt-get install ros-melodic-gazebo-ros-control
    sudo apt-get install ros-melodic-effort-controllers
    sudo apt-get install ros-melodic-joint-state-controller
    sudo apt-get install ros-melodic-rtabmap-ros
    sudo apt-get install ros-melodic-move-base
    sudo apt-get install ros-melodic-map-server
    sudo apt-get install ros-melodic-teb-local-planner
    sudo apt-get install ros-melodic-global-planner

    再次尝试catkin_make后,发现还报错找不到OpenCV这个包,处理方法比较特殊,参考了OpenCV找不到config.cmake(简单直接的解决方法):Could not find a package configuration file provided by “OpenCV“_opencvconfig.cmake-CSDN博客,如下:

    首先进入根目录中,然后搜索opencvconfig,如下:image-20231223002917135

    找到位置后,再看报错的是哪个CMakeLists,发现是racecar_ws/src/racecar_gazebo下的CMakeLists.txt ,打开该文件,在find_package(….)前面加入(或修改)set(OpenCV_DIR xxx) ,其中xxx为搜索找到的位置,例如改成下面这样:

    image-20231223003433085

    这时候再catkin_make,应该成功了。

  4. 添加环境变量:

    1
    2
    3
    echo "source ~/racecar_ws/devel/setup.bash" >> ~/.bashrc

    source ~/.bashrc
  5. 打开一个新的终端,启动ros环境:

    1
    roscore
  6. 再打开一个新的终端,启动gazebo地图:

    1
    2
    cd ~/racecar_ws/
    roslaunch racecar_gazebo racecar_runway_navigation.launch

    gazebo 启动可能需要一小会,此时不要进行其他操作,不然 gazebo 容易崩溃。

    启动成功后会如下显示:(给我卡闷了)

    image-20231223004524476

  7. 再打开一个新的终端,启动rviz

    1
    2
    cd ~/racecar_ws/
    roslaunch racecar_gazebo racecar_rviz.launch

    启动成功后会如下显示:

    image-20231223004947552