“rosrun을 실행시켰을 때 실행이 무응답입니다

우분투 환경은 16.04 LTS 64비트입니다.

제가 simulator 노드에서 force_cmd 토픽으로 구독을하고 velocity 토픽으로 0.1초로 구독을하고 계산식을 하여 velocity값을 토픽으로 내용이 나오게하고, control노드에서 velocityvel.cmd를 구독하고, 같은 방식으로 force_cmd를 0.1초로 발행하여 계산하여 control에서는 force_cmd토픽의 메세지 내용을 출력하려하는데, 두개 다 rosrun을 시키면 무응답이고 화면에 아무런 출력이 나오지않습니다.

그래서 rostopic을 사용하여 확인해 본 결과, 다 실행이 되는게 보이는데, 어떤점이 문제점인지 잘모르겠습니다… 아직 시작한지 2달정도 밖에 안되어 오류 찾기가 어려워 여기에 여쭤봅니다…

시뮬레이터 노드

#include <ros/ros.h>
#include <std_msgs/Float64.h>

double force = 0.0;
double mass = 1.0;
double velocity = 0.0;

void forceCmdCallback(const std_msgs::Float64::ConstPtr& msg)
{
force = msg->data;
}

int main(int argc, char** argv)
{
ros::init(argc, argv, “simulator_node”);
ros::NodeHandle nh;

ros::Subscriber force_cmd_sub = nh.subscribe("force_cmd", 10, forceCmdCallback);


ros::Publisher velocity_pub = nh.advertise<std_msgs::Float64>("velocity", 10);


ros::Rate rate(100);  
while (ros::ok())
{

    double acceleration = force / mass;


    velocity += 0.01 * acceleration;


    std_msgs::Float64 velocity_msg;
    velocity_msg.data = velocity;
    velocity_pub.publish(velocity_msg);


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

제어기 노드

#include <ros/ros.h>
#include <std_msgs/Float64.h>

double velocity_cmd = 0.0;
double velocity = 0.0;
double force_cmd = 0.0;

void velCmdCallback(const std_msgs::Float64::ConstPtr& msg)
{
velocity_cmd = msg->data;
}

void velocityCallback(const std_msgs::Float64::ConstPtr& msg)
{
velocity = msg->data;
}

int main(int argc, char** argv)
{
ros::init(argc, argv, “control_node”);
ros::NodeHandle nh;

ros::Subscriber vel_cmd_sub = nh.subscribe("vel_cmd", 10, velCmdCallback);

ros::Subscriber velocity_sub = nh.subscribe("velocity", 10, velocityCallback);

ros::Publisher force_cmd_pub = nh.advertise<std_msgs::Float64>("force_cmd", 10);

double K = 1.0;

ros::Rate rate(100); 

while (ros::ok())
{

    force_cmd = K * (velocity_cmd - velocity);

    std_msgs::Float64 force_cmd_msg;
    force_cmd_msg.data = force_cmd;
    force_cmd_pub.publish(force_cmd_msg);

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