在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
参考如下评论:内容一 && 内容二
-
系统默认的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
-
设置默认编译器版本
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
-
通过如下指令选择使用哪个版本
sudo update-alternatives --config gcc sudo update-alternatives --config g++
-
根据系统提示选择具体版本,输入对应序号
-
验证设置是否成功
gcc --version
-
安装 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
-
注意:直接使用
sudo apt install libtbb-dev
会安装2017版本,并不适用于我们的代码,安装完最新版本的tbb之后,建议编辑/etc/apt/sources.list
并删除或注释掉上面添加的软件仓库,然后执行sudo apt upgrade
,否则可能会报错。 -
验证 TBB 版本,大于2018版本即可
dpkg -s libtbb-dev | grep Version
-
安装 Catkin Tools
sudo apt install python3-catkin-tools python3-osrf-pycommon
-
创建并初始化工作空间
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
-
克隆UFOMap
cd ~/catkin_ws/src git clone https://github.com/UnknownFreeOccupied/ufomap.git
-
编译并 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
小结
上述内容均来自官方提供的安装教程及相关社区评论,同时包括自己编译的时候遇到的几个错误,如有其他问题欢迎在评论区交流,谢谢!!