可以在 catkin 工作空间之外创建 ROS 节点吗?

Posted

技术标签:

【中文标题】可以在 catkin 工作空间之外创建 ROS 节点吗?【英文标题】:Can a ROS node be created outside a catkin workspace? 【发布时间】:2018-05-14 06:38:47 【问题描述】:

我想在 catkin 工作区之外创建一个 ROS 发布者节点。 可以创建吗?

【问题讨论】:

【参考方案1】:

当然可以。像对待任何其他 cpp 库或 python 包一样对待 ROS。

在python中,你必须保持PYTHONPATH环境变量指向/opt/ros/kinetic/lib/python2.7/dist-packages中的ros包。

在 cpp 中,您必须告诉编译器在哪里查找包含 (/opt/ros/kinetic/include)、库 (/opt/ros/kinetic/lib) 以及要导入的库。对于最简单的应用程序-lroscpp -lrostime -lrosconsole 应该足够了。例如:

g++ node.cpp -o node -I/opt/ros/kinetic/include -L/opt/ros/kinetic/lib -lroscpp -lrostime -lrosconsole

记住你仍然需要像ROS_MASTER_URI这样的ros环境变量。

但是,我不知道是否有一种简单的方法可以在不使用catkin_make 和 cmake 文件的情况下生成自定义 ros 消息。

【讨论】:

【参考方案2】:

是的,在 Python 中,您可以在 catkin 工作区之外编写 ROS 节点。

启动您的 roscore,然后在新终端中运行 Python 脚本,通常类似于 python filename,它会像您放置在 catkin 工作区中并构建和获取它一样运行。

我已成功创建订阅者和发布者节点,并在实际的 TurtleBot2 上运行它们,而节点不在 catkin 工作区中。

我认为我描述的方法不适用于 C++。它仅适用于 Python。在 C++ 中,您必须在编译时链接库。所以,检查一下。例如,我们执行 g++ filename.cpp -lm,其中 -lm 链接要在 filename.cpp 中使用的数学库,因此您可能需要检查如何执行此操作。另一方面,将文件添加到你的 catkin 工作区或只是转移到 Python 会更容易。

您必须包含 ros/ros.h 和 std_msgs/message_name.h ,其中 message_name 将替换为您在代码中使用的任何消息。您可能会在某个地方找到这些文件,或者您可以通过搜索在线获取文件的源代码。

【讨论】:

感谢@akshayk07 的回复。我在 cpp 中创建了一个发布者节点。当我像在终端窗口中编译任何其他 cpp 文件一样编译时。我遇到错误,例如 "未定义对 ros::init() 的引用,未定义对 ros::ok() * 的引用"。当我们在终端中编译时,只需添加 ros 的路径就可以了,或者我们必须做的其他事情以及添加 */opt/ros/kinetic/include 路径。对不起,我在堆栈溢出中的写作格式 我认为我描述的方法不适用于 C++。它仅适用于 Python。在 C++ 中,您必须在编译时链接库。所以,检查一下。例如,我们执行g++ filename.cpp -lm,其中-lm 链接要在filename.cpp 中使用的数学库,因此您可能需要检查如何执行此操作。另一方面,将文件添加到 catkin 工作区或只是转移到 Python 会更容易。 这肯定行不通。我认为我们必须指定专用的库目录并链接库。但我不确定我必须指定哪些库。如果我必须在 catkin 中为我尝试创建的节点创建一个包,在 CMakeLists.txtadd_package 部分中,我正在添加std_msgsroscpp。对于这个正在使用哪些库,我无法弄清楚。 .如果我能得到比我尝试过的那些,在 catkin_ws 之外执行 .cpp 文件。如果你有什么建议,你愿意分享吗?谢谢 您必须包含ros/ros.hstd_msgs/message_name.h,其中message_name 将替换为您在代码中使用的任何消息。您可能会在某个地方找到这些文件,或者您可以通过搜索在线获取文件的源代码。 我已将此信息添加到答案中。如果此答案令人满意,请单击绿色勾号接受答案。如果您还有其他问题,请将它们作为单独的问题发布,而不是在 cmets 中,因为这有助于保持网站的井井有条。谢谢。

以上是关于可以在 catkin 工作空间之外创建 ROS 节点吗?的主要内容,如果未能解决你的问题,请参考以下文章

ROS系统 创建工作空间与功能包

创建一个catkin工作空间

ROS的初步学习--创建一个工作空间和一个程序包

ROS学习--第3篇:ROS基础---创建工作空间

创建一个ros功能包

ROS系列-官方catkin创建工程