Как читать данные с клавиатуры, не останавливая цикл? - PullRequest
0 голосов
/ 01 июля 2019

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

Я пытался использовать код 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 любой ценой, потому что он просто добавляет три тысячи уровней сложности, а для таких простых приложений, как мое, это просто излишне большое количество времени, необходимое для изучения основ.

Я надеюсь, что вы можете помочь мне с этим, большое спасибо!

...