Как читать данные с клавиатуры, не останавливая цикл?
Я работаю с виртуальным двигателем (беседка) и хочу применить силу к одной из ссылок в виртуальной среде всякий раз, когда нажимается определенная клавиша.
Я попытался использовать код Morgan McGuire ( http://www.flipcode.com/archives/_kbhit_for_Linux.shtml) для реализации функции "kbhit" в Linux, и я также попытался реализовать код, опубликованный пользователем "Matthieu M." как показано в этом другом вопросе Cin, не дожидаясь ввода?, Функция kbhit работает правильно для кода примера в ссылке, но когда вы пытаетесь использовать функцию в условии if для некоторого "не паузы чтения", возвращаемое значение функции остается тем же, независимо от того, что после нажатия ключ только один раз. Второй пример также не дал хороших результатов (возможно, из-за моего метода компиляции).
//This is what I want to do inside the ApplyForce.cc file
public: void OnUpdate()//This method is called whenever this plugin is updated in the virtual environment
{
if (FrontArrowIsPressed())
{
this->model->GetLink("blue_object")->AddForce(gazebo::math::Vector3(0,20, 0)); //Apply force
}
}
//This is how I compile my code. Just in case, this might be unnecessary information.
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
find_package(gazebo REQUIRED)
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
add_library(ApplyForce SHARED ApplyForce.cc)
target_link_libraries(ApplyForce ${GAZEBO_LIBRARIES})
На самом деле я не работаю с циклами, но так как это виртуальная среда, я не могу позволить программе остановиться, когда захочу прочитать данные с клавиатуры, я делаю эксперименты в реальном времени. Я хочу использовать клавиатуру в качестве контроллера во время симуляции.
И последнее: я пытаюсь избежать ROS любой ценой, потому что он просто добавляет три тысячи уровней сложности, а для таких простых приложений, как мое, это просто излишне большое количество времени, необходимое для изучения основ.
Я надеюсь, что вы можете помочь мне с этим, большое спасибо!