c++ - 移动turtlebot_gazebo的麻烦
问题描述
我开始了一个小项目,我想在凉亭中移动turtlebot。我启动了:roslaunch turtlebot_gazebo turtlebot_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();
}
}
这行不通。正如你所看到的,我包含了其他的味精并用它们尝试过,但我得到了相同的结果。我还尝试找到节点turtlebot_teleop_keyboard 以了解它是如何通过输入完成的。但我找不到它的路径。那么我需要做些什么来移动它呢?我怎样才能找到节点的路径?
解决方案
您发布到错误的主题和错误的参数。
1- 启动您的turtlebot 后,从另一个终端键入“rostopic list”并查找包含 cmd_vel 或 cmd_vel_mux 的主题。如果没有 cmd_vel_mux 就发布 cmd_vel,否则发布 cmd_vel_mux/input 之一。
2- 对于 Turtlebot 的线性运动,只有 x 有任何影响。
我的 ros-kinetic 中的示例节点:
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();
}
}
推荐阅读
- javascript - 将对象值数组映射到 Typescript 中的接口类型
- angular7 - 如何在 Angular 7 中创建动态多步骤侧边栏菜单?
- pdf - 使用java企业版读取PDF文件的困难使用PDFBox
- office-js - 检测 Outlook 加载项
- azure - Azure ML Studio 编辑元数据不起作用
- node.js - 如何通过 configureWebpack 向 Vuepress 组件公开 Node 环境变量?
- javascript - Cron Job 在 Cloudwatch Events 中从早上 8 点到下午 4.30 每分钟运行一次
- javascript - 反应中的额外等待会中断异步测试
- angular - 删除 firebase 对象时无法读取未定义的属性“id”
- localhost - localhost 不工作,但 127.0.0.1 工作,DYMO 标签软件问题