当前位置:   article > 正文

(五)turtlebot3用代码控制机器人直线及圆弧运动(/cmd_vel geometry_msgs/Twist的使用)_turtlebot3直线

turtlebot3直线

本文实现通过代码发送控制命令给机器人,让机器人安装特定的轨迹行走.希望实现的功能为直走和走一个圆形.

1.启动gazebo并加载空地图

roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
  • 1

此时如果启动键盘控制的话机器人就可动起来了。
为了用代码控制机器人运动,需要将键盘控制程序替换为自定义的程序。

2.启动slam并在rviz中显示

roslaunch turtlebot3_slam turtlebot3_slam.launch
  • 1

3.ros发送cmd_vel

rostopic list 发现控制命令是通过cmd_vel发送的。
rostopic echo /cmd_vel 可看到命令形式如

linear: 
  x: 0.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

先让机器人转圈,输入这个命令

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: -0.5}}'
  • 1

让机器人直行,输入

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'
  • 1

4./cmd_vel geometry_msgs/Twist使用示例

新建一个节点不断发送/cmd_vel 控制机器人运动的节点

mkdir -p cmdveltest/src
cd cmdveltest/src
catkin_create_pkg cmdveltest geometry_msgs
mkdir src
cd src
touch cmdveltest.cpp
cd cmdveltest/src
catkin_make
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在CMakeLists.txt中加入

add_executable(cmdveltest src/cmdveltest.cpp)
target_link_libraries(cmdveltest ${catkin_LIBRARIES})
  • 1
  • 2

cmdveltest.cpp内容如下

#include <iostream>
#include <geometry_msgs/Twist.h>
#include <ros/ros.h>
#include <ros/console.h>
#include<unistd.h>

using namespace std;
int main(int argc,char** argv)
{
    ros::init(argc, argv, "cmdveltest");
     ros::NodeHandle cmdh;
    ros::Publisher cmdpub= cmdh.advertise<geometry_msgs::Twist>("cmd_vel", 1, true);;
    ros::Rate r(60);
    while(1){
        geometry_msgs::Twist twist;
        geometry_msgs::Vector3 linear;
        linear.x=0.1;
        linear.y=0;
        linear.z=0;
        geometry_msgs::Vector3 angular;
        angular.x=0;
        angular.y=0;
        //直行
        //angular.z=0;
        //转圈
        angular.z=-0.5;
        twist.linear=linear;
        twist.angular=angular;

        cmdpub.publish(twist);
        cout<<"hello"<<endl;
       // ros::spinOnce();
        //r.sleep();
        sleep(1);
    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

编译后启动gazebo,启动测试程序

rosrun cmdveltest cmdveltest
  • 1

发现机器人跑得飞起

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/674773
推荐阅读
相关标签
  

闽ICP备14008679号