如何在不停止循环的情况下从键盘读取数据?

时间:2019-07-01 10:02:16

标签: c++ gazebo-simu

我正在使用虚拟引擎(凉亭),每当按下某个键时,我想向虚拟环境中的链接之一施加力。

我尝试将Morgan McGuire代码(http://www.flipcode.com/archives/_kbhit_for_Linux.shtml)用于Linux中的“ kbhit”功能实现,并且还尝试实现用户“ Matthieu M”发布的代码。如另一个问题Cin without waiting for input?所示。 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,因为它只会增加三千层的复杂性,而对于像我这样的简单应用程序,它仅代表学习基础知识所花费的不必要的时间。

我希望您能为此提供帮助,非常感谢!

0 个答案:

没有答案