我对发布者和订阅者使用下面的代码。我可以在Rviz上可视化输入节点的PointCloud,但无法可视化输出节点。因为我是ROS的新手。我该如何解决这个问题呢?我甚至在Rviz中设置了固定的框架: base_link。
ros::Subscriber subPointCloud;
ros::Publisher pubPointCloud;
void DEM(const sensor_msgs::PointCloud2ConstPtr& input)
{
ROS_DEBUG("Point Cloud Received");
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
sensor_msgs::PointCloud2 output;
// Convert from ROS message to PCL point cloud
pcl::fromROSMsg(*input, *cloud);
pcl::toROSMsg(*cloud, output);
output.header.stamp = ros::Time::now();
output.header.frame_id = "/baselink";
pubPointCloud.publish(output);
}
int main(int argc, char** argv)
{
ROS_INFO("Starting LIDAR Node");
ros::init(argc, argv, "kitti_lidar_node");
ros::NodeHandle nh;
subPointCloud = nh.subscribe<sensor_msgs::PointCloud2>("input", 1, DEM);
pubPointCloud = nh.advertise<pcl::PointCloud<pcl::PointXYZ> > ("output", 1);
ros::spin();
return 0;
}
发布于 2019-03-01 19:33:35
您已经提到在RViz中将固定帧设置为base_link
,但在代码中将输出消息的frame_id
设置为baselink
(请注意缺少下划线)。你可以通过两种方式解决这个问题:要么发布具有相同帧id的其他输出(即base_link
),要么通过命令行提供从base_link
到baselink
的transformation:
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 1.0 base_link baselink 1000
发布于 2019-03-03 22:23:28
以下是故障排除的一些步骤...
rostopic echo /output
,确保数组实际上正在被RVIZ填充确保RVIZ中固定帧和消息frame_id之间的TF树是完整的。您可以通过添加TF树来检查它:单击add > by Display types > rviz > TF。然后通过展开TF >打开树,然后单击tree。
如果有问题,这应该有助于识别它。
https://stackoverflow.com/questions/54940002
复制相似问题