用aruco_ros订阅markerid

求问aruco使用中,如何使用c++通过aruco_ros包中的aruco_ros/Markerarray.msg订阅到marker.id


#include <ros/ros.h>
#include <aruco_ros/MarkerArray.h>

// 回调函数,处理接收到的MarkerArray消息
void markerArrayCallback(const aruco_ros::MarkerArray::ConstPtr& msg)
{
    // 遍历每个Marker
    for (const auto& marker : msg->markers)
    {
        // 获取marker.id
        int markerId = marker.id;
        // 在这里你可以使用markerId进行处理
        ROS_INFO("Received marker with id: %d", markerId);
    }
}

int main(int argc, char** argv)
{
    ros::init(argc, argv, "aruco_subscriber");
    ros::NodeHandle nh;

    // 订阅MarkerArray消息
    ros::Subscriber sub = nh.subscribe("/aruco_marker_publisher/markers", 10, markerArrayCallback);

    ros::spin();

    return 0;
}

这篇文章应该对您有用,可以看一下:


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

回答:

我可以帮助你解决这个问题。

首先,你需要安装并配置ROS环境。假设你已经完成这一步骤。

下面是解决问题的步骤:

  1. 创建一个ROS C++包: 在终端中使用以下命令创建一个新的ROS C++包: catkin_create_pkg aruco_marker_id rospy roscpp 这将创建一个名为aruco_marker_id的包,并将rospyroscpp作为依赖项。

  2. 编写订阅器节点: 在src目录下创建一个名为marker_id_subscriber.cpp的文件,并编辑该文件。在该文件中,你需要包含必要的ROS头文件和订阅的回调函数。

```cpp #include #include

void markerArrayCallback(const aruco_msgs::MarkerArray::ConstPtr& markerArray) { // 在这里编写处理markerArray消息的代码 // 可以通过markerArray->markers[i].id来获取marker的id值 }

int main(int argc, char** argv) { ros::init(argc, argv, "marker_id_subscriber"); ros::NodeHandle nh;

   ros::Subscriber sub = nh.subscribe("aruco_marker_array", 1000, markerArrayCallback);

   ros::spin();

   return 0;

} ```

  1. 编译ROS包: 运行以下命令来编译ROS包: cd <your_catkin_workspace> catkin_make

  2. 运行ROS节点: 在终端中输入以下命令来运行ROS节点: rosrun aruco_marker_id marker_id_subscriber

这将启动marker_id_subscriber节点并开始订阅aruco_marker_array主题。

当ROS节点收到aruco_marker_array消息时,将会调用markerArrayCallback回调函数,并在其中处理消息。你可以通过markerArray->markers[i].id访问每个marker的id。

希望这些步骤能帮助到你解决问题。如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

ros使用usb摄像头追踪ArUco markers
可以参考下