0

我试图分配几何点的值(它有 x、y、z。它们都是 float64。如果你想检查它:http ://docs.ros.org/en/noetic/api/geometry_msgs /html/msg/Point.html ) 到 float64 变量。但是当我编译代码时,会出现下一个错误:

错误:在 'msg.nav_msgs::Odometry_std::allocator<void >::pose.geometry_msgs::PoseWithCovariance_std::allocator<void >::pose.geometry_msgs::Pose_std::allocator<void > 中请求成员“数据” ::position.geometry_msgs::Point_std::allocator<void >::y',属于非类类型'const _y_type {aka const double}'</p>

y = (msg.pose.pose.position.y).data;

代码如下:

#include <geometry_msgs/Point.h>
#include <std_msgs/Float64.h>

//Creo la variable con la informacion a publicar
std_msgs::Float64 y;

void controlMensajeRecibido(const geometry_msgs::Point& msg)
{
  y = msg.y;
}

int main(int argc, char **argv)
{

//inicio comunicacion con sistema ROS
ros::init(argc, argv, "coordenadas");
ros::NodeHandle nh;

//Me suscribo al t
ros::Subscriber sub = nh.subscribe("/ardrone/odometry/pose/pose/position", 1000, &controlMensajeRecibido);


//creamos un objeto publicador
ros::Publisher pub =nh.advertise<std_msgs::Float64>("/pid_y/state", 1000);  


pub.publish(y); //publico

//cedemos control a ROS
ros::spin();
}

如果变量是正确的类型,我不知道为什么它不让我这样做。如果有人可以帮助我,那就太棒了。感谢你

4

1 回答 1

1

std_msgs::Float64有一个“ data”类型的字段float64。的类型std_msgs::Float64 不等于 in 类型的字段“ y” 。float64geometry_msgs::Point

void controlMensajeRecibido(const geometry_msgs::Point& msg)
{
  y.data = msg.y;
}
于 2021-10-22T12:45:43.200 回答