ROS noetic 解决boost_signals报错问题

项目场景:

博主最近将一个ROS Melodic项目移植到ROS Notic上时,发现在编译时会存在一些报错,特此记录解决方法。

问题描述:

CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake:117 (find_package):
  Could not find a package configuration file provided by "boost_signals"
  (requested version 1.71.0) with any of the following names:

    boost_signalsConfig.cmake
    boost_signals-config.cmake

  Add the installation prefix of "boost_signals" to CMAKE_PREFIX_PATH or set
  "boost_signals_DIR" to a directory containing one of the above files.  If
  "boost_signals" provides a separate development package or SDK, be sure it
  has been installed.

在这里插入图片描述


原因分析:

根据报错显示说明为Boost库存在问题,此处只需要进行安装该库文件并在CMakeLists内制定库文件目录即可。


解决方案:

1.安装库文件

前往该库文件的官网(https://www.boost.org/)点击下载所需版本即可。在这里插入图片描述
此处下载当前(2021.4.4)最新稳定版本(1.75.0),点击 boost_1_75_0.tar.gz 进行下载压缩包。随后将其解压并进入命令行进行源码安装。
在这里插入图片描述
安装运行脚本命令如下,需要使用root权限进行运行。

sudo ./bootstrap.sh

在这里插入图片描述
运行结束如下所示,根据提示命令进行编译。
在这里插入图片描述

sudo ./b2

编译结束将出现如下提示,在进行编译时可以使用参数 -j 7 进行加快编译,其含义为使用7个线程同时进行编译。
在这里插入图片描述

2.修改CMakeList.txt

根据报错提示,找到报错的位置,打开文件进行修改。
在这里插入图片描述
此处将原有语句find package 注释并设置参数 Boost_INCLUDE_DIRS ,该语句的用以为告诉项目Boost库文件所在。

set(Boost_INCLUDE_DIRS /usr/include/boost)

在这里插入图片描述

ROS Noetic中,`sensor_msgs`软件包中提供了一个名为`transformPointCloud()`的函数,可以将`sensor_msgs/PointCloud2`消息从一个坐标系转换到另一个坐标系。该函数的语法如下: ```python transformPointCloud(target_frame, cloud_in, cloud_out, listener) ``` 其中,`target_frame`是要转换到的目标坐标系的名称,`cloud_in`是输入的`sensor_msgs/PointCloud2`消息,`cloud_out`是输出的转换后的`sensor_msgs/PointCloud2`消息,`listener`是一个`tf.TransformListener`对象,用于获取两个坐标系之间的转换关系。 以下是一个例子,演示如何在ROS Noetic中使用`transformPointCloud()`函数将一个`sensor_msgs/PointCloud2`消息从`camera_link`坐标系转换到`base_link`坐标系: ```python import rospy import tf from sensor_msgs.msg import PointCloud2 from sensor_msgs import point_cloud2 from tf2_sensor_msgs.tf2_sensor_msgs import do_transform_cloud rospy.init_node('transform_point_cloud') listener = tf.TransformListener() cloud_in = rospy.wait_for_message('/camera/depth/color/points', PointCloud2) cloud_out = PointCloud2() transformPointCloud("base_link", cloud_in, cloud_out, listener) # Process the transformed point cloud as desired for p in point_cloud2.read_points(cloud_out, field_names=("x", "y", "z"), skip_nans=True): # Do something with the point cloud data ``` 请注意,`transformPointCloud()`函数的输入和输出都是`sensor_msgs/PointCloud2`消息,因此您需要使用`sensor_msgs.point_cloud2`模块中的函数来读取和处理点云数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值