How to use FilterChain without data copy?
I am using a filters::FilterChain<sensor_msgs::LaserScan>
to filter lidar data. I made two custom filters. My lidar callback looks like this:
void lidarCB(const sensor_msgs::LaserScanPtr& msg)
{
// no copy
sensor_msgs::LaserScan& scan = *msg;
filterChain_->update(scan, scan);
lidarPub_.publish(scan);
}
In my custom filters, I only operate on the second argument of the update()
function because input and output should be exactly the same. What I'm finding is that this does not work as soon as more than one filter is added. And in fact, the two arguments provided to my custom filters' update()
functions are not the same object when comparing using std::addressof
.
bool update(const sensor_msgs::LaserScan& input, sensor_msgs::LaserScan& filtered)
{
if (std::addressof(input) != std::addressof(filtered))
{
// error!
}
}
Is there any way to send lidar data through a filter chain using the same object/reference?