编译版本终于来了!!!
之前出了这三个:
Apollo规划代码ros移植-Lattcie的二次规划.
Apollo规划代码ros移植-Lattice规划框架.
规划代码ros移植-POMDP预测规划(一).
本人研究生一枚,这里总结了我一年的学习成果,打包成一个可以移植编译的规划工程,工程量大伙看完这一篇就明白。这期间包括了阅读Apollo6.0代码,尝试上百次的核心规划程序移植,遇到上百个bug,加上实车测试很多遍,加上搭建这个Ros平台,然后在这个平台上面,实战自己很多的创新想法等等,经历了这么久,这份含金量十足的工程,我今天开始给大家分享。当然,大家如果需要下载工程代码文件,私信我。效果包括11种了,还不满足吗哈哈。有人想加功能,完全可以在这个平台上施法,什么混合A*啊,什么纯跟踪算法,什么超车,过红绿灯等等。
这份代码适合的人群:
1.想学习这个方向的在校同学
2.刚工作这方面的同事,不知道如何下手
3.公司创业者,外包项目者
4.要毕业要毕业设计,课程设计的同学
大家评论三连刷起来!!!
这份代码有详细的注释,比如:
特别说明:此价格统一,价格合理不高,符合知识付费市场,甚至是亏了。如果下载人数过多,我会统一拉群答疑,大家相互学习,我不是大佬,需要时间去学习东西,所以还是希望你们自行先百度解决,特别是环境配置那里。或许网上有很多其他仿真平台,比如carsim,CARLA等,但是,要用于工程实际车辆的,还是Ros比较合适,而且Ros也比较轻量级
前提:
首先要更新镜像源吧,比如ubuntu20.04的清华源。百度一堆:ubuntu20.04的清华源.
这里,我们要另外添加一个软件源,以安装gcc,g++。我这里讲的是ubuntu20的gcc,g++安装,18的好像没有9和10的版本,记得是7的,不过你们自己安装好这两个编译器就行,可以跳过这里的安装。
sudo gedit /etc/apt/sources.list
增加
deb http://cz.archive.ubuntu.com/ubuntu xenial main
注意这个源是ubuntu20的,18的可能不一样。
执行
sudo apt-get update
其次,要先安装gcc 与 g++:
sudo apt-get install gcc-9 g++-9
sudo apt-get install gcc-10 g++-10
所需的环境:
1.ros
网上教程太多啦,你们可以根据自己的系统安装对应的ros版本。我的是ubuntu20.04,安装的是ros-noetic。建议不要用ubuntu16,用18或者20,也就是melodic和noetic。
2.osqp求解器
运行Automatic_driving/src/planning/installers里面的install_osqp.sh
sudo ./install_osqp.sh
3.依赖库:ADOL-C
运行Automatic_driving/src/planning/installers里面的install_adolc.sh
打开install_adolc.sh文件,先修改如下图所表标红色的路径为自己下载的ADOL-C-2.6.3文件的路径,注意是自己电脑的路径。
然后执行:
sudo ./install_adolc.sh
4.依赖库:coinhsl,ipopt求解器
运行Automatic_driving/src/planning/installers里面的install_ipopt.sh
sudo ./install_ipopt.sh
特别说明:如果出现输入 sudo: ./xxx.sh:找不到命令,则执行
chmod o+x ./xxx.sh
再执行
sudo ./xxx.sh
5.基本依赖包
运行Automatic_driving/src/planning/installers里面的install_apt.sh
sudo ./install_apt.sh
6.安装其他ros包依赖
运行Automatic_driving/src/planning/installers里面的install_ros.sh
sudo ./install_ros.sh
注意,里面有ros-noetic,是针对ros-noetic版本的,melodic版本要改成ros-melodic。
7.xerces-c
sudo apt-get install libxerces-c-dev
8.Qt5
参考:https://blog.csdn.net/Joker__123/article/details/122438138
环境配置可能有遗漏,漏了再补
1.在src/planning/global_routing/launch/global_routing.launch中,里面的路径看你咯,你可以换成你自己的地图osm文件(小扩展,使用JOSM画的),找我画也行,不过要money。
<arg name="lanelet2_map_path" value="src/planning/hdmap/lanelet2_map_1.osm"/>
<!-- <arg name="lanelet2_map_path" value="src/planning/hdmap/lanelet2_map_2.osm"/> -->
2.接着,将src/planning/global_routing/launch/staticTFpub.launch里面的这两个MGRS坐标系下原点坐标值改成对应你的地图文件的MGRS坐标系下原点坐标值。所谓原点坐标值,就是地图文件osm最开头那个node节点里面的坐标值。
注意,有些osm文件没有直接显示MGRS坐标值,那怎么办呢?比如我代码里面的lanelet2_map_1.osm和lanelet2_map_2.osm,里面的架构有点差别:
这是lanelet2_map_2,看不出MGRS坐标系下原点坐标值。
这是lanelet2_map_1,MGRS坐标系下原点坐标值为红圈。
解决办法就是,找坐标转换呀,osm的原点经纬度坐标值肯定可以知道,那么可以通过这个网站,
https://www.earthpoint.us/Convert.aspx, 进行坐标系下的坐标值转换就行了。另外一个办法就是,利用代码,在src/planning/global_routing/src/base_function/hdmap_path_building.cpp里面的这个函数这里,可以打印出来。
更改src/planning/global_routing/launch/staticTFpub.launch里面的这两个MGRS坐标系下原点坐标值,可以得到地图:
照样进行规划算法,自己在车道位置的坐标加障碍物就行。
在工程文件~/Automatic_driving$ 下执行
catkin build
因为缺失依赖而没有成功编译的,可屏蔽相关的包catkin config --blacklist
,取消黑名单catkin config --no-blacklist
需要屏蔽某个模块的package,可以直接放一个名为CATKIN_IGNORE
的文件到所在目录,则该目录下的包就不会被编译
1.报错信息
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):
Unable to find either executable 'empy' or Python module 'em'... try
installing the package 'python3-empy'
注意,因为我安装了conda环境,在base下编译的,所以才可能出现这个问题,解决方法:
pip install empy
2.报错信息
ImportError: "from catkin_pkg.package import parse_package" failed: No module named 'catkin_pkg'
Make sure that you have installed "catkin_pkg", it is up to date and on the PYTHONPATH.
CMake Error at /opt/ros/noetic/share/catkin/cmake/safe_execute_process.cmake:11 (message):
execute_process(/usr/local/anaconda3/bin/python3
"/opt/ros/noetic/share/catkin/cmake/parse_package_xml.py"
"/opt/ros/noetic/share/catkin/cmake/../package.xml"
"/home/cg/Automatic_driving/build/catkin_tools_prebuild/catkin/catkin_generated/version/package.cmake")
returned error code 1
注意,因为我安装了conda环境,在base下编译的,所以才可能出现这个问题,解决方法:
pip install catkin_pkg
3.报错信息
Make Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "sleipnir_msgs"
with any of the following names:
sleipnir_msgsConfig.cmake
sleipnir_msgs-config.cmake
解决方法:先编译sleipnir_msgs
catkin build sleipnir_msgs
4.报错信息
CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by
"lanelet2_extension" with any of the following names:
lanelet2_extensionConfig.cmake
lanelet2_extension-config.cmake
解决方法:不慌,重新编译
catkin build lanelet2_extension
5.报错信息
/usr/bin/ld: /lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ui_console.dir/build.make:150:/home/cg/Automatic_driving/devel/.private/ui_console/lib/ui_console/ui_console] 错误 1
make[1]: *** [CMakeFiles/Makefile2:166:CMakeFiles/ui_console.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
这个错误的原因,还是因为有了conda环境,QT引用的是anaconda里的qt,因为我在ui_console里面用了qt画图,当然,你可以把这个文件夹删除,也可以解决。解决方法:
到anaconda安装文件夹下的anaconda/lib下:
sudo mkdir libuuid_bk
mv libuuid* libuuid_bk/
6.报错信息
Traceback (most recent call last):
File "/opt/ros/noetic/lib/joint_state_publisher/joint_state_publisher", line 35, in <module>
import rospy
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/client.py", line 52, in <module>
import roslib
File "/opt/ros/noetic/lib/python3/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest # noqa: F401
File "/opt/ros/noetic/lib/python3/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ModuleNotFoundError: No module named 'rospkg'
这个错误的原因,还是因为有了conda环境,解决方法:
pip install rospkg
├── Automatic_driving ----> 存放无人车架构模块
├── src ---> 源代码
│ ├── common ----> 公共包
│ ├── messages ----> 自定义消息类型
│ ├── planning ----> 规划模块
│ ├── dynamic_routing ----> 局部规划
│ ├── global_routing ----> 全局规划
│ ├── hdmap ----> 地图文件
│ ├── installers ----> 环境配置安装文件与说明文件
│ ├── planning_vehicle_simulator ----> ui界面(qt编写的)与车辆模型加载
│ ├── routing_msgs ----> 局部规划的自定义消息类型
我是使用vscode进行代码编辑的。
1.在.vscode/c_cpp_properties.json,把路径加载进去,目的是在vscode里面没有红波兰线,虽然编译不会报错。
2.改地图文件
在src/planning/global_routing/launch/global_routing.launch中,里面的路径看你咯,你可以换成你自己的地图osm文件(小扩展,使用JOSM画的)。
<arg name="lanelet2_map_path" value="src/planning/hdmap/lanelet2_map_1.osm"/>
<!-- <arg name="lanelet2_map_path" value="src/planning/hdmap/lanelet2_map_2.osm"/> -->
3.改原点坐标偏移
如上面的章节地图更换说明所写。
第一步:
source ./devel/setup.bash
第二步:
roslaunch global_routing global_routing.launch
说明:src/planning/global_routing/launch/global_routing.launch是最外层的launch,有关参数设置都有注释。
运行时可能来不及加载模拟的障碍物(有延时,可能线程没优化好),重新roslaunch就可以了。
暂无其他,看看到时候购买的小伙伴们的群里大家有没有问题,有我会记录在这里。
1.rviz加载的地图
2.rviz加载的主题
3.仿真车辆和模拟的障碍物显示
4.全局路径切割,即利用Lanelet的特点,进行切割获取,蓝色带为起点到终点的全局路径
5.跑Apollo-Lattice的采样规划,蓝色线为全局路径,也就是参考线啦。红色为局部轨迹,车可以完美绕开障碍物。
6.跑Apollo-Lattice的二次规划,蓝色线为全局路径,也就是参考线啦。红色为局部轨迹,车可以完美绕开障碍物。
7.frenet坐标系的规划,就是分为s-t规划和d-t规划,然后合成进行筛选。代码直观注释。
8.到达终点停止。
9.Apollo参考线平滑算法,有两个平滑方案选择,CosThetaSmoother 和FemPosSmooth,原理自行百度啦,不懂再在交流群交流。效果我不显示地图给你们看会比较清楚
平滑前:表红的地方都是有明显皱折
FemPosSmooth平滑后:超级平滑
10.还有一个很有趣的效果,就是可以倒车到达终点,如果终点在车后脑勺不远的地方,就可以倒车规划哈哈,心动的朋友们赶紧下单支持我啦。
11.stanly控制算法控制车的移动,这个上面图片都是它,当然可以换成纯跟踪算法。
12.Qt画图SL图和ST图
1.将所有坐标值,包括起点,终点,以及车的里程计等等,都换成订阅你们车上定位模块的坐标系下的坐标值。
2.将模拟测试的障碍物信息,换成订阅你们感知模块的信息,记得,我们规划的障碍物需要什么信息,就对接好感知模块那一边,要发布什么信息给你获取。
3.发布轨迹点数据给控制模块跟踪,这个已经写好,可以看代码,了解发布的话题等信息。
1.如果终点定义很远,插值时间会很大,你们可以自行进行分段处理,这里我就不透露我的做法。
2.由于我的实际测试车辆不需要超车,所以ST图我还没用,但是框架代码也写好了。
3.二次规划的前探距离要比较长,轨迹也要长一些,但是我在测试的时候没有设置很长,你们可以自己调参。
各位在校想学习这个方向的同学,刚工作这方面的同事,公司创业者,要毕业要毕业设计,课程设计的同学等,都可以拿来用。由于我也是C++菜鸟,所以代码写得不好请大家见谅。大家评论三连刷起来!!!需要下载工程代码文件,可以先私信我,或者在我的咸鱼号上自行查看下载链接(账号名称:火腿鸡蛋饼里面有没有老婆)。感谢大家的支持,大家一起学习。
重要的事情说三遍!!!!希望你们看到最后:
人多的话会拉群交流!
人多的话会拉群交流!
人多的话会拉群交流!
qq群。
还有:
有些人要加这加那的功能,其实帮你们实现了整个核心框架了,那些超车或者控制换成纯跟踪算法等,你们完全可以自由发挥,需要我的话,可以私信或者进群交流,不过我没那么多时间,就交流交流。最好进入群交流啦,我后面有更新自动驾驶使用的知识也会跟伙伴们分享
还有:
因为是咸鱼交易,你们就放心,但是缺点就是,买完一个我要同时再次上架,所以如果发现没有可以下单,私信我就好。