【问题标题】:Terminal command in a ROS package is not executed未执行 ROS 包中的终端命令
【发布时间】:2017-03-25 14:36:13
【问题描述】:

我对 ROS 节点有一点问题,即使我认为这主要是 C++ 代码问题。 我想要做的是使用在 ROS 节点内的终端(Ubuntu 14.04)中运行的脚本。 我正在使用 C++ 语言的system() 命令代码执行此操作。 该脚本必须详细说明存储在我的 PC 上本地的 .txt 文件;当我通过普通的命令行方法使用脚本时,显然我必须首先导航到我的脚本所在的目录,然后我启动脚本。 为了在我的节点上回复这个,我使用 2 个system() 实例导航到目录,然后运行脚本。 问题是节点似乎“看不到”告诉它导航到正确目录的命令,所以,我能得到的只是一条错误消息:无法读取文本文件。 正确启动脚本的唯一方法是在我手动导航到脚本所在的目录后启动节点。 我在下面发布代码,也许我写的东西不好,或者还有另一个我看不到的问题,因为我是 ROS 和一般编码领域的菜鸟。提前谢谢你,我知道这可能是一个愚蠢的问题!

马可

代码如下:

int main(int argc, char **argv)
{

ros::init(argc, argv, "heart_rate_monitor");


ros::NodeHandle n;

system("cd ~/home/marco/catkin_ws/src/heart_rate_monitor");
system("get_hrv -R test.txt");


exit(0);



return 0;
}

注意:我也试过不带 ~ 。

编辑:现在看来运行正常,这里是代码:

int main(int argc, char **argv)
{

ros::init(argc, argv, "heart_rate_monitor");


ros::NodeHandle n;

chdir("/home/marco/catkin_ws/src/heart_rate_monitor");

system("get_hrv -R test.txt >doc.txt");


exit(0);



return 0;
}

【问题讨论】:

  • 请发布错误信息?
  • 好的,它只是这么说:/usr/bin/get_hrv : Can't open test.txt
  • 你也应该删除~。这代表您的主目录。
  • 好的,我试试,报告!谢谢!编辑:我收到此错误 sh: 1: /home/marco/catkin_ws/src/heart_rate_monitor/get_hrv: not found
  • get_hrv 安装在 /usr/bin 目录中,因为它必须适用于整个系统,也适用于位于在线数据库中的文件。

标签: c++ ubuntu terminal ros gnome-terminal


【解决方案1】:

使用chdir 更改目录。系统将创建一个新的 shell 并执行 cd 命令。有关更多信息,请参阅this 堆栈溢出帖子。

【讨论】:

  • 好的!我必须使用: chdir cd /home/marco/catkin_ws/src/heart_rate_monitor ?你是这个意思吗?编辑:使用这种语法它不起作用。顺便说一句,您在上面的 cmets 中给我的最后一个命令正在工作。但这并不完全是我想要的。因为,在调用脚本后,我希望它使用命令>doc.txt 将结果写入一个新的文本文件。问题是我希望该文件位于我们正在谈论的同一目录中。相反,它将它保存在我启动节点的实际目录中。我想独立于位置启动节点。
  • 我已根据您的指示使用正确的代码编辑了我的问题!非常感谢!只有一个小问题。这仅使用 rosrun 而不是 roslaunch 有效。我不知道你是否了解 ROS,如果你能帮我解决这个问题,无论如何再次感谢@neo
【解决方案2】:

正如 neo 所指出的,第一个 system 调用正在更改 system 调用的当前目录,但它不会影响父级(即您的节点)的当前目录。

但是,如果可以的话,您应该尝试以不同的方式解决这个问题。除了硬编码错误的路径外,您通常不应假设在运行时可以访问源文件夹(例如,如果您进行安装,源可能在任何地方)。而是:

  • 将其他数据放入新目录(例如“数据”)
  • 添加安装目标
  • 使用ros::package::getPath('your_package_name') 检索包的运行时路径,并在系统调用中使用完整路径+“/data/test.txt”

【讨论】:

  • 感谢您的建议,因为我是 ROS 的新手,而且我是编码界的超级菜鸟,任何建议对我来说都是宝藏!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2015-05-27
  • 2014-12-15
  • 2016-12-06
  • 2014-07-03
  • 1970-01-01
  • 2012-05-22
相关资源
最近更新 更多