简单的代码让turtlebot动起来II(使用kobuki底座)走三角形

接着上一篇turtlebot的直行和旋转。


ROS中,节点之间通过消息沟通,主题相当于是对消息进行路由和管理的总线。节点向主题发布消息即表示一个节点在发送数据;节点订阅某个主题即可以接受其他节点的消息。在上一篇的直行和旋转当中,我们只写一个publisher,仅仅有话题的发布并没有话题的订阅。于是就有了尝试写一个subsrciber的想法,实现turtlebot稍微复杂一点的运动。

想要让turtlebot走一个三角形,那么同上一篇,首先我们需要向底座发布速度的信息,publisher有了。那么subscriber是什么呢?三角形有自己的边长,turtlebot要知道自己走了多远,就需要知道自己的里程计信息(转载的一篇里程计相关的文章有介绍),即订阅/odom主题。写一个订阅者的步骤:(1)初始化ROS系统(2)订阅话题(3)Spin,等待消息的到来(4)当一个消息到达时,相应的Callback()函数被调用。


有了思路就可以实现了,附上代码:

 // 头文件velcontrol.h  
  
#ifndef VELCONTROL_H  
#define VELCONTROL_H  
  
#include <ros/ros.h>  
#include <geometry_msgs/Twist.h>  
#include <geometry_msgs/TwistStamped.h>  
  
#include <nav_msgs/Odometry.h>  
#include "tf/LinearMath/Matrix3x3.h"  
#include "geometry_msgs/Quaternion.h"  
#define CV_PI   3.1415926535897932384626433832795  
  
#include <iostream>  
#include <stdlib.h>  
  
using namespace std ;  
  
typedef struct roPos  
{  
   double  x;  
   double  y;  
   double  theta;  
   void init(double x1, double x2, double x3)  
   {  
     x = x1;  
     y = x2;  
     theta = x3;  
   }  
} roPos;  
  
class velControl  
{  
public:  
    velControl();  
    roPos  start_pos_;  
    roPos  curr_pos_;  
  
  
protected:  
  
    void odomCallback(const nav_msgs::Odometry::ConstPtr& msg);  
  
private:  
    double rect_width_;  
    double rect_height_;  
    double offset_xy_;  
    double offset_theta_;  
  
    double vel_line_;  
    double vel_angle_;  
  
    int state_;  
    bool Is_Fininsh_;  
  
    ros::NodeHandle handle_;  
    ros::Publisher  vel_pub_ ;  
    ros::Subscriber sub_ ;  
    geometry_msgs::Twist  controlVel_;  
  
private:  
    double angleWrap(double angle);  
    bool init();  
   
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值