[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