EGO-PLANNER安装问题记录以及如何在Ubuntu22.04LTS上安装ROS noetic_ubuntu20.04运行egoplanner-程序员宅基地

技术标签: ubuntu  运维  linux  

一、Ubuntu系统版本及ROS版本

笔者误操作升级系统版本到了Ubuntu22.04LTS,在这个版本中系统不支持ROS1的安装,笔者尝试用ROS2运行ego-planner,并未运行成功,从原理上讲,ROS2应该是可以运行ego-planner的,但是至少笔者没有找到正确的方法,而且由于ROS2使用的是colcon构建,与ROS的catkin构建并不相同,因此指令也大相径庭,按照教程使用颇为不变。

因此,倘若读者有升级Ubuntu系统的想法,笔者劝你看到本文之后尽快收手,在其他适配跟上之前不要盲目升级。如果你已经升级了,请看这里。

Ubuntu 22.04源码编译安装ROS Noetic_源码安装ros_Drknown的博客-程序员宅基地

这篇博文看起来简单,但是实际操作起来笔者踩了很多坑。

在添加源部分,笔者并未遇到问题。

但是在安装编译依赖项时,笔者就遇到问题了

1.安装编译依赖项

sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstools python3-vcstool build-essential
sudo pip3 install -U rosdep rosinstall_generator vcstool
sudo pip3 install --upgrade setuptools

第一句指令可以正常运行,第二句报错

ModuleNotFoundError: No module named 'distutils.cmd'

但是笔者使用指令

# 更新一下源
sudo apt-get update
# 安装 python3-distutils
sudo apt-get install python3-distutils

发现python3-distutils已经正常安装,就是无法运行。经过测试,自动安装的python3-distutils支持的是Python3.10及以上,但是笔者系统内有Python3.7和3.9,系统默认选择了其他版本的Python,因此可以使用指令

sudo pip3.10 install -U rosdep rosinstall_generator vcstool
sudo pip3.10 install --upgrade setuptools

2.拉取ROS Noetic源码

rosinstall_generator desktop --rosdistro noetic --deps --tar > noetic-desktop.rosinstall
mkdir ./src
vcs import --input noetic-desktop.rosinstall ./src

这里的第一句指令是用于生成一个 ROS 工作区的 .rosinstall 文件,其中包括 ROS Noetic 的桌面完整安装以及所有依赖项。该文件可以用于使用 wstool 下载所有必要的软件包。但是由于网络原因,需要多次尝试才能下载下来,常常因为超时中断,笔者尝试在超时提供的网页链接上直接导出这个文件,但是其实格式不对,笔者直接把下好文件贴出来,这其实就是一个下载目录和下载链接,如果读者网络不好,可以直接取用。

https://download.csdn.net/download/reyssalee/87653433

第三句指令是用于将ROS安装文件(ROS install file)导入到ROS的软件包源代码目录(source code directory)中。具体来说,vcs import命令根据ROS安装文件中指定的各个软件包的信息,从指定的版本控制系统中下载相应的软件包源代码到本地的软件包源代码目录中。在这个命令中,--input参数指定了要导入的ROS安装文件的路径,而./src则是指定了软件包源代码目录的路径。原博主已经指出,如果网络不好,可以在所有的github前面加上k,笔者已经在上传的文档里加好了,这和墙内墙外关系不大,笔者尝试用墙外依旧报错,而用kgithub成功率很高。

但是单凭这个指令仍旧不能保证全部的包下载下来,依旧会有E报错,笔者是在后续的CMAKE报错中发现的,读者也可以在下载完之后,直接看自己的哪个文件夹是空的。

那么如何把需要下载的包补齐,可以回到noetic-desktop.rosinstall文档内,找到对应的链接,然后手动把这个包下载下来,放到他原本的目录下,这里用kgithub下载好像不太理想,使用github可以正常下载。

全部下载完成后,按照原博主的指令安装即可。

最后,一定要运行这个指令

source ~/ros_catkin_ws/install_isolated/setup.bash

如果不运行这个指令,ros是无法使用的,当然可能运行了这个指令也无法使用,读者可以打开~/.bashrs,确认里面是否添加了,如果没有,那么手动将上面的指令添加到最后一行即可。

二、ego-planner的安装

下载之后放在哪个目录都行,没有要求。

/src里有个CMakeLists.txt的链接,一开始会报错链接失效,这个无视即可,直接按照README.md里的指示运行catkin_make即可,但是笔者这里更推荐使用命令catkin_make -j1,会显示报错信息。

1.‘deque’ does not name a type

这里需要在报错文档的头文件里加上#include <deque>,即可解决

2.error: no match for ‘operator=’ (operand types are ‘Eigen::internal::enable_if<true, Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, double, double> >::type’ {aka ‘Eigen::IndexedView<Eigen::Matrix<double, -1, -1>, double, double>’} and ‘double’) 238 | ) * (i - 2) * j * (j - 1) * (j - 2) * pow(ts, i + j - 5) / (i + j - 5);

这里在/ego-planner-master/src/planner/traj_utils/include/traj_utils/polynomial_traj.h的238行报错,将此处代码修改为

for (double i = 3; i < order; i += 1)
  for (double j = 3; j < order; j += 1)
  {
    mat_jerk.coeffRef(i, j) =
        i * (i - 1) * (i - 2) * j * (j - 1) * (j - 2) * pow(ts, i + j - 5) / (i + j - 5);
  }

3.报错缺少PCL相关文件

这里又回到了前面的ROS配置问题,Releases · ros-perception/perception_pcl · GitHub,在这里下载1.7.4版本,这是支持ROS1的,不要下最新版,最新版支持ROS2,编译会报错。将PCL文件下载到ros_catkin_ws里的src文件夹里,重新编译ROS,这样ROS里有了pcl之后,就可以正常编译ego-planner了。

但是在加入了PCL文件之后,cmake又会报错,这里缺少好几个依赖项,Tags · ros/geometry2 · GitHub,笔者只记得这一个依赖项了,缺少什么就上github上下载即可,上面都有。

后续笔者没有遇到其他错误,make完之后即可正常运行ego-planner。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/reyssalee/article/details/129969060

智能推荐

if循环中悬空else问题-程序员宅基地

文章浏览阅读373次,点赞5次,收藏6次。之前学习Java时并没有注意到这个小细节的问题,不过最近新学C语言的过程中,突然发现居然还有一个这么小的语法细节知识,这也侧面展现了代码规范的重要性。

解决jaspersoft+ireport导出pdf空白_jasperfillmanager生产空白的pdf-程序员宅基地

文章浏览阅读2.7k次。使用ireport导出dpf显示空白解决步骤:1.【工具】-【选项】-【classpath】中添加iTextAsian.jar这个jar包不用自己下载,ireport自带的有,位置在D:\iReport-5.6.0\ireport\modules\ext下2.在报表工具【属性】-【text properties】中设置以下属性PDF font name: STSong-LightPDF Encoding: UniGB-UCS2-H(Chinese Siplified)PDF Em_jasperfillmanager生产空白的pdf

el-tooltip宽度超过父容器的宽度,导致提示框不跟随文字内容_react antd tooltip内容过多时,超出容器大小-程序员宅基地

文章浏览阅读206次。实现方式为: 给 tooltip一个display属性,除inline以外的任意值。_react antd tooltip内容过多时,超出容器大小

java es 搜索_使用elasticsearch从多个列表中搜索-程序员宅基地

文章浏览阅读1.3k次。我们有以下设置(简化/更改):MongoDB集合: ArticlesRedis列表: Today Yesterday This Week This Month我们经常收到新文章,并将它们放入适当的列表中(新文章进入'今天''本周'和'本月'[redis列表包含mongodb集合的id]) .这些列表可以包含很多项目(“本月”达到数百万) . 这些列表经常更改,文章消失并重新出现(业务逻辑) .这些..._elasticsearch search value in list

反激开关电源变压器设计实例讲解(定明芳)_反激变压器设计实例-程序员宅基地

文章浏览阅读2.8w次,点赞55次,收藏543次。内容来自《反激变压器的设计》(定明芳主讲)。定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。1.确定电源规格2.确定工作频率和最大占空比3.计算匝比(利用伏秒平衡原则)此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。4.计算初级线圈峰值电流基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip_反激变压器设计实例

java奇偶排序算法_奇偶排序-程序员宅基地

文章浏览阅读871次。在《java高并发程序设计》一书中看到关于一种并行算法排序方法:奇偶排序。结合书上与网上的各项资料,在这里按自己的理解做下梳理。介绍冒泡排序:是串行算法,在每次迭代过程中,对于每个元素可能与前面元素交换,也可能和后面的元素交换,数据的相关性比较强很难直接改成并行算法。奇偶排序:或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序..._奇偶排序算法的java

随便推点

html5图片无限循环播放,原生js实现无限循环轮播图效果-程序员宅基地

文章浏览阅读3.6k次。知识要点1.实现无限循环的原理:以偏移的距离来判断是否跳回第一张和最后一张也可以利用循环判断图片的当前索引值var newLeft=parseInt(list.style.left)+offset;//当前的偏移量+下一次的偏移量=新的偏移量list.style.left=newLeft+"px";//当前的偏移值=新的偏移值//以偏移的距离来判断是否跳回第一张和最后一张if(newLeft>..._html5图片循环滚动

win10更新KB5034441版本,报错0x80070643_kb5034441更新失败-程序员宅基地

文章浏览阅读567次,点赞23次,收藏20次。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。,一般来说恢复分区的前一个分区是系统分区,也即。我这里有星号(*),是GPT类型的。

高可用与负载均衡入门与实战(五)——配置nginx反向代理和负载均衡_5)配置容器nginx1的web服务,编辑首页内容为“nginx1”,在宿主机访问-程序员宅基地

文章浏览阅读758次。任务一、配置nginx反向代理,使用nginx1、APP1、APP2三个容器步骤1:使用php-apache镜像启动APP1和APP2两个容器1)创建docker网络docker network create --subnet=172.18.0.0/16 cluster2)查看宿主机上的docker网络类型种类docker network ls3)启动容器APP1,设定地址为17..._5)配置容器nginx1的web服务,编辑首页内容为“nginx1”,在宿主机访问

线程池参数——workQueue用法_线程池参数workqueue-程序员宅基地

文章浏览阅读1.5k次。线程池参数的 workQueue 决定了缓存任务的排队策略,对于不同的业务场景,我们可以使用不同的排队策略。我们只需要实现BlockingQueue 这个接口即可。介绍一下常用的有三种workQueue1. SynchronousQueue(阻塞队列)SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者(即丢给空闲的线程去执行),必须等队列中的添加元素被消费后才能继续添加新的元素,否则会走拒绝策略,所以使用SynchronousQueu_线程池参数workqueue

Golang Gin 路由组 RouterGroup 路由分类处理请求_go gin 路由分组-程序员宅基地

文章浏览阅读1.1k次。在前面已经学习了gin框架如何处理请求,解析请求,返回数据。在实际的项目当中,项目往往是以模块化来进行划分和开发的,所谓的模块化就是按照功能来划分,比如会有产品模块,会有用户模块,会将用户相关的进行统一的开发,放到用户模块当中,和产品相关的放在产品相关的模块当中,这样即方便开发者进行统一的开发也方便在系统的维护过程当中方便维护。_go gin 路由分组

python爬虫云南昆明二手房数据可视化大屏全屏系统设计与实现(django框架)-程序员宅基地

文章浏览阅读2.2k次,点赞10次,收藏7次。python爬虫云南昆明二手房数据可视化大屏全屏系统设计与实现(django框架),Python和Django作为成熟的开发语言和框架,拥有广泛的开发者社区和丰富的资源支持,能够满足本研究的开发需求。其次,随着房地产市场的不断发展,相关企业和决策者对于数据可视化的需求日益增强,因此本研究具有较高的经济价值和社会价值。然而,现有研究多集中在宏观层面的数据分析,针对特定地区(如云南昆明)的二手房市场数据可视化研究相对较少。项目的界面和功能都可以定制,包安装运行!

推荐文章

热门文章

相关标签