[ROS] ros::spin, ros::spinOnce μ°¨μ΄μ 
ros::spin()κ³Ό ros::spinOnceμ μ°¨μ΄μ μ λν΄μ μ λ¦¬νλ€ 
κ²μκΈ λμ κ°λ¨ν μ½λ μμ λ₯Ό 보면μ μ΄ν΄λ₯Ό λμ! 
ros ν΅μ μμλ κΈ°λ³Έμ μΌλ‘ messageκ° ν ν½ νμμΌλ‘ subscriberμ μμ μ΄ λ  κ²½μ° κ·Έκ²μ ν(queue)μ μ μ₯νλ€ 
λ³΄ν΅ μμ μΈ‘μμ spin() λ©μλλ₯Ό μ΄μ©νμ¬ νμ μλ λ©μΈμ§λ₯Ό μ²λ¦¬νλλ‘ κ΅¬μ±μ΄ λμ΄ μλ€ 
μ΄ λ spin, spinOnce λͺ¨λ ν ν½μ subscribeν  λ ν΄λΉ callback ν¨μλ₯Ό μ€νμν€λ μν μ μννλ€ 
μ°¨μ΄μ 
무μμ΄ λ€λ₯Έκ°? 
ros::spin()
μμ£Ό μ½κ² λ§ν΄μ ros::spin()μ μΌμ’
μ 무ν 루νμ΄λ€ 
μ¦, μ΄ ν¨μκ° νΈμΆλκΈ° μ΄μ μ μ μΈλ λͺ¨λ  callback ν¨μλ₯Ό λͺ¨λ μ€ννκ³  μλ€κ³  μκ°νλ©΄ λλ€ 
μ΄ κ²½μ° λ³λμ whileλ¬Έμ μ¬μ©νμ§ μμλ λλ€ 
무ν루νμ΄λ―λ‘ ros::spin() μ΄νμ μ μΈλ λ¬Έμ₯λ€μ λ³λμ μ’
λ£ νλ‘μΈμ€κ° μκΈ° μ κΉμ§ μ€νλμ§ μμΌλ μ£Όμνμ 
ros::spinOnce
κ²½νμ ros::spin()μ λΉν΄ μ λ§ μ μ°νκ³  μμ£Ό μ¬μ©λλ λ°©λ²μΈ κ² κ°λ€ 
ros::spinOnce()λΌλ μ΄λ¦μμλ λκ»΄μ§λ― νλ² λλ€μ΄λ° λμμ€λ€ 
μ΄λ νμ¬κΉμ§ μμ²λ λͺ¨λ  callback ν¨μλ₯Ό νΈμΆνκ³  callback ν¨μμ λ€μ΄κ°λ€κ° λ°λ‘ λ€μ μ€μ λͺ
λ μ΄λ‘ λμ΄κ°λ€ 
λ°λΌμ μ΄ λ νμν κ²μ λ°λ³΅λ¬Έμ ꡬ쑰μ κ·Έ μ£ΌκΈ°λ₯Ό νμλ‘ νλ€ 
μ£ΌκΈ°λ ros::Rate() λ©μλλ₯Ό μ΄μ©ν΄μ μ μνλ€
νΉν μΌμ λ°μ΄ν°λ νμ¬ μνλ₯Ό μ ν΄μ§ μ£ΌκΈ°(e.g. 100Hz)λ‘ μ
λ°μ΄νΈ μμΌμΌν  λ μμ£Ό μ¬μ©λλ€ 
μ½λ μμ 
ros::spin()
chatcallback()μ΄λΌλ μ½λ°±ν¨μλ₯Ό 루ν μ£ΌκΈ° μμ΄ κ³μ μ€ννκ² λ€λ λ»μ΄λ€ 
int main(int argc, char **argv)
{
  ros::init(argc, argv, "listener");
  ros::Subscriber sub = n.subscribe("chat", 1, chatcallback);
  ros::spin();
  return 0;
}
ros::spinOnce()
chatcallback ν¨μμ νλ² λ€μ΄κ°λ€κ° λ€μ λμμ λ©μΈ 루νκ° 10hzλ‘ λμνλ μμ λ€ 
int main(int argc, char **argv)
{
  ros::init(argc, argv, "listener");
  ros::Subscriber sub = n.subscribe("chat", 2, chatcallback);
  ros::Rate loop_rate(10);
  while (ros::ok())
  {
      /*...TODO...*/ 
      ros::spinOnce();
      loop_rate.sleep();
  }
  return 0;
}
 
      
Leave a comment