代碼主體:
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();