ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

First, please format your code properly, it is quite hard to read.

#include "ros/ros.h"
#include "nav_msgs/Odometry.h" 
#include <ros/console.h>
#include "geometry_msgs/Pose.h"
#include "geometry_msgs/Twist.h"
#include <tf/transform_datatypes.h>

double quatx;
double quaty;
double quatz;
double quatw;
double linearposx;
double linearposy;

void ComPoseCallback(const nav_msgs::Odometry::ConstPtr& msg);

int main(int argc, char **argv) 
{
    ros::init(argc, argv, "Test_FK"); 
    ros::NodeHandle n;                 
    ros::Publisher Velocity_pub = n.advertise<geometry_msgs::Twist>("/RosAria/cmd_vel",10);
    ros::Subscriber ComPose_sub = n.subscribe("/RosAria/pose", 1000, ComPoseCallback);

    geometry_msgs::Twist velocity;
    velocity.linear.x=1;   
    velocity.linear.y=0;   
    velocity.linear.z=0;   
    velocity.angular.x=0;   
    velocity.angular.y=0;   
    velocity.angular.z=0;

    //std::cout<<"xPosition"<<linearposx<<std::endl;
    //ros::Rate loop_rate(10);

    while (ros::ok())
    {
        Velocity_pub.publish(velocity);   
        ros::spinOnce();
    }

 return 0;
 }

void ComPoseCallback(const nav_msgs::Odometry::ConstPtr& msg)    
{
    ROS_INFO("Seq: [%d]", msg->header.seq);
    ROS_INFO("Position-> x: [%f], y: [%f], z: [%f]",
        msg->pose.pose.position.x,msg->pose.pose.position.y,
        msg->pose.pose.position.z);
    ROS_INFO("Orientation-> x: [%f], y: [%f], z: [%f], w: [%f]",
        msg->pose.pose.orientation.x,
        msg->pose.pose.orientation.y,
        msg->pose.pose.orientation.z,
        msg->pose.pose.orientation.w);

    linearposx=msg->pose.pose.position.x; 
    linearposy=msg->pose.pose.position.y; 

    quatx= msg->pose.pose.orientation.x;  
    quaty= msg->pose.pose.orientation.y;  
    quatz= msg->pose.pose.orientation.z;  
    quatw= msg->pose.pose.orientation.w;

    tf::Quaternion q(quatx, quaty, quatz, quatw);
    tf::Matrix3x3 m(q); 

    double roll, pitch, yaw;   

    m.getEulerYPR(yaw, pitch, roll);

    //getRPY    ROS_INFO("Yaw: [%f],Pitch: [%f],Roll: [%f]",yaw,pitch,roll);

    return;
}

As far as I can tell, you don't change the velocity at all in this code. So why do you put the Velocity_pub.publish(velocity) within the while loop? Just publish it once before the loop and use 'ros::spin()' instead of 'ros::spinOnce()' to avoid the loop completely.

    Velocity_pub.publish(velocity); 
    ros::spin();