基于Ardupilot的Rover固件智能车开发¶
基于Ardupilot的Rover固件智能车开发¶
仿真系统软件硬件框架及其系统安装¶
1.1 系统概述¶
下面是这个无人车真开发的软件框架图,要理解这个软件框架图,要会ROS,有Gazebo使用经验,同时对Ardupilot软件框架有所理解,三维的软件仿真是利用了三维引擎(ORGE), 模拟出了无人车上的所有传感器设备,并且发布出了原始数据,交给了sim_vehicle.py这个Ardupilot软件仿真模块,sim_vehicle.py相当于在PC上运行的Ardupilot代码,区别在于单片机运行的Ardupilot代码传感器数据来自于真实的传感器数据, sim_vehicle.py的传感器数据来自于软件仿真生成的。
Ardupilot 无人系统具备完善的功能,从数据链路,到地面站,主控硬件,和丰富可选的硬件设备,激光雷达,RTK等等。开源网站如下:https://ardupilot.org/ 有详细介绍.
他不是一个仅仅只是应用在实验场合,在无人机领域,在小型测量船领域都有大量工业应用案例。相比其他工业设备的价格高,Ardupilot 无人系统成本可控,外设传感器搭配灵活,可以实现不同功能。 目前这套构架体系比较适合于小型物流无人车,在特定园区内部的运行,比如京东的无人物流车,美团的无人物流车,农业撒农药的无人车等等,大型的沙滩车也有一些改装案例,还有一些无人船等等。硬件成本相对价格比较低, 软件框架扩展性比较好,在无人车的状态估计方面代码相对比较完善,视觉传感器设备也做到了一定程度的融合。路径规划方向和ROS接口做的也比较完善,ROS上面一些包可以直接用起来。
同时我们提供了把所有开发环境都安装好的ISO环境,Ardupilot固件编译环境,ROS的系统环境,激光SLAM的代码工具环境等一些必要的工具,省去大家安装环境的问题,有些环境的安装非常麻烦, 很多初学者因为安装环境的繁琐,耗费大量时间。这个ISO环境可以虚拟机安装,可以物理机安装,如果电脑的硬件配置一般的话没有显卡,推荐安装在物理机上,这个ISO镜像也可以安装双系统,但是不推荐安装在虚拟机上。
关于课程:我们在制作这个课程的时候希望可以尽可能的降低研发的难度,包括硬件投入和软件开发的难度。只要有一台硬件配置还不错的电脑,就可以入手开发工作。会一些C/C ++ 语言,Python语言,懂一些ROS就可以 着手与无人车的开发工作。我们想帮助更多的开发着加入到无人系统的开发工作中来,促进行业的发展。
我们先从仿真入手,所有的例程都尽量配合三维仿真。无人系统开发三大方向:机构控制,环境感知,路径规划。这三大部分我们的无人车系统中都会涉及到,也都会有对应的仿真。核心的理念是即便没有真实的无人车硬件设备 也可以入手开发工作。仿真开发和真实无人车的算法开发可以无缝衔接。底层控制,传感器,三维仿真模块相互分离。
1.2 软件构架¶
其中的虚拟引擎技术,广泛用于游戏,可以模拟出一些真是环境的物理参数,比如光照,力学等。逐步用到无人系统开发的领域,目前无人车和无人机领域都大量用到了三维仿真,用于开发,缩短开发时间和提高开发效率。 ROS作为流行的机器人开发平台,同时配合Gazebo仿真环境。Ardupilot也专门提供了在ubuntu环境用运行的模拟控制器sim_vehicle.py。
下面从安装一个仿真系统环境开始介绍:
1.3 硬件要求¶
- 1 硬件配置尽可能高的PC一台,有无显卡均可,CPU最好4核8线程,安装固态硬盘(128G)就够了,内存8G以上(仿真软件比较耗费内存)。目前我们以英特尔的i7-8565U,是一个低压笔记本 CUP 八代i7,X86构架。整体重量也控制在400g左右,可用用来三维仿真,安装开发环境,也可以直接安装在大轴距的无人机或者无人车上。
其他的笔记本,台式机都可以,如果要做复杂的大场景三维仿真,还是建议配置一个具有1080显卡的台式电脑,做三维视觉的仿真回比较好。
- 2 下载我们提供的ISO镜像和烧写工具软件,rufus-3.6这是制作系统U盘的工具。
- 3 一个8GB以上的U盘作为启动盘。
- 4 下载我们的ISO安装镜像。地址如下:
1.4 启动盘制作¶
- 制作系统启动U盘:
- 准备好系统烧写软件rufus-3.6和ISO系统镜像Ubuntu8.04.ISO。按照如下步骤开始烧写
- 打开系统烧写软件rufus,配置如下:

- 点击确定

- 选择以ISO镜像烧录

- 烧录完毕后

1.5 物理机单系统系统安装¶
制作好系统启动盘以后,开始安装这个ISO镜像。和普通的U盘装机类似,设置系统从U盘启动,安装Ubuntu系统。安装双系统目前没有尝试过,我们是在一台电脑上直接安装了这个ISO镜像。如果把BIOS的Fast Boot取消,说不定可以安装成功。





保存并且退出,选择系统安装。

安装系统,设置好系统分区,安装图片所示。

以上的是安装好的系统界面,这个系统预先安装好了ROS,Px4的编译环境,Gazebo等做仿真开发的必备软件,但是因为该ISO系统镜像不能大于4G的限制,我们在制作的时候删除了很多ubunut里面的预装软件, 浏览器等,只保留了必要软件,在使用之前要安装一些软件。
安装好之后,进入系统可以测试下环境,电脑密码是amov,进入终端:”cd ~/project/some/Firmware ” , 进入PX4源码目录输入:” make px4_sitl_default gazebo “。

可以看到如上的界面,说明初步编译通过,并且可以在gazebo看到一架无人机。在当前命令行里面输入”help”,可以看到目前支持的命令。输入:”commander arm”,可以解锁无人机,输入:”commander takeoff ” 无人机就可以初步飞起来。输入:” commander land” 无人机会降落下来。说明这个环境初步搭建完成,比较方便省去了繁琐环境搭建安装。
1.6 物理机双系统安装¶
同样是按照上面制作好的U盘系统盘,下面介绍如何安装双系统,准备一张256G硬盘,先安装好Win10系统,如何安装这里不多做描述,安装好Win10系统以后,在按照下面的步骤安装我们提供的Ubuntu镜像。 最好划分100G左右的硬盘给Ubuntu。
- 准备硬盘分区工具DiskGenius,提前给Ubuntu系统划分好系统分区。
准备了如下的硬盘:

250G的固态硬盘,M.2的硬盘,其他类型的硬盘和主板应该比较通用,这里不做一一尝试。有问题在论坛讨论区留言。
准备DiskGenius这个硬盘分区工具,在课程对应的软件目录里面有。
我们的用软件打开的系统分区如下:

先在原有的win10磁盘中划分了100G的空闲硬盘区给下一步ubuntu实用。

按照如上分区依次划分好EFI区(4GB),SWAP区(8GB),/目录区(EXT4 linux用户数据区)剩下的区。
EFI 分区划分如下:

另外两个分区类似,只不过类型和空间不同。三个分区划分完毕以后,点击保存。硬盘分区成功。关机断电,插上USB系统盘,进入系统安装界面,安装UBUNTU。
- 这个方式试用于大多数电脑,我们本次讲解用的M2接口的固态硬盘。更详细的安装步骤在视频讲解里面。
1.7 基于USB系统盘的直接使用¶
仿真系统软件介绍及其初步使用¶
1.1 软件安装¶
安装好的系统,没有浏览器,在使用之前可以安装好浏览器:”wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb”, 然后安装”sudo dpkg -i google-chrome-stable_current_amd64.deb “。如果下载失败先”sudo apt-get uppdate”,我们提供的百度网盘里面同时提供这些安装工具包。 在home目录下解压gazebo_models.zip。安装好VScode。安装一些常用的软件。一般都是下载deb软件包,然后采用”sudo dpkg -i” 命令安装软件。 系统的环境更新可以按照我们之前给PX4无人机的环境,这个环境里面Gazebo环境是好的,我们在这个环境基础上构建无人车的开发环境和源码。
1.2 代码更新和环境设置¶
提供的代码例子包含控制接口,激光雷达避障等,Mavros节点的无人车应用开发。项目地址为:http://gitea.amovlab.com/PrivateForAmovlab/ArduCar.git 提供的无人机仿真开发历程代码在github上,在使用之前先到远程库里面更新下代码,操作如下:
git clone http://gitea.amovlab.com/PrivateForAmovlab/ArduCar.git
如果下载不成功请到论坛发帖求助或者联系我们。
以下的环境代码配置在我们提供的ISO镜像基上首先确保可以正常安装使用了,在进行如下操作,具体教程请看https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=18 这个无人机仿真教程的免费章节,如果上面链接失效,可以在我们铂贝学院里面找到。我们同时也会在文档资料里面提供。
- 打开~/ArduCar 源码目录,如果自己安装就去上述地址下载源码。
- catkin_make (ROS空间的常用编译命令,如果购买我们的硬件,我们是随机安装调试正常的)
- 编译完成目前的代码
- 拷贝ardupilot源码压缩文件到home目录,具体操作请看tar.gz 文件如何解压
- 把我们提供的.bashrc 文件替换有的.bashrc文件home目录按Ctrl+H ,显示隐藏文件就可以看到设置系统环境的文件.bashrc文件,然后替换掉,确保环境变量统一。
- git clone https://github.com/khancyr/ardupilot_gazebo
- cd ardupilot_gazebo
- mkdir build
- cd build
- cmake ..
- make -j4
- sudo make install
- 在源码里面设置为编译软件仿真 ,在ardupilot目录 ./waf configure –board sitl
- ./waf rover
- 安装MavProxy库:sudo pip2 install -U MavProxy
- 安装pymavlink库:sudo pip2 install -U pymavlink
- 仿真环境搭建可以参考Ardupilot:https://ardupilot.org/dev/docs/using-gazebo-simulator-with-sitl.html
以上的安装因为网络原因不能保证可以正常安装,如果安装失败可以咨询我们,我们提供硬盘直接拷贝的服务,把系统直接拷贝到M2的硬盘中,客户拿到拷贝好的硬盘,插在系统M2的硬盘口上就可以直接进入系统运行 免去系统安装的繁琐,或者直接采购我们的板载计算机也可以直接使用。
硬盘链接如下:
1.4 启动开发环境¶
X86的机载计算机上提供一套完整的开发环境,我们用的ardupilot固件进行无人车的开发,ardupilot提供一套完整的无人车底层控制仿真代码,可以在ROS/Gazebo上运行。在系统用户目录的 ardupilot/Tools/autotest/sim_vehicle.py,这个文件就是启动了在PC中运行的一套无人车底层控制系统,这套控制系统中包含了完整的导航滤波,状态估计,PID控制算法。但是不包含视觉环境感知 和高级路径规划的模块。这些模块在机载电脑ROS里面完成。 - 启动软件仿真模块 在~/ardupilot/Tools/autotest/路径中的sim_vehicle.py启动命令如下:
- ./sim_vehicle.py -v APMrover2
运行一段python的代码,启动Ardupilot固件的无人车仿真程序

在打印消息中已经有了系统信息和初始化完成信息。

这个端口显示一些仿真的消息。
打开已经安装好的QGC地面站可以看到,无人车系统已经可以正常通过Mavlink消息链接。说明仿真的ardupilot无人车系统已经启动成功。

可以像操作真实无人车那样给无人车规划航点,控制无人车的运行,即便没有真实的无人车设备也可以在电脑上操作开发无人车系统。开发完成之后的代码可以切换到真实的设备上,一样效果运行。
1.5 无人车地面站规划模拟航线运行¶
首先安装QGC地面站,在我们提供的工具包里面有。
- sudo usermod -a -G dialout $USER
- sudo apt-get remove modemmanager -y
- sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav -y
- chmod +x ./QGroundControl.AppImage
- ./QGroundControl.AppImage (or double click)

运行成功
1.6 GUIDE模式自动驾驶¶
用python给出了,该小车的位置控制Demo和速度控制Demo,这个pyton接口可以适配大部分路径规划的应用。大部分路径规划算法,最终收敛都是给无人车的执行机构发送期望的速度或者期望的位置。 在仿真中:
- 启动Ardupilot仿真模块 在~/ardupilot/Tools/autotest/路径中的sim_vehicle.py启动命令如下:./sim_vehicle.py -v APMrover2
- 新打开一个终端启动Mavros模块,Gazebo仿真模块:roslaunch simulation rover_apm.launch
- 在Tools文件夹里面打开QGC地面站
- 在~/ArduCarROS/src/simulation/scripts/目录中可以看到给无人车用的两条命令AutoCarapm_location.py和AutoCarapm_vel.py,一个是给无人车发送期望的位置接口,一个是个无人车发送期望的速度接口。
Ardupilot无人车仿真系统ROS与Gazebo基础使用¶
本章主要介绍,整个系统的框架和软件代码。上一章节我们介绍了系统如何使用,有一个初步的认识,仿真系统里面的操作。在上一个章节的基础之上理解这些系统是如何工作的,本章需要的系统知识有: ROS系统基础,C++,Python基础,多进程多线程的一些概念。有了这些概念,才可以理解整套体系是如何运作的,重要的搞清楚代码的模块的启动流程和代码模块之间的输入输出关系。
1.1 系统概述¶
ROS框架最大的好处就是给各个ROS节点(也可以理解为多线程或者多进程),提供了一套标准的输入输出消息格式。通常大型复杂代码工程里面,多线程之间的消息共享和同步是比较复杂和难以设计的,ROS提供了一套通用的标准, 消息流的输入和输出,目前绝大部分的传感器设备厂商也逐步遵守ROS框架,发布了ROS驱动包,这样以来传感器的数据的输入输出就是标准化的了。做应用开发和算法开发的工程师就不需要关注传感器的驱动开发, 同时也有对应的三维仿真的平台,比如Gazebo,可以仿真无人机,无人车,人形机器人,机械臂等,提供了良好的测试开发手段。
1.2 Ardupilot无人车系统传感器介绍和系统消息流¶
惯性导航单元:陀螺仪,磁力计,加速度计。等外加GPS和一些位置传感器构成了无人车的状态估计系统。主要感知车辆航向,位置(全球坐标系和本地位置坐标系),速度(X轴速度和Y轴速度,Z轴旋转角速度),姿态(欧拉角),
IMU指的是惯性测量单元。IMU大多用在需要进行运动控制的设备,如汽车和机器人上。也被用在需要用姿态进行精密位移推算的场合,如潜艇、飞机、导弹和航天器的惯性导航设备等。 惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的,一个IMU包含了三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号, 而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。
在真实环境中ardupilot的系统硬件里面包含的IMU这个惯性导航单元,通过mavlink协议可以读取到,在Rostopic中也可以读取到相关传感器的数据,在仿真环境中Gazebo也提供的相关传感器的数据,只是这些数据不是真实的, 是软件仿真出来的。
GPS/RTK:GPS是在开阔地带提供全球位置坐标的,IMU提供姿态数据,GPS主要提供位置数据,但是GPS受到环境遮挡等因素的影响,有时候需要IMU惯性单元来做补偿。
激光雷达:激光雷达是感知周围环境的,分为2D和3D,因为精度比较高,在无人系统中大量应用。用作地图构建和位置估计解算。
视觉传感器:摄像头的种类很多,主要是有视场角和分辨率的区别。
深度传感器:一般的双目深度传感器,英特尔的realsense的深度传感器用的比较多,但是只是适合用在小型无人系统上面,大型无人车不适合。
1.3 GUDIDE模式自动驾驶例程分析¶
对于上面讲述的状态估计,环境感知,路径规划可以先不用深入了解,最基本的就是可以通过一些接口函数让无人车可以动起来,比如以期望的速度行驶,还有行驶到一个期望的位置点。是自动行驶的基础条件。 任何自动驾驶都可以理解为以期望的速度行驶和行驶到一个期望的位置点。
- 系统接口流程:
ROS系统是支持多种语言编写代码的比如:C语言/C ++语言,Python。我们这里介绍Python的接口,Python发布的期望的速度和位置,如何进入无人车进行执行的。 从python或者C++ 的节点,到MAVROS,到MAVLINK,到PID算法到驱动控制器。
发布期望的位置python脚本:
以一定的频率发送期望的位置,控制系统在GUIDE模式下,就可以行走到期望的位置。
1.4 无人车激光雷达壁障流程分析(VFH算法)¶
;
1.5 自定义Gazebo世界环境¶
;
Ardupilot无人车仿真系统传感器添加与应用¶
本章主要介绍,整个系统的框架和软件代码。上一章节我们介绍了系统如何使用,有一个初步的认识,仿真系统里面的操作。在上一个章节的基础之上理解这些系统是如何工作的,本章需要的系统知识有: ROS系统基础,C++,Python基础,多进程多线程的一些概念。有了这些概念,才可以理解整套体系是如何运作的,重要的搞清楚代码的模块的启动流程和代码模块之间的输入输出关系。
1.1 系统概述¶
ROS框架最大的好处就是给各个ROS节点(也可以理解为多线程或者多进程),提供了一套标准的输入输出消息格式。通常大型复杂代码工程里面,多线程之间的消息共享和同步是比较复杂和难以设计的,ROS提供了一套通用的标准, 消息流的输入和输出,目前绝大部分的传感器设备厂商也逐步遵守ROS框架,发布了ROS驱动包,这样以来传感器的数据的输入输出就是标准化的了。做应用开发和算法开发的工程师就不需要关注传感器的驱动开发, 同时也有对应的三维仿真的平台,比如Gazebo,可以仿真无人机,无人车,人形机器人,机械臂等,提供了良好的测试开发手段。
1.2 二维激光雷达传感器添加¶
;
1.3 激光雷达局部路径规划和全局路径规划¶
;
1.4 视觉摄像头传感器添加¶
;
1.4 目标识别与追踪¶
;
1.5 双目摄像头建图和路径规划¶
;
1.6 无人车系统与地面站自定义数据通讯¶
;
仿真系统与真机切换实践¶
1.1 真机系统框架介绍¶
用户在拿到小车以后,请对照发货清单检查是否齐全,以及硬件是否有破损,如不齐全以及破损,请及时联系客服进行解决。
车体¶
硬件系统主要包含小车车身,电机,车轮,保险杠,电池等硬件,具有以下优点:
①前后均配备有保险杠,有一定的防碰撞能力,能较好地保护车身及其他硬件,减少小车碰撞时的损坏。
②车身大部分硬件采用金属材质,结实耐用。
③车轮采用四轮驱动,动力更加充足,并且后轮采用麦克纳姆轮,转弯更加灵活,并且可以原地旋转。
④小车拥有悬挂系统,能保证小车更加平稳地运行,保证各种传感器数据更加精确,稳定。

飞控板¶
飞控板主要负责控制小车的四个电机,并且搭载有IMU,RTK,GPS等传感器,可以与板载计算机和地面站进行通讯,接收下发的命令,上发一些小车状态数据,传感器数据等,飞控板还负责一些简单的功能应用的逻辑处理。

T265相机¶
英特尔® 实感™ 追踪摄像头 T265 外形小巧,功耗低,它提供现成可用的追踪性能。具有跨平台、开发人员友好的同步定位与建图功能,可满足机器人、无人机和增强现实快速原型制作需求。
详情参数请参考链接:https://www.intelrealsense.com/zh-hans/tracking-camera-t265/

D435I相机¶
英特尔® 实感™ D435i 在立体深度摄像头中放置了一个 IMU。D435i 采用英特尔模块和视觉处理器,是一款能够了解自身运动的深度摄像头。
详情参数请参考链接:https://www.intelrealsense.com/zh-hans/depth-camera-d435i/

激光雷达¶
激光雷达是一种机械设施,是以发射激光束探测目标的位置、速度等特征量的雷达系统。能够完成避障,定位与建图等功能。
详情参数请参考链接:https://www.slamtec.com/cn/Lidar/A2

1.2 ROS软件系统概述¶
ROS系统在前面已有说明,在这里主要说明一下在小车当中搭建的ROS软件系统框架
①模型¶
小车模型它的主要功能是提供小车各个硬件以及传感器之间的位置关系以及外型,物理属性等。对于仿真,模型可配合ros当中提供的控制插件以及gazebo可实现对小车的仿真,对于真机,模型主要是配合robot_state_publisher功能包,发布机器人重要传感器与机器人中心之间的tf关系, 例如激光雷达的数据中心是激光雷达的几何旋转中心,但这个中心位置往往并不是机器人中心,从而导致激光雷达数据会整体偏移,而这偏移量就是机器人中心与激光雷达中心的的距离,而tf恰好能弥补这一段偏移量,从而使激光数据能够正常使用。模型及tf更多内容请参考以下网址:
Note
小车的模型文件位于ArduCar/src/simulation/models/amovCar下

其中amovcar.xacro是小车整体的模型文件,rplidar_s1.xacro是雷达模型文件,d345i是相机模型文件,amovcar_robot.xacro是车身部分,meshs文件夹下存放的是 模型的外型文件。
Note
小车的tf启动文件位于/ArduCar/src/amov_car/launch文件夹下

其中的tf_publisher.launch就是发布tf的launch文件。
②mavros¶
mavros主要功能是连接飞控板与板载计算机,它会将飞控板的一些重要数据上发至板载计算机并以话题的形式发布到ROS当中,板载计算机对小车的控制指令也是 发布到mavros相应的控制指令接口。它是飞控板和板载计算机的重要纽带。
③上层功能应用¶
上层功能应用就属于小车的核心部分了,它主要是控制小车实现某一种具体的功能,例如slam,路径规划,避障等。在ROS当中集成了很多相关的功能包,可以去找寻相关资料 结合小车进行移植,也可以根据自己的需求设计算法,程序等。小车现在已经拥有cartographer_slam,rtabmap,VFH避障,Navigation等功能。
1.3 测试前准备操作¶
在测试之前,我们提供了Mission Planner 和nomachine工具:
下载链接 ,提取码为a0rm
远程登录设置¶
在机载计算机安装Mission Planner和TeamViewer工具,或者nomachion工具,或者SSH工具,可以远程桌面访问的工具很多。如果都是X86构架用TeamViewer最好,如果机载计算机有4G上网卡,那么公网访问也可以。 TeamViewer相关工具已经在文件夹里面。就是在局域网使用TeamViewer要配置下。如果使用ARM处理器的ubuntu系统的机载计算机,建议使用nomachion或者SSH ,SSH纯终端没有可视化界面,但是网络 带宽占用很少,适合在网络条件比较差的环境使用。
1.4 真机检查¶
在使用ArduCar真机前,需要检查ArduCar小车是否能能够正常运行,首先检查硬件设备是否正确连接。
确定相机传感器,激光雷达传感器和飞控板能够正确连接到板载计算机上。


接下来就可以启动ArduCar检查软件部分,但需要注意电量,电量过低将导致一些设备无法正常使用,例如wifi无法正常连接;相机,雷达等传感器无法启动。 确保电量充足的情况下,按下ArduCar电源开关以及板载计算机开机键。


启动之后,可以通过远程连接板载计算机,或者直接将显示器和键盘鼠标接入板载计算机检查软件部分是否正常,首次使用建议接入显示屏鼠标键盘查看ip以及检查软件是否正常。 板载计算机的用户名和密码默认都是amov,用户可根据自身情况自行修改。进入Ubuntu系统后,首先查看wifi连接是否正常,通常情况下会连入与ArduCar编号所对应的wifi。在ArduCar侧面会有标签,上面有对应的编号。

图片中的SN:AMOVP436820024为该ArduCar的编号,对应的wifi名为amov-uav20024,wifi密码为amov20024,根据编号后两位数字的不同,wifi名和密码都会相匹配的变化。 连接上wifi之后,打开终端,输入ifconfig命令查看ip


ArduCar是会开机自动启动关于t265定位的launch文件,所以一开机就应该会有相应的话题,使用rostopic list命令查看是否有相关话题。

再使用rostopic echo /mavros/vision_pose/pose命令查看t265定位数据是否正常刷新

当飞控板与板载计算机没有正常连接时,t265定位的launch文件会启动失败,从而影响板载计算机的启动,板载计算机启动时间会明显增加,并且开机后使用rostopic list会没有话题出现,可以通过使用以下命令检查问题:
$ cd ArduCar
$ ./t265_autoload.sh
通过终端打印的相关错误信息解决该问题。
1.5 小车校准¶
收到小车后,首先检查设备时候齐全完好无损,然后开启遥控器,拿出小车,打开小车电源,等待小车飞控成功启动后。左手拨杆向前,查看小车是否能够正常行驶。若不能前进,则可能是运输过程中传感器受到干扰,需要进行校准。 进行校准,我们需要使用软件工具MissionPlanner,如果暂时还没有安装的,请自行下载安装。
校准方法¶
1.直接拿着车校准,不对小车进行任何拆卸。(小车虽然有点小重,根据亲生经历,这边还是建议抱着车进行校准。)
2.单独拆下飞控和GPS,拿着飞控和GPS单独进行校准。,拆除步骤如下(拆下前可以先拍照记下接口接的位置)
1)先拆掉上层螺丝

2)拍照记录记下线的位置(小车配置不同,线可能会增加或减少

3)需要拔下的线(我以上面照片为例,拔掉线是为了不妨碍,接下来下面拆下安装飞控的碳板。配置不同需要拔掉的线可能会增加或者减少)

4)取下飞控进行校准(取下如图飞控和GPS)

5)将飞控与电脑用USB线连接,打开MissionPlanner,选择端口连上飞控(电脑正常连接飞控后会出现comcom口,选中并点击右边连接即可)

根据提示校准加速度计¶
飞控箭头为正向,即箭头左为左,箭头右为右。在机体上校准比较好(装在机架上时候的水平状态才是真正的水平,这时候校正的水平才是最准确)。
建议:在机架上校正,一定要把飞行器放在很平的地面上进行,保证校正时候的水平状态的精确度。
1.连接地面站(飞控自检完成后)
2.点初始设置-可选硬件-校准加速度计

3.开始校准加速度计,按照MP上的提示,飞控的每个面都会校准,位置放好后千万不要动,以免校准失败,点击完成时点击选型,进行下一个面的校准,最后校准成功会提示加速度计校准成功,否则提示失败(中间过程中若提示加速度没有计算,最后应该都会失败,放好后不要动)
4.校正完后下面有一个水平校正,点击进行,校准过程中不要移动飞控一般不会有问题
罗盘(指南针)校准¶
(全方位旋转小车或飞控。只选择使用第一个指南针,这样校准方便一些。也可以选择前两个,则转动的时间次数可能会多一些。
校准步骤如下:
1.连接飞控。
2.初始设置-必要硬件-罗盘
3.只勾选第一个,(如需提高精度也可添加外置罗盘)准备好后点击开始现场校准

4.进行校准
方法:每个面绕其中心轴旋转360度,校准过程中注意千万不要碰到USB线,以免断开飞控。
5.校准完后,界面会有新的三轴的值,绿色值表示正常。

6.注意事项
(1)在室内会做校正罗盘时候,室内设备会对地磁产生干扰影响罗盘精度,如需提高精度建议在室外做一次。
(2)APM内置的罗盘很容易受到飞控内电子元件干扰,还有电池、接收机等其它的干扰,如果用外置的罗盘的话精度会增加不少。
(3)在飞行器重新布线、升级固件、添加或者换设备时候,建议重新做一次校正罗盘。
遥控器校准¶
1.遥控器通道配置
通道1:roll(横滚)
通道2:pitch(俯仰)
通道3:throttle(油门)
通道4:yaw(偏航)
通道5:飞行模式(辅助通道,具体可见遥控器辅助通道及失控保护)
美国手:左手油门(遥控器系统设置中的摇杆模式为2)
日本手:右手油门
2.开始遥控器校准(以美国手为例)
(1)连接地面站(飞控自检完成后)
(2)卸载螺旋桨,初始设置-可选硬件-遥控器校准

(3)打开遥控器,确认已接上接收机。
(4)来回拨动遥控器的开关,使每个档位分别到达其最大和最小,MP遥控通道上红色线条的显示,让地面站记录其最大行程和最小行程。
(这里要保证油门上推,代表油门的绿色条也向上,roll和Yaw也是,pitch相反,如果不是,可在遥控器的舵机相位中修改正反相)
(5)点击完成,会出现各通道值。
(6)观测遥控器行程,最小值小于1100,最大值大于1900,则遥控器正常。

3.注意事项
1)如果摇动遥控器控制杆时候校正条没反应,需要重新检查:(1)接收机是否已经连接到飞控,接线是否有错。(2)遥控器与接收机是否对好码。
2)如果控制杆的通道与校正条不一致的时候(如摇动油门杆时候Pitch的校正条变化),请设置遥控器的左右手模式。
3)第五通道(辅助通道)用于切换飞行模式,也需要校正第五通道,但每个遥控器设置第五通道用于飞行模式都有差别
1.6ArduCar测试¶
1.6.2 基础版室内测试¶
室外基础版硬件在室内的基础上增加了板载计算机,主要测试内容为
在进行室内版测试时,需要连接到远程工具nomachine以后才可以进行。
- 启动NoMachine等远程连接工具
板载计算机的ip一般情况为192.168.10.100,以之前查看的ip为准,用户名和密码均为amov


- 启动相关脚本测试相关功能
1.6.6 导航¶
使用navigation需要先建立一张地图,先使用前面的建图脚本cartographer_slam.sh在小车运行的环境中建出一张较好的地图,然后打开终端 输入以下命令将地图保存在maps文件中。
$ cd /Arducar/src/sup/path_planning/ros_navigation/maps
$ rosrun map_server map_saver -f map
接下来就可以运行导航的脚本
$ ./apm_navigation.sh
输入该命令即可启动导航功能会弹出终端以及rviz界面,该功能需要激光雷达以及t265传感器,需要在rviz中设置小车起始点以及导航目标点,所以必须要有NoMachine 远程连接到小车的板载计算机。


在rviz中,根据小车的在实际环境中的位姿,使用2D_pose插件在地图上设置小车初始点,鼠标左键点击小车初始位置并长按,移动鼠标将箭头方向指向小车的 正前方,设置不准确可多次调整,直至激光数据与地图数据较为匹配,如图所示
- 2D pose 插件

使激光数据匹配地图,达到如图所示的效果

当初始位姿调整好之后,就可以使用遥控器控制小车以较慢的角速度旋转直至定位粒子收缩得较为密集,如图所示

当机器人定位粒子收敛较好时,便可以通过2D Nav Goal插件给小车发布导航目标点,设置方式与前面的设置小车初始点一致

Note
只有在Mission Planner设置了起始点才能够切换到guide模式,切换为guide模式才可以使ROS的控制命令传递到飞控板
接下来小车便会自动前往目标点,并能够自主避障
- 全局路径

- 本地路径

1.6.7 详细操作指南¶
航点规划¶
首先在Mission Planner中设置小车起始点,在任意一个位置点击鼠标右键,根据如图所示点击Set Ekf Origin Here,出现紫色小车说明位姿设置成功

设置好小车初始点后,点击左上方的飞行计划,进入航点设置界面,将鼠标移动到你想要小车前往的位置,点击鼠标左键即可设置航点。
Note
因在室内进行小车测试,请用鼠标滚轮将界面放到最大,否则航点距离非常远,可在左上角查看航点距离数据。

设置好航点之后点击界面右边的写入航点,再用遥控器将小车切换为Auto模式,小车即可自动前往航点。

视觉三维建图¶
首先进入sh脚本文件夹下
$ cd /ArduCar/src/amovcar/sh

查看一下可运行的脚本
$ ls

$ ./rtabmap.sh
输入该命令即可启动三维建图功能,该功能需要t265传感器和D435i传感器。

建图效果:

VFH避障¶
首先进入sh脚本文件夹下
$ cd /ArduCar/src/amovcar/sh

查看一下可运行的脚本
$ ls

$ ./apm_vfh.sh
输入该命令即可启动vfh避障功能,该功能需要激光雷达传感器。在Mission Planner中规划相应的航点,将遥控器切为guide模式,ArduCar便可自动移动到航点位置并避障,但尽量在较为简单的环境测试该功能,复杂环境中,计算机无法快速处理障碍物信息从而影响避障效果。


二维激光雷达建图¶
首先进入sh脚本文件夹下
$ cd /ArduCar/src/amovcar/sh

查看一下可运行的脚本
$ ls

$ ./cartographer_slam.sh
输入该命令即可启动cartographer建图功能,该功能需要激光雷达传感器。使用rviz可查看地图,使用遥控器控制ArduCar移动,可建立完整的地图。 地图效果根据环境,cartographer算法的参数和激光雷达的不同,效果也是不一样的,建图时尽量使ArduCar以较慢的速度移动,从而保证地图的准确性。


1.7 简单应用例程¶
cartographer融合t265imu数据进行建图¶
首先要对cartographer以及t265做一个简单的了解
在我们小车上已经有了cartographer建图功能,但没有融合imu数据,查阅cartographer官方文档后,获取了融合imu的具体方法。
cartographer会接收名为imu话题中的数据,数据类型为sensor_msgs/Imu



如图所示,在我们的模型当中已经预留了imu_link,名为amovCar/imu_link,所以修改方法为将tracking_frame改为 amovCar/imu_link,将TRAJECTORY_BUILDER_2D.use_imu_data参数设为true,
现在cartographer部分的修改已经结束,回到cartographer_ws工作空间下,编译一下,注意,这里的编译只能用cartographer提供的编译命令进行编译
Note
$ catkin_make_isolated –install –use-ninja
接下来需要查看t265的imu数据,通过查阅t265相关的资料发现,t265发布imu数据格式需要修改一个参数,这个参数的修改位置位于ArduCar/src/amov_car/launch文件夹下的apm_t265_position_to_mavros.launch文件中, 找到uniti_imu_method参数,将参数值改为linear_interpolation或copy,t265的驱动便会向/camera/imu发布消息类型为sensor_msgs/Imu的数据。

但它的frame_id为t265相机的frame_id,因此我们需要将这个数据做一个转换。 我们需要写一个节点,接收/camera/imu话题中的数据,将数据的frame_id改为amovCar/imu_link之后再发布到imu话题中。这里我们采用c++写了一个ros节点,程序内容如下:

现在t265和cartographer都已经配置完毕,还需要配置amovCar/imu_link的物理位置,先说明一下小车的坐标系,小车的空间直角坐标系为右手坐标系,小车前进的方向为X轴,也就是食指指向的方向, 中指指向Y轴方向,也就是小车的左方,大拇指的方向指向Z轴,也就是小车的上方。因为t265的imu数据位置来源于t265相机摆放的位置,根据t265的实际摆放位置就可以确定 imu_link的位置,小车高度为0.2675米,小车中心的高度为0.13375米,搭载t265相机的平板对角线交点就是小车的平面中心,根据这些数据就可以算出imu_link与base_link之间的tf关系, 经过测试,imu的方位角在X轴上旋转了90度,因此还要需要将imu_link旋转90度,在这里是以弧度为单位,所以90度大约为1.57。

配置完毕后,功能就配置好了,接下来就可以尝试启动该功能了。因为t265相机是自启动,所以我们只需要启动imu tf转换的节点和cartographer_slam.sh脚本即可


可以看到/camera/imu话题中的数据传递到/imu_publisher节点中,再发布到/imu话题中,cartographer_node再接收/imu话题中的数据就实现融合imu数据进行建图了。