0

这个错误不容易复制,因为我在 Windows 上使用 ROS 2 并且安装不是那么简单,但我认为这是一个 Visual Studio 问题,所以也许你们知道这里发生了什么。

我想在 Visual Studio 2019 项目中使用 ROS 2。为此,我做了以下事情:

  • C/C++ > 附加包含目录 = C:\dev\ros2_foxy\include
  • 链接器 > 附加库目录 = C:\dev\ros2_foxy\Lib
  • Linker > Input > Additional Dependencies = 所有 .lib 文件在
  • C:\dev\ros2_foxy\Lib 将所有 .dll 文件复制到 bin 输出

我将路径 C:/ros2_foxy/install/bin 添加到我的环境路径中。

调用 ROS init 函数可以正常工作,因此与 ROS 的连接应该没问题。在 ROS 中,您使用节点进行通信。您自己的节点是从“节点”父类继承的类,并使用节点名称(此处为“pub”)进行初始化,如下所示:

class MinimalPublisher : public rclcpp::Node
{
public:
    MinimalPublisher(): Node("pub"){}
}

在 ROS 的 node.cpp 中,节点类的定义如下:

Node::Node(
  const std::string & node_name,
  const NodeOptions & options)
: Node(node_name, "", options)
{
}

当我通过代码进行调试时,node_name 不包含“pub”,而是包含一些随机字符(它们每次都会更改),然后是“p”“u”“b”和“\0”。

在此处输入图像描述

因此,我收到“无效节点名称”错误。我试图找出添加随机字符的确切位置,但老实说,我无法找到比这更早的对 node_name 的引用。

我很高兴知道问题可能出在哪里。

编辑:节点类的定义并不简单,因为它来自 ROS。当使用 colcon 和命令行构建时,所有这些都可以正常工作,只有在使用 Visual Studio 构建和运行代码时才会出现问题。但是,如果您有兴趣,可以在此处找到文档并在此处找到实现。

我的测试代码来自“编写发布者”示例教程

4

0 回答 0