Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 搬动turtlebot_gazebo的麻烦_C++_Geometry_Move_Ros_Robot - Fatal编程技术网

C++ 搬动turtlebot_gazebo的麻烦

C++ 搬动turtlebot_gazebo的麻烦,c++,geometry,move,ros,robot,C++,Geometry,Move,Ros,Robot,我开始了一个小项目,我想在露台上移动这只高跷。我发布:roslaunch turtlebot\u gazebo turtlebot\u world.launch 我写了一个代码来移动它: #include "ros/ros.h" #include "geometry_msgs/TwistWithCovariance.h" #include "nav_msgs/Odometry.h" #include "gazebo_msgs/LinkState.h" #include "geometry

我开始了一个小项目,我想在露台上移动这只高跷。我发布:roslaunch turtlebot\u gazebo turtlebot\u world.launch

我写了一个代码来移动它:

#include "ros/ros.h" 
#include "geometry_msgs/TwistWithCovariance.h" 
#include "nav_msgs/Odometry.h" 
#include "gazebo_msgs/LinkState.h" 
#include "geometry_msgs/Twist.h"

int main(int argc, char **argv){

ros::init(argc,argv,"move");
ros::NodeHandle n;
ros::Publisher move_pub = n.advertise<geometry_msgs::Twist>("moving",1000);
ros::Rate loop_rate(10);

geometry_msgs::Twist msg;
while(ros::ok()){
    msg.linear.x = 0.0;
    msg.linear.y = 0.0;
    msg.linear.z = 20.0;
    move_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();

    }

}
#包括“ros/ros.h”
#包括“几何体\u msgs/twistwithconvariance.h”
#包括“导航/里程计.h”
#包括“gazebo_msgs/LinkState.h”
#包括“几何图形\u msgs/Twist.h”
int main(int argc,字符**argv){
ros::init(argc,argv,“move”);
ros::nodehandlen;
发布者移动(Publisher move_pub=n.广告(“移动”),1000;
ros:速率环_速率(10);
几何图形\u msgs::Twist msg;
while(ros::ok()){
msg.linear.x=0.0;
msg.linear.y=0.0;
msg.linear.z=20.0;
移动发布(msg);
ros::spinOnce();
loop_rate.sleep();
}
}

这不管用。正如你所看到的,我包括了其他MSG,并尝试了它们,但我得到了相同的结果。我还试图找到节点turtlebot_teleop_键盘,以了解它是如何通过输入完成的。但我找不到通往它的路。那我要怎么做才能移动它呢?如何找到节点的路径?

对于Turtlebot,您可以发布线性速度-x、y和z以及角速度-x、y和z。你需要了解的是这些物理意义

x的线速度将使其向前移动。

z轴上的角速度会使它自转。

其他参数不起任何作用。
因此,在您的代码中,使用上述两个参数将移动机器人。其余参数不会以任何方式影响机器人。

对于Turtlebot,您可以发布线性速度-x、y和z以及角速度-x、y和z。你需要了解的是这些物理意义

x的线速度将使其向前移动。

z轴上的角速度会使它自转。

其他参数不起任何作用。
因此,在您的代码中,使用上述两个参数将移动机器人。其余参数不会以任何方式影响bot。

您发布到了错误的主题和错误的参数

1-启动turtlebot后,从另一个终端键入“rostopic list”,查找包含cmd_vel或cmd_vel_mux的主题。如果没有cmd_vel_mux,只需发布cmd_vel,否则发布其中一个cmd_vel_mux/input

2-对于Turtlebot的线性运动,只有x有任何效果

my ros Dynamic中的示例节点:

int main(int argc, char **argv)
{

    ros::init(argc,argv,"move");
    ros::NodeHandle n;
    ros::Publisher move_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel_mux/input/navi",1000);
    ros::Rate loop_rate(10);

    geometry_msgs::Twist msg;
    while(ros::ok())
    {
        //  linear velocity
        msg.linear.x = 1.0;
        msg.linear.y = 0.0;
        msg.linear.z = 0.0;

        //  angular velocity
        msg.angular.x = 0.0;
        msg.angular.y = 0.0;
        msg.angular.z = 0.0;

        move_pub.publish(msg);

        ros::spinOnce();

        loop_rate.sleep();
    }

}
int main(int argc,char**argv)
{
ros::init(argc,argv,“move”);
ros::nodehandlen;
ros::Publisher move_pub=n.advision(“/cmd_vel_mux/input/navi”,1000);
ros:速率环_速率(10);
几何图形\u msgs::Twist msg;
while(ros::ok())
{
//线速度
msg.linear.x=1.0;
msg.linear.y=0.0;
msg.linear.z=0.0;
//角速度
msg.angular.x=0.0;
msg.angular.y=0.0;
msg.angular.z=0.0;
移动发布(msg);
ros::spinOnce();
loop_rate.sleep();
}
}

您发布的主题和参数错误

1-启动turtlebot后,从另一个终端键入“rostopic list”,查找包含cmd_vel或cmd_vel_mux的主题。如果没有cmd_vel_mux,只需发布cmd_vel,否则发布其中一个cmd_vel_mux/input

2-对于Turtlebot的线性运动,只有x有任何效果

my ros Dynamic中的示例节点:

int main(int argc, char **argv)
{

    ros::init(argc,argv,"move");
    ros::NodeHandle n;
    ros::Publisher move_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel_mux/input/navi",1000);
    ros::Rate loop_rate(10);

    geometry_msgs::Twist msg;
    while(ros::ok())
    {
        //  linear velocity
        msg.linear.x = 1.0;
        msg.linear.y = 0.0;
        msg.linear.z = 0.0;

        //  angular velocity
        msg.angular.x = 0.0;
        msg.angular.y = 0.0;
        msg.angular.z = 0.0;

        move_pub.publish(msg);

        ros::spinOnce();

        loop_rate.sleep();
    }

}
int main(int argc,char**argv)
{
ros::init(argc,argv,“move”);
ros::nodehandlen;
ros::Publisher move_pub=n.advision(“/cmd_vel_mux/input/navi”,1000);
ros:速率环_速率(10);
几何图形\u msgs::Twist msg;
while(ros::ok())
{
//线速度
msg.linear.x=1.0;
msg.linear.y=0.0;
msg.linear.z=0.0;
//角速度
msg.angular.x=0.0;
msg.angular.y=0.0;
msg.angular.z=0.0;
移动发布(msg);
ros::spinOnce();
loop_rate.sleep();
}
}

mux代表什么?如果我想做其他事情,我怎么知道我必须发布哪个主题?很抱歉反应太晚,这是一个专门的ros主题,用于确定哪些输入将被优先考虑(例如,当teleop命令同时激活时,您可能希望您的teleop命令覆盖其他命令,或者您上级的控制器可能覆盖您的命令等).Mux代表多路复用器。为了知道移动机器人时使用哪个主题,最好的方法是在ros wiki上找到你的机器人。如果是带轮子的机器人,最有可能会有cmd____水平,但不同的机器人可能会使用不同的输入系统(腿、手臂…)。mux代表什么?如果我想做其他事情,我如何知道我必须发布哪个主题?很抱歉反应太晚,这是一个特殊的ros主题,用于确定哪些输入将被优先考虑(例如,当teleop命令同时激活时,您可能希望您的teleop命令覆盖其他命令,或者您上级的控制器可能覆盖您的命令等).Mux代表多路复用器。为了知道移动机器人时使用哪个主题,最好的方法是在ros wiki上找到你的机器人。如果是带轮子的机器人,很可能会有cmd_\n级别,但不同的机器人可能会使用不同的输入系统(腿、手臂…)。