TurtleBot ROS движется с использованием Twist

Я пытаюсь запрограммировать TurtleBot, но для робота не хватает учебных пособий, и я не смог написать свой собственный C ++, который работает. Я пытаюсь использовать учебник от другого робота, чтобы заставить его двигаться, когда нажата клавиша.

Исходный учебник найден Вот:, который я только изменил тему публикации на «/ cmd_vel»

#include <iostream>

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

class RobotDriver
{
private:
//! The node handle we'll be using
ros::NodeHandle nh_;
//! We will be publishing to the "/base_controller/command" topic to issue commands
ros::Publisher cmd_vel_pub_;

public:
//! ROS node initialization
RobotDriver(ros::NodeHandle &nh)
{
nh_ = nh;
//set up the publisher for the cmd_vel topic
cmd_vel_pub_ = nh_.advertise<geometry_msgs::Twist>("/cmd_vel", 1);
}

//! Loop forever while sending drive commands based on keyboard input
bool driveKeyboard()
{
std::cout << "Type a command and then press enter.  ""Use '+' to move forward, 'l' to turn left, ""'r' to turn right, '.' to exit.\n";

//we will be sending commands of type "twist"geometry_msgs::Twist base_cmd;

char cmd[50];
while(nh_.ok()){

std::cin.getline(cmd, 50);
if(cmd[0]!='+' && cmd[0]!='l' && cmd[0]!='r' && cmd[0]!='.')
{
std::cout << "unknown command:" << cmd << "\n";
continue;
}

base_cmd.linear.x = base_cmd.linear.y = base_cmd.angular.z = 0;
//move forward
if(cmd[0]=='+'){
base_cmd.linear.x = 0.25;
}
//turn left (yaw) and drive forward at the same time
else if(cmd[0]=='l'){
base_cmd.angular.z = 0.75;
base_cmd.linear.x = 0.25;
}
//turn right (yaw) and drive forward at the same time
else if(cmd[0]=='r'){
base_cmd.angular.z = -0.75;
base_cmd.linear.x = 0.25;
}
//quit
else if(cmd[0]=='.'){
break;
}

//publish the assembled command
cmd_vel_pub_.publish(base_cmd);
}
return true;
}

};

int main(int argc, char** argv)
{
//init the ROS node
ros::init(argc, argv, "robot_driver");
ros::NodeHandle nh;

RobotDriver driver(nh);
driver.driveKeyboard();
}

Код компилируется и работает правильно, но черепаха не двигается при выполнении команд. Есть идеи почему?

Дополнительная информация:

Когда я на ноутбуке, снабженном моим Turtlebot, сообщения, кажется, не отправляются (или не доставляются). В отдельных терминалах у меня есть:

turtlebot@turtlebot-0516:~$ sudo service turtlebot start
[sudo] password for turtlebot:
turtlebot start/running, process 1470
turtlebot@turtlebot-0516:~$ rostopic echo /cmd_vel

А также

turtlebot@turtlebot-0516:~$ rostopic pub /cmd_vel geometry_msgs/Twist '[1.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]'
publishing and latching message. Press ctrl-C to terminate

С информацией:

turtlebot@turtlebot-0516:~$ rostopic info /cmd_vel
Type: geometry_msgs/Twist

Publishers:
* /rosttopic_2547_1352476947372 (http://turtlebot-0516:40275/)

Subscribers:
* /turtlebot_node (http://10.143.7.81:58649/)
* /rostopic_2278_1352476884936 (http://turtlebot-0516:39291/)

Нет никакого выхода для эха вообще.

2

Решение

Я знаю, что этому посту уже тысяча лет, но у меня не было проблем с запуском этого кода. Мне пришлось использовать библиотеку ncurses, чтобы запустить ее без необходимости нажимать клавишу ввода после каждого введенного символа.

Подумал, что всем покажу, что это работает. : P Я управлял созданием iRobot, используя его.

1

Другие решения

Вы можете попробовать с sudo service turtlebot stop остановить автоматическую первоначальную настройку, а затем roslaunch turtlebot bringup minimal.launch запустить только минимальную настройку, которая вам нужна. Тогда вы можете попробовать roslaunch turtlebot_teleop keyboard_teleop.launch использовать телеоперацию с клавиатурой.

0

Написал учебник по Hello World для TurtleBot для всех, кто только начинает.

Для всех, кто тянет их за волосы, пытаясь заставить его работать.

+ Изменить /cmd_vel в cmd_vel_mux/input/teleop

Я использую:

  • Индиго
  • TurtleBot2
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector