当前位置: 首页 > news >正文

在Ubuntu 18.04 和 ROS Melodic 上编译 UFOMap

文章目录

  • 一、ROS Noetic && Ubuntu 20.04
  • 二、ROS Melodic && Ubuntu 18.04
  • 三、报错及解决
    • 问题一:未指定安装路径
    • 解决方法:在 CMakeLists.txt 中添加如下指令
    • 问题二:Qt 版本低于 5.10,QLocale::formattedDataSize()是 Qt 5.10+ 引入的新函数,版本低会会导致编译失败。
    • 解决方法:修改 ufomap_ros/ufomap_rviz_plugins/src/ufomap_display.cpp 源码
    • 问题三:缺少 tf2_sensor_msgs 包
    • 解决方法:安装 ros-melodic-tf2-sensor-msgs
  • 小结

一、ROS Noetic && Ubuntu 20.04

官方大部分开发和测试是在 Ubuntu 20.04 和 ROS Noetic 上完成的,可以参考官方的安装教程执行,后续如果在同平台测试会更新相关的内容。

参考如下内容:Github地址 && 设置

二、ROS Melodic && Ubuntu 18.04

参考如下评论:内容一 && 内容二

  1. 系统默认的c++编译器的版本7较旧,推荐安装GNU C++10 编译器

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt install gcc-10 g++-10
    
  2. 设置默认编译器版本

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100
    
  3. 通过如下指令选择使用哪个版本

    sudo update-alternatives --config gcc
    sudo update-alternatives --config g++
    
  4. 根据系统提示选择具体版本,输入对应序号

    版本选择

  5. 验证设置是否成功

    gcc --version
    

    验证结果

  6. 安装 TBB 2018+

    echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a  /etc/apt/sources.list
    # or
    echo "deb http://cz.archive.ubuntu.com/ubuntu eoan main universe" | sudo tee -a  /etc/apt/sources.list
    sudo apt update
    sudo apt install libtbb-dev
    
  7. 注意:直接使用sudo apt install libtbb-dev会安装2017版本,并不适用于我们的代码,安装完最新版本的tbb之后,建议编辑/etc/apt/sources.list并删除或注释掉上面添加的软件仓库,然后执行sudo apt upgrade,否则可能会报错。

  8. 验证 TBB 版本,大于2018版本即可

    dpkg -s libtbb-dev | grep Version
    

    版本验证

  9. 安装 Catkin Tools

    sudo apt install python3-catkin-tools python3-osrf-pycommon
    
  10. 创建并初始化工作空间

    mkdir -p ~/catkin_ws/src  # 创建工作空间
    cd ~/catkin_ws
    catkin init  # 初始化工作空间
    catkin config --extend /opt/ros/melodic  # 换成自己的ros版本
    catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release # To enable release mode compiler optimzations
    
  11. 克隆UFOMap

    cd ~/catkin_ws/src
    git clone https://github.com/UnknownFreeOccupied/ufomap.git
    
  12. 编译并 source

    rosdep install --from-paths . --ignore-src -r -y
    # Build your workspace
    catkin build
    # Source your workspace
    source ../devel/setup.bash
    

三、报错及解决

问题一:未指定安装路径

Errors     << ufomap:cmake /home/user/voxelMap/logs/ufomap/build.cmake.000.log                                                                                    
CMake Error at /home/user/voxelMap/src/ufomap/ufomap/CMakeLists.txt:150 (install):install TARGETS given no LIBRARY DESTINATION for shared library target"Map".

解决方法:在 CMakeLists.txt 中添加如下指令

set(CMAKE_INSTALL_LIBDIR ${PROJECT_SOURCE_DIR}/lib)

问题二:Qt 版本低于 5.10,QLocale::formattedDataSize()是 Qt 5.10+ 引入的新函数,版本低会会导致编译失败。

/home/user/voxelMap/src/ufomap/ufomap_ros/ufomap_rviz_plugins/src/ufomap_display.cpp: In member function ‘void ufomap_ros::rviz_plugins::UFOMapDisplay::updateInfo(double, size_t, size_t, size_t)’:
/home/user/voxelMap/src/ufomap/ufomap_ros/ufomap_rviz_plugins/src/ufomap_display.cpp:586:35: error: ‘class QLocale’ has no member named ‘formattedDataSize’586 |  size_property_->setString(locale.formattedDataSize(size));
  • 查看当前 Qt 版本

    qmake -v
    
  • 如果有,显示版本信息

    QMake version 3.1
    Using Qt version 5.9.5 in /usr/lib/x86_64-linux-gnu
    
  • 如果没有则有如下显示,但也可能是命令找不到

    qmake: could not find a Qt installation of ''
    
  • 安装 Qt 5 的开发工具之后再查询

    sudo apt update
    sudo apt install qt5-qmake qtbase5-dev
    qmake -v
    
  • 如果还有相同的提示,可能是 Qt 安装路径没有加入系统 PATH,手动查找

    find / -name qmake 2>/dev/null
    
  • 有类似于如下的输出内容

    /usr/bin/qmake
    /usr/lib/x86_64-linux-gnu/qt5/bin/qmake
    /usr/lib/qt5/bin/qmake
    
  • 临时查询

    /usr/lib/x86_64-linux-gnu/qt5/bin/qmake -v
    
  • 将环境变量加入.bashrc中长期可用

    export PATH=/usr/lib/x86_64-linux-gnu/qt5/bin:$PATH
    
  • ubuntu18的默认 Qt 版本是5.9,一般不推荐直接修改这个版本,这里推荐直接修改源文件代码

解决方法:修改 ufomap_ros/ufomap_rviz_plugins/src/ufomap_display.cpp 源码

#include <QString> 头文件# 手动实现
QString formatDataSize(qint64 bytes) 
{const QStringList units = {"B", "KB", "MB", "GB", "TB"};double size = static_cast<double>(bytes);int unitIndex = 0;while (size >= 1024.0 && unitIndex < units.size() - 1) {size /= 1024.0;++unitIndex;}return QString::number(size, 'f', 2) + " " + units[unitIndex];
}# 替换
// size_property_->setString(locale.formattedDataSize(size));
size_property_->setString(formatDataSize(size));

解决方法

问题三:缺少 tf2_sensor_msgs 包

CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by "tf2_sensor_msgs"with any of the following names:tf2_sensor_msgsConfig.cmaketf2_sensor_msgs-config.cmake
  • 查询 ros 包 tf2_sensor_msgs
    rospack find tf2_sensor_msgs
    
  • 如果报错(rospack: error: package 'tf2_sensor_msgs' not found),说明包未安装

解决方法:安装 ros-melodic-tf2-sensor-msgs

sudo apt-get install ros-melodic-tf2-sensor-msgs

小结

上述内容均来自官方提供的安装教程及相关社区评论,同时包括自己编译的时候遇到的几个错误,如有其他问题欢迎在评论区交流,谢谢!!

相关文章:

  • 进入救援模式(物理服务器)
  • LeetCode238_除自身以外数组的乘积
  • untiy 实现点击按钮切换天空盒子
  • 手动实现legend 与 echarts图交互 通过js事件实现图标某项的高亮 显示与隐藏
  • Vivado22 Vcs18仿真联调原语缺失
  • DNS实验
  • STM32F407使用ESP8266实现阿里云OTA(中)
  • Python学习之路(五)-接口API
  • Java Thread类深度解析:构造方法与核心方法全攻略
  • 运算符重载 (Operator Overloading)
  • RPCRT4!NDRSContextUnmarshall2函数分析
  • IEEE综述 | 车道拓扑推理20年演进:从程序化建模到车载传感器
  • 什么是CMMI认证?CMMI评估内容?CMMI认证能带来哪些好处?
  • 通过4种方法来重置UOS操作系统中的用户密码
  • 4.3 工具调用与外部系统集成:API调用、MCP(模型上下文协议)、A2A、数据库查询与信息检索的实现
  • 简易学生成绩管理系统(C语言)
  • 动手试一试 Spring Security入门
  • 服务器上安装node
  • Ubuntu服务器上如何监控Oracle数据库
  • JCP官方定义的Java技术体系组成部分详解
  • 海关总署牵头部署开展跨境贸易便利化专项行动
  • 最高法:“盗链”属于信息网络传播行为,构成侵犯著作权罪
  • 临汾攻坚PM2.5:一座曾经“爆表”城市的空气治理探索
  • 920余名在缅甸当阳等地实施跨境电信网络诈骗的中国籍犯罪嫌疑人被移交我方
  • 外卖江湖战火重燃,骑手、商家、消费者在“摇摆”什么?
  • 王励勤谈国乒备战洛杉矶奥运会:要对六块金牌制定新的战略