BEIKE blog

備忘録です

rosのプログラムの挙動について(メモ)

以下のようなプログラムがあったとき、rostopic pub -1 /goal_command std_msgs/String "data: 'go'"をすると赤色の文字でuhoが1秒おきに表示される。また、rostopic pub -1 /goal_command std_msgs/String "data: 'q'"をした場合、同時に処理をする形でbeikeが表示される。

仮に、pub gopub qでそれぞれ機能分けをしたいのであれば、片方を完全に止める必要がある。 やるとしたら、Run()のwhile文中にbreakを入れるとか。

sub_goal_command_ = nh_.subscribe("goal_command", 1, &WaypointNav::GoalCommandCb, this);
void Run()
{
    ros::Rate loop_rate(5);
    while (ros::ok()){
        ROS_ERROR("uho");
        ros::spinOnce();
        loop_rate.sleep();
    }
}
void WaypointNav::GoalCommandCb(const std_msgs::String& msg)
{
    if (msg.data == "go")
        Run();
    else if (msg.data == "q")
        ROS_INFO("beike");
}