Jetson AGX Orin+Ubuntu20.04+ROS noetic上安装运行A-LOAM和PUTN

前言:

        Jetson AGX Orin只支持Ubuntu20.04及以上,而Ubuntu20.04对应的ROS版本为ROS noetic,PUTN作者提供的是支持Ubuntu 16.04和Ubuntu 18.04及对应的ROS版本(原文可参考如下链接),因此记录在ROS noetic上安装运行出现的问题。

【PUTN-针对复杂地形的自主导航系统】:快速上手篇

一、 A-LOAM安装

        整体依然按照Github A-LOAM进行安装(注意后续要将PUTN的源码和A-LOAM源码放到同一个工作空间的src目录下,提前安排好A-LOAM的安装位置),但是其中有一些步骤和源码内容需要修改,整理如下:

        (1)按照 Github A-LOAM 安装流程安装ceres时的最后一步不用make install,采用sudo make install。

        (2)在安装完整的ROS时会一并安装好PCL,ROS noetic对应的应该是PCL 1.10版本(查询命令:apt-cache show libpcl-dev),因此需要将A-LOAM源码中的CmakeList.txt的"-std=c++11"修改为"-std=c++14"。

"-std=c++11"
——>
"-std=c++14"

        (3)在安装完整的ROS时会一并安装好OpenCV,ROS noetic自带的是OpenCV4.2.0版本(查询命令:opencv_version),因此需要修改A-LOAM源码中的头文件,同时也需要修改OpenCV读取图片时的API传参,具体修改如下:

1.将A-LOAM/src/scanRegistration.cpp中的头文件
  #include <opencv/cv.h>
    修改为:
  #include <opencv2/opencv.hpp>

2.将A-LOAM/src/kittiHelper.cpp中的第91行和93行的
  CV_LOAD_IMAGE_GRAYCALE
    修改为:
  cv::IMREAD_GRAYSCALE  

        (4) 运行A-LOAM时只有一条绿色的里程计轨迹没有点云信息,需要将A-LOAM/src下的三个文件laserMapping.cpp和scanRegistration.cpp和laserOdometry.cpp中的所有“/camera_init”改为“camera_init”。

二、PUTN安装

        整体依然按照前言中的链接进行安装:

         step1:slam模块的安装。上文已经安装好了A-LOAM。

        step2:依赖项的安装。没什么大的改变,只需注意将melodic换成noetic就行。

        step3:下载源码并编译(注意要将PUTN的源码和A-LOAM源码放到同一个工作空间的src目录下)。也要将melodic换成noetic,同时要注意自己把PUTN源码放到了哪个工作空间下,不要无脑地复制运行。

                        比如说你想把PUTN源码放到了已有的工作空间catkin_ws下,那么第一句  “mkdir……”就不需要,直接cd catkin_ws/src/后git clone源码,再执行其他命令即可。

        报错:catkin_make后会发现有大量的报错,主要有三个方面:

                        a. 关于PCL的报错。原因还是因为c++版本不对,将PUTN源码中的所有"std=c++11"改为"std=c++14"。

                        b. src/putn/src/putn/putn_planning/CMakeLists.txt中未修改和添加依赖。具体内容可以参考这篇文章:https://blog.csdn.net/xiaoguanghaohao/article/details/125860602

                        c. 上面两个问题解决后其实已经可以编译通过了,但运行仿真时仍然会有问题,具体表现为:rviz中一片空白。解决办法可以参考https://github.com/jianzhuozhuTHU/putn/issues/3。简单总结如下:

1.
文件putn/src/scout_simulator/scout_description/urdf/scout_v2.xacro中第十二行的:
    <HDL-32E parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false" lasers="32" max_range="100">
        <origin xyz="0 0 0.3" rpy="0 0 0" />
    </HDL-32E>
修改为:
    <xacro:HDL-32E parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false" lasers="32" max_range="100">
        <origin xyz="0 0 0.3" rpy="0 0 0" />
    </xacro:HDL-32E>
也就是添加了两个"xacro"

2.
文件PUTN/SRC/PUTN/putn_planning/SRC/PUTN_vis.cpp中第52行的:
map_vis.header.frame_id = "/world";
修改为:
map_vis.header.frame_id = "world";
也就是去掉了"/"

        step4: 按照原文章步骤4添加上权限即可。

三、待补充

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
/usr/bin/ld: CMakeFiles/global_planning_node.dir/src/global_planning_node.cpp.o: in function main.cold': global_planning_node.cpp:(.text.unlikely+0x273): undefined reference to tf::TransformListener::~TransformListener()' /usr/bin/ld: CMakeFiles/global_planning_node.dir/src/global_planning_node.cpp.o: in function main': global_planning_node.cpp:(.text.startup+0xc64): undefined reference to tf::Transformer::DEFAULT_CACHE_TIME' /usr/bin/ld: global_planning_node.cpp:(.text.startup+0xc92): undefined reference to tf::TransformListener::TransformListener(ros::Duration, bool)' /usr/bin/ld: global_planning_node.cpp:(.text.startup+0xd7a): undefined reference to tf::Transformer::lookupTransform(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::_cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ros::Time const&, tf::StampedTransform&) const' /usr/bin/ld: global_planning_node.cpp:(.text.startup+0xe74): undefined reference to tf::TransformListener::~TransformListener()' collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/global_planning_node.dir/build.make:246: /home/juan/catkin_ws/devel/.private/putn/lib/putn/global_planning_node] Error 1 make[1]: *** [CMakeFiles/Makefile2:207: CMakeFiles/global_planning_node.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... /usr/bin/ld: CMakeFiles/local_obs_node.dir/src/local_obs.cpp.o: in function rcvVelodyneCallBack(sensor_msgs::PointCloud2<std::allocator<void> > const&)': local_obs.cpp:(.text+0xa0b): undefined reference to tf::Transformer::waitForTransform(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ros::Time const&, ros::Duration const&, ros::Duration const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const' /usr/bin/ld: local_obs.cpp:(.text+0xc74): undefined reference to tf::TransformListener::transformPoint(std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, geometry_msgs::PointStamped<std::allocator<void> > const&, geometry_msgs::PointStamped<std::allocator<void> >&) const' /usr/bin/ld: CMakeFiles/local_obs_node.dir/src/local_obs.cpp.o: in function main.cold': local_obs.cpp:(.text.unlikely+0x37d): undefined reference to tf::TransformListener::~TransformListener()' /usr/bin/ld: CMakeFiles/local_obs_node.dir/src/local_obs.cpp.o: in function main':local_obs.cpp:(.text.startup+0x62a): undefined reference to tf::Transformer::DEFAULT_CACHE_TIME' /usr/bin/ld: local_obs.cpp:(.text.startup+0x64d): undefined reference to tf::TransformListener::TransformListener(ros::Duration, bool)' /usr/bin/ld: local_obs.cpp:(.text.startup+0x6dc): undefined reference to tf::TransformListener::~TransformListener()' collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/local_obs_node.dir/build.make:246: /home/juan/catkin_ws/devel/.private/putn/lib/putn/local_obs_node] Error 1 make[1]: *** [CMakeFiles/Makefile2:612: CMakeFiles/local_obs_node.dir/all] Error 2 make: *** [Makefile:141: all] Error 2解释编译时出现这个问题的原因,并说说如何解决
07-10
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值