Ask Your Question
0

sending velocity commands to the robot throught cmd_vel topic

asked 2019-08-25 06:45:28 -0500

rayane gravatar image

updated 2019-08-26 02:59:17 -0500

Hi, I want to send velocity comands to move th bebop drone up and then forward. Here is my code:

#include<ros/ros.h>
#include<nav_msgs/Odometry.h>
#include<geometry_msgs/Twist.h>
#include<stdlib.h>
#include<math.h>

float tag_yaw,tag_x,tag_y,tag_z;
ros::Publisher pub;
ros::Subscriber sub;
geometry_msgs::Twist msg;
float err;


 void getpos(const nav_msgs::Odometry& posmsg){

 if (posmsg.pose.pose.position.z<= 1){

 ROS_INFO_STREAM( "Showing position : "
 << "x1 =" << posmsg.pose.pose.position.x
 << "y1 =" << posmsg.pose.pose.position.y
  << "z1 =" << posmsg.pose.pose.position.z);

   msg.linear.x=0.0;
   msg.linear.y=0.0;
   msg.linear.z=  0.1;   // exp ( 0.1);
   msg.angular.x= 0;
   msg.angular.y= 0;
   msg.angular.z=0.0;
    }
    else {

    ROS_INFO_STREAM( "Showing position : "
    << "x =" << posmsg.pose.pose.position.x
    << "y =" << posmsg.pose.pose.position.y
    << "z =" << posmsg.pose.pose.position.z);

     msg.linear.x=0.8*(tag_x-posmsg.pose.pose.position.x);
     msg.linear.y=0.0;
     msg.linear.z=  0.0;   // exp ( 0.1);
     msg.angular.x= 0;
     msg.angular.y= 0;
     msg.angular.z=0.0;
     }

      pub.publish(msg);
     }


   int main(int argc, char **argv){
   ros::init(argc, argv,"velBebop");
   ros::NodeHandle nh;

  tag_x= .5;
  tag_y= 0.0;
   tag_z= 0.0;
   sub = nh.subscribe("/bebop/odom",100, &getpos) ;
    pub = nh.advertise<geometry_msgs::Twist>("/bebop/cmd_vel" ,100);

    ros::spin();
    return 0;
     }

I can see that the velocities are being published through the rqt_graph here: image description

but the drone is not moving at all! it is not even rotating the helices. Any suggestion!!! Thanks

edit retag flag offensive close merge delete

Comments

The code you show does not appear to initialise the Publisher at all. Is that a copy-pasta or actual code?

gvdhoorn gravatar imagegvdhoorn ( 2019-08-26 02:47:45 -0500 )edit

@gvdhoorn I forgot that line that I added now. this is my code

rayane gravatar imagerayane ( 2019-08-26 03:00:04 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2019-08-26 05:00:39 -0500

Ktysai gravatar image

updated 2019-08-26 10:09:50 -0500

Hello,

have you tried to post directly a speed in order to see if the robot accepts the command?

rostopic pub /cmd_vel geometry_msgs/Twist -r 10 -- '[0.2, 0.0, 0.0]' '[0.0, 0.0, 0.0]'

Please watch out the drone, I do not know which speeds are proper for you.

LATER EDIT

See this git. Sunk has made a wonderful job. I have used his solution, with some modifications at the robot I've work now.

https://github.com/sungjik/my_persona...

Good luck!

edit flag offensive delete link more

Comments

@Ktysai , thanks for your answer, actually it works that way, but how can I manage with the node that publish the commanded velocity, is there anything wrong with the sleep rate or the spining!!! Please help

rayane gravatar imagerayane ( 2019-08-26 05:42:15 -0500 )edit

@Ktysai thanks again. Actually I followed the same structure of the code in the link but the problem is solved by just send an empty message to /bebop/takeoff topic before running the node. I have another question!!! where to get the battery state so I can send an error message when the battery is low!!! Please help

rayane gravatar imagerayane ( 2019-08-27 11:10:59 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2019-08-25 06:45:28 -0500

Seen: 84 times

Last updated: Aug 26