...
POST No. 2591800
pick and place랑 master_slave 예제 코드 질문입니다.
2022-02-23 16:00:32 n163663707802425

pick and place 예제코드와 master slave 예제를 하나하나 보고 있는 중에 궁금한 것이 있어서 질문을 드립니다.

두 부분의 마지막에 있는 메인함수의 형태는 이러합니다

 

[pick and palce]

int main(int argc, char **argv)

{

  // Init ROS node

  ros::init(argc, argv, "open_manipulator_pick_and_place");

  ros::NodeHandle node_handle("");

 

  OpenManipulatorPickandPlace open_manipulator_pick_and_place;

 

  ros::Timer publish_timer = node_handle.createTimer(ros::Duration(0.100)/*100ms*/, &OpenManipulatorPickandPlace::publishCallback, &open_manipulator_pick_and_place);

 

  while (ros::ok())

  {

    ros::spinOnce();

  }

  return 0;

}

 

[master and slave]

 int main(int argc, char **argv)

{

  // Init ROS node

  ros::init(argc, argv, "open_manipulator_master_slave");

  ros::NodeHandle node_handle("");


  std::string usb_port = "/dev/ttyUSB0";

  std::string baud_rate = "1000000";


  if (argc < 3)

  {

    log::error("Please set '-port_name' and  '-baud_rate' arguments for connected Dynamixels");

    return 0;

  }

  else

  {

    usb_port = argv[1];

    baud_rate = argv[2];

  }


  OpenManipulatorMaster open_manipulator_master(usb_port, baud_rate);


  ros::Timer publish_timer = node_handle.createTimer(ros::Duration(open_manipulator_master.getServiceCallPeriod()), &OpenManipulatorMaster::publishCallback, &open_manipulator_master);


  while (ros::ok())

  {

    ros::spinOnce();

  }

  return 0;

}


이 부분에서

공통적으로  ros::Timer publish_timer = node_handle.createTimer 이 부분이 있는 부분의 명령어가 잘 이해가 가지 않습니다. 

 

ros::Timer publish_timer = node_handle.createTimer(ros::Duration(0.100)/*100ms*/, &OpenManipulatorPickandPlace::publishCallback, &open_manipulator_pick_and_place); 

 ros::Timer publish_timer = node_handle.createTimer(ros::Duration(open_manipulator_master.getServiceCallPeriod()), &OpenManipulatorMaster::publishCallback, &open_manipulator_master);


이 두 명령어는 어떻게 운영이 되고 저기안에 있는 변수들에 대해서 어떻게 운영이 되는 지 무엇을 의미하는 건지 알려주실 수 있으신가요?

 

추가적으로 ros::Timer publish_timer = node_handle.createTimer 이 명령어의 역할도 알려주시면 감사하겠습니다.

 

그리고 마지막 질문인데 ros자체를 반복되게 하는 명령어가  

  while (ros::ok())

  {

    ros::spinOnce();

  }

이 부분인가요? 아니면 ros cpp 파일 자체에 loop기능이 있는건가요?

2022-02-23 16:00:32
n163663707802425
2022-02-24 10:50:24 유기웅

안녕하세요.

 

코드 관련으로는 따로 설명을 해드리기 어렵습니다.

 

ROS.Wiki의 Timer 관련 내용입니다. 참고해주세요.

 

기본적으로 터틀봇3는 ROS 기반으로 ROS.Wiki를 참고하시면 됩니다.

 

감사합니다. 

2022-02-24 10:50:24
ykw4463