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

Can a ROS node be created outside a catkin workspace?

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

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

启动您的 roscore,然后 运行 在一个新的终端中启动 Python 脚本,通常像 python filename 和它 运行s 一样,如果你已放置在您的柔荑花序工作区内并构建并获取它。

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

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

会更容易

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

当然可以。像对待任何其他 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 消息。