Я только начал работать с ROS и пытаюсь написать узел, который публикует ключи в теме.
Я создал узел в Linux Ubuntu 16.04.4 с помощью ncurses.
Это мой код:
#include <curses.h>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
int ch;
nodelay(stdscr, TRUE);
ros::init(argc, argv, "keyboard_driver");
ros::NodeHandle n;
ros::Publisher key_pub = n.advertise<std_msgs::String>("keys", 1);
ros::Rate loop_rate(100);
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
if ((ch = getch()) != ERR)
{
ss << ch;
std::cout << ch;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
key_pub.publish(msg);
}
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
Я использую ncurses, чтобы избежать буфера терминала.
Тема появляется, но я ничего не получаю, если в другомтерминал, я запускаю эту команду:
rostopic echo /keys
Отладка я обнаружил, что getch () всегда возвращает -1.
Как мне сделать, чтобы это работало?
UPDATE
Я пробовал эту маленькую программу, и она ничего не печатает:
#include <iostream>
#include <curses.h>
int main(int argc, char **argv)
{
int ch;
cbreak();
nodelay(stdscr, TRUE);
for(;;)
{
if ((ch = getch()) != ERR)
{
std::cout << ch;
}
}
return 0;
}