ROS用键盘控制小车移动

使用键盘控制小车移动,以下是rqt_gragh:
ROS用键盘控制小车移动_第1张图片其中/sim节点显示的是turtle中的小乌龟,其作用是当不方便在实际的ros小车上运动时使用小乌龟演示,删去也不会影响键盘对小车的控制。
以下是代码块:key_teleop_test.cpp

#include 
#include 
#include 

class SubscribeAndPublish
{
public:
    SubscribeAndPublish()
    {
        //Topic you want to publish
        pub_ = n_.advertise("/cmd_vel", 10);
      
        //Topic you want to subscribe
        //注意这里,和平时使用回调函数不一样了。
        sub_ = n_.subscribe("/turtle1/cmd_vel", 10, &SubscribeAndPublish::callback, this);
    }
    void callback(const geometry_msgs::Twist& input)
    {
        ROS_INFO("%.2f, %.2f\r\n", input.linear.x,input.angular.z);
        pub_.publish(input);
    }

    private:
      ros::NodeHandle n_;
      ros::Publisher  pub_;
      ros::Subscriber sub_;
};

int main(int argc, char** argv){
    ros::init(argc, argv, "key_teleop_test");
    SubscribeAndPublish SAPObject;
    
    ros::spin();
    return 0;
}

以下是launch文件:teleop.launch


    
    
    

    
    
       
      
    
    

代码效果是,当运行

roslaunch key_teleop teleop.launch

界面会显示一个终端和一个小乌龟,使用键盘的方向键控制小车前后运动以及左右旋转。小乌龟也会一起运动并且在终端会有消息推送。
cpp文件中使用到了类来在回调函数中发送消息。参考链接:https://blog.csdn.net/ethan_guo/article/details/80226121
launch文件中一共开启四个节点。其中sim节点和teleop节点来自官方的turtlesim包。wpb_home_bringup包来自启智机器人的代码包。key_teleop包是我们自己写的,其作用是接收来自teleop节点的消息并将其发送给wpb_home_core节点驱动机器人。

你可能感兴趣的:(ros)