Topics subscription - modulabs/gazebo-tutorial GitHub Wiki
Gazebo๋ ๋ณ๋์ ํ๋ก๊ทธ๋จ์ด Gazebo์์ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ TCP / IP ์์ผ์์ ํต์ ํฉ๋๋ค. Boost ASIO๋ Gazebo์์ ํต์ ๋ ์ด์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ Google Protobufs๋ ๋ฉ์์ง ์ ๋ฌ ๋ฐ ์ง๋ ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์์ง๋ ๊ฒ์์๋ฅผ ํตํด ์ฃผ์ ๋ผ๋ ์ด๋ฆ์ ์ฑ๋์ ํตํด ์ ์ก๋ฉ๋๋ค. ์ฃผ์ ์ ๋ฐ๋ํธ์๋ ๋ฉ์์ง๊ฐ ๋์ฐฉํ ๋ ์ฝ๋ฐฑ์ ์์ ํ๋ ๊ฐ์ ์๊ฐ ์์ต๋๋ค. ์์ฝํ๋ฉด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ค๋ฉด ์ง์ ๋ ์ฃผ์ ์ ๊ฒ์์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๊ณ ๊ตฌ๋ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ช ๋ ์ฃผ์ ์ ๊ฐ์ ํด์ผํ๋ ๋ฉ์์ง๋ฅผ ์์ ํด์ผํฉ๋๋ค.
TCP / IP ์์ผ์ ํตํด Gazebo์ ํต์ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ Gazebo ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ ๊ณต๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
Gazebo ์ ์ก ์์คํ ์ ์ฌ๊ธฐ์ ์ค๋ช ๋์ด ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๋ฉ์์ง๊ฐ ์ค๋ช ๋์ด ์์ต๋๋ค.
์คํ์ค์ธ ์์คํ ์์ ์ฌ์ฉ์ค์ธ ๋ชจ๋ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ค์ ๋ช ๋ น์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค (Gazebo๊ฐ ๋จผ์ ์คํ๋๊ณ ์๋์ง ํ์ธํ์ญ์์ค).
gz topic -l
์ด ์๋ WorldStatistics ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ๊ณ Gazebo์ ์ฐ๊ฒฐํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ฒซ์งธ, debian์์ Gazebo๋ฅผ ์ค์นํ๋ค๋ฉด, Gazebo ๊ฐ๋ฐ ํ์ผ์ ์ค์นํ๋์ง ํ์ธํ์ญ์์ค. ์์ค์์ Gazebo๋ฅผ ์ค์น ํ ๊ฒฝ์ฐ์ด ๋จ๊ณ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค. X๋ฅผ ๋น์ ์ด ๊ฐ์ง๊ณ ์๋ Gazebo์ ์ด๋ค ๋ฒ์ ๋ฒํธ๋ก ๋ฐ๊พธ์ญ์์ค.
sudo apt-get install libgazeboX-dev
listener.cc์ CMakeLists.txt๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ํ ๋๋ ํ ๋ฆฌ์ listener ํด๋์ ๋ฃ์ ๋ค์ ์์ ๋ฅผ ์ปดํ์ผํ์ญ์์ค.
mkdir ~/listener
cd ~/listener
wget https://bitbucket.org/osrf/gazebo/raw/default/examples/stand_alone/listener/listener.cc
wget https://bitbucket.org/osrf/gazebo/raw/default/examples/stand_alone/listener/CMakeLists.txt
mkdir build
cd build
cmake ..
make
Gazebo์ ์ธ์คํด์ค๊ฐ ์ด๋ฏธ ์คํ ์ค์ผ ๋ ๋ฆฌ์ค๋ ํ๋ก๊ทธ๋จ์ ์คํํ์ญ์์ค. cd ~/listener/build ./listener
์ถ๋ ฅ์ ๋ค์๊ณผ ์ ์ฌํด์ผํฉ๋๋ค.
sim_time {
sec: 1104
nsec: 855000000
}
pause_time {
sec: 0
nsec: 0
}
real_time {
sec: 1108
nsec: 263362269
}
paused: false
iterations: 1104855
sim_time {
sec: 1105
nsec: 55000000
}
pause_time {
sec: 0
nsec: 0
}
real_time {
sec: 1108
nsec: 464165998
}
paused: false
iterations: 1105055
Gazebo๋ฅผ ๋ก๋ํ๊ณ ์ ์ก ์์คํ ์ ์คํํ์ญ์์ค.
gazebo::setupClient(_argc, _argv);
๋ค์์ผ๋ก ๊ฒ์์์ ๊ฐ์ ์๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ ธ๋๋ฅผ ๋ง๋ญ๋๋ค.
gazebo::transport::NodePtr node(new gazebo::transport::Node());
node->Init();
''world_stats ''์ฃผ์ ์ ๊ตฌ๋ ์๋ฅผ ์์ฑํ์ญ์์ค. Gazebo๋์ด ์ฃผ์ ์ ๋ํ ์ผ๋ จ์ ํต๊ณ๋ฅผ ๊ฒ์ํฉ๋๋ค.
gazebo::transport::SubscriberPtr sub = node->Subscribe("~/world_stats", cb);
์ด์ ์ค์์ cb๋ฅผ ํธ์ถ ํ ์ฝ์์ ๋ฉ์์ง๋ฅผ ์ธ์ํ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ง๋ค์ด์ผํฉ๋๋ค.
void cb(ConstWorldStatisticsPtr &_msg)
{
std::cout << _msg->DebugString();
}
์ด ์์ ์์ ๋ฉ์์ง๊ฐ ๋ค์ด์ค๋ ๋์ ๋๊ธฐ ๋ฃจํ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผํด์ผํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ๋๊ธฐ ๋ฃจํ์ ๋๋ค.
while (true)
gazebo::common::Time::MSleep(10);
์์ ์ด ์๋ฃ๋๋ฉด ์ ์ก ์์คํ ์ ๋ง๋ฌด๋ฆฌํ์ญ์์ค.
gazebo::shutdown();