ROS 發佈器第一次發佈的消息,訂閱器訂閱不到解決方案

代碼主體:

ros::Publisher pub = n.advertise<geometry_msgs::Twist>("vel_ctl",10);
ros::Rate loop_rate(1);
geometry_msgs::Twist msg;
  int count = 0;
  while (ros::ok())
  {
        count++;
        msg.linear.x=0.1+count;
        msg.linear.y=0.2+count;
        msg.linear.z=0.3+count;
        msg.angular.x=0.4+count;
        msg.angular.y=0.5+count;
        msg.angular.z=0.6+count;

        if (count == 1)
        pub.publish(msg);

        ros::spinOnce();
        loop_rate.sleep();
  }

通過上述代碼可以完成一次消息發佈,但是在另一個訂閱節點,卻訂閱不到該節點發布的消息。

經過查閱資料發現,此時消息發佈時,ros::Publisher pub 還沒有完成註冊,導致發佈的數據無法訂閱。

因此可以在ros::Publisher pub = n.advertise<geometry_msgs::Twist>(“vel_ctl”,10)後加一個延時,保證pub註冊成功。

ros::Publisher pub = n.advertise<geometry_msgs::Twist>("vel_ctl",10);
ros::Duration(3.0).sleep();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章