我将以下代码用于发布者和订阅者。我可以在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;
}
答案 0 :(得分:0)
您已经提到您已将RViz中的固定帧设置为base_link
,但是在代码中,您将输出消息的frame_id
设置为baselink
(请注意,下划线会丢失) )。您可以双重解决此问题:发布其他具有相同帧ID的输出(即base_link
),或通过以下方式提供从base_link
到baselink
的{{3}}命令行:
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 1.0 base_link baselink 1000
答案 1 :(得分:0)
以下是一些排查问题的步骤...
1.首先通过运行以下命令在命令行上检查输出实际上是否已填充:rostopic echo /output
,请确保该数组实际上已被填充。
2.确保RVIZ中的固定帧与消息frame_id之间的TF树完整。您可以通过添加TF树来检查它:单击添加>按显示类型> rviz> TF。
然后通过展开TF>打开树,然后单击树。
如果有问题,这应该有助于识别它。
3.最后,通过展开状态来检查点云消息的状态。