以下のコードを使用して、ROSノードからポイントクラウドとマーカー矢印を同時に公開しようとしていました。 rvizで両方を表示しようとすると、私はそれらを両方見ることができません。同時にマーカーとポイントクラウドを公開する
#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <visualization_msgs/Marker.h>
ros::Publisher pub;
ros::Publisher arrow_pub;
void
cloud_cb (const sensor_msgs::PointCloud2ConstPtr& input)
{
// ** conversion of ros message to pcl
pcl::PointCloud<pcl::PointXYZRGB> output;
pcl::fromROSMsg(*input,output);
int h = 480;
int w = 640;
pcl::PointXYZRGB p[w][h];
for(int i=0;i<=w;i++)
{
for(int j=0;j<=h;j++)
{
p[i][j] = output.at(i,j);
}
}
visualization_msgs::Marker arrow;
arrow.header.frame_id = "/camera_depth_frame";
arrow.header.stamp = ros::Time::now();
arrow.ns = "example";
arrow.id = 1;
arrow.type = visualization_msgs::Marker::ARROW;
arrow.action = visualization_msgs::Marker::ADD;
arrow.pose.position.x = p[55][55].x;
arrow.pose.position.y = p[55][55].y;
arrow.pose.position.z = p[55][55].z;
arrow.pose.orientation.x = 45;
arrow.pose.orientation.y = 0.0;
arrow.pose.orientation.z = 45;
arrow.pose.orientation.w = 1.0;
arrow.scale.x= 5;
arrow.scale.y= 0.1;
arrow.scale.z = 0.1;
arrow.color.g = 0.0f;
arrow.color.a = 1.0;
arrow.color.r = 0.0f;
arrow.color.b = 1.0f;
arrow.lifetime = ros::Duration();
// ** conversion of pcl messag to ros
sensor_msgs::PointCloud2 cloud;
pcl::toROSMsg(output,cloud);
pub.publish(cloud);
arrow_pub.publish(arrow);
}
int
main(int argc, char** argv)
{
ros::init(argc, argv,"my_pcl_tutorial");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("input",1,cloud_cb);
pub = nh.advertise<sensor_msgs::PointCloud2> ("output",1);
arrow_pub = nh.advertise<visualization_msgs::Marker> ("out",1);
ros::spin();
}
私はrostopic echo out
とoutput
を実行すると、私は両方のトピックはノードによって公開されて見ることができますが、私はROSノード内でそれらを表示することはできません。
arrow_pub.publish(arrow);をコメントアウトするか、変更した直前に機能したのですか? – alextoind
矢印に関連するすべてのコードを使用しないと、動作します。私はこのチュートリアルの送信矢印コードを追加しようとしていました:http://wiki.ros.org/rviz/Tutorials/Markers%3A%20Basic%20Shapes、cloud_cb関数の中で、それらを混ぜることはできません。 –
おそらくあなたの問題を引き起こす原因はありませんが、ポイントクラウドと矢印を同時に表示したい場合は、矢印のタイムスタンプを「今」に設定するのではなく、ポイントクラウドと同じスタンプに設定してくださいおそらく 'input.header.stamp'のようなものです)。 – luator