14. ์ ์ฉํ ROS ํด ์๊ฐ
์ด๋ฒ ์๊ฐ์๋ rviz, rqt์ ๊ฐ์ด ROS์์ ์ ๊ณตํ๋ ์ฌ๋ฌ ํด๋ค์ ์๊ฐํ๊ณ ์ ํฉ๋๋ค.
๋ค์ ๋์์จ Gazebo
$ roslaunch gcamp_gazebo gazebo_world.launch
์ด๋ฒ์๋ gazebo๊ฐ ์๋, rviz๋ฅผ ์ง์ค์ ์ผ๋ก ์ดํด๋ด ์๋ค!! ๐
view ์ ํ
rviz๋ gazebo์๋ ๋ค๋ฅด๊ฒ ๋ง์ฐ์ค ํ ํด๋ฆญ์ผ๋ก ํํ์ด๋, ์ผ์ชฝ ํด๋ฆญ์ผ๋ก ํ์ ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
๋๋ถ์ด, ์ฐ์ธก ์๋จ์ view๋ฅผ ํตํด ์์ ์ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
Orbit
์ด ๊ธฐ๋ณธ์ด๋ฉฐ, ์ ๊ฒฝํ์์๋
TopDownOrtho
์ ๋๊ฐ ์ฐ์ด๋ ๊ฒ์ ๋ณด์์ต๋๋ค.
Create, Add Visualization
์ข์ธก Displays ํจ๋์ ๋ณด์๋ฉด ์ฌ๋ฌ ํญ๋ชฉ๋ค์ด ๋ณด์ด์ง์?
์ฒดํฌ๋ฐ์ค๋ค์ ํ ๊ธํ๋ฉด์ ์ด๋ค ํญ๋ชฉ์ธ์ง ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- RobotModel
- LaserScan
- PoseArray
- Camera
-
์ด๋ฐ ํ ๊ธ ๊ธฐํธ๋ฅผ ํด๋ฆญํ์ฌ ์จ๊ฒจ์ง ํญ๋ชฉ๋ค์ ์ดํด๋ด ๋๋ค.
์ต์ํ ๊ฒ์ด ๋ณด์ด๋๋ฐ์ Topic /scan?!!
- ๋ง์ต๋๋ค. publish ๋๊ณ ์๋ lidar ๋ฐ์ดํฐ ํ ํฝ ์ด๋ฆ์ ๋๋ค. ์ด๋ ๊ฒ ๋ฐ์ดํฐ ํ์๊ณผ ํ ํฝ ์ด๋ฆ์ด ๋งคํ๋์ด ์๊ฐํํด์ฃผ๋ ๊ฒ์ ๋๋ค.
- ํด๋น ํ์์ ํ ํฝ์ด ๋ค์ ์กด์ฌํ๋ค๋ฉด, ์๋ ๋ฐฉํฅ ํ์ดํ๋ฅผ ๋๋ฌ ํ ํฝ๊ฐ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
LaserScan์ Size ์์ฑ์ ๋ฐ๊ฟ๋ณด์ธ์!!
์๋์ ๊ฐ์ด point๋ค์ ํฌ๊ธฐ๊ฐ ๋ฐ๋๋ ๊ฒ์ด ๋ณด์ ๋๋ค.
์๋ก์ด display ์ถ๊ฐ
์์ ๊ฐ์ ๋ฒํผ์ ๋๋ฌ display๋ฅผ ์ถ๊ฐ, ์ ๊ฑฐ, ๋ณต์ฌ, ์ด๋ฆ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
odom ์ถ๊ฐํด๋ณด๊ธฐ
- add โ by topic โ odom โ odometry ์์ผ๋ก ํ ํฝ์ ์ ํํด์ ์ถ๊ฐํด ๋ณด์ธ์ ๐
๋นจ๊ฐ ํ์ดํ๊ฐ ๋ฒกํฐ๋ฅผ ์๋ฏธํ๋๋ฐ์, ๋ก๋ด์ ์์น์ ๋ฐฉํฅ์ ํํํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ ธ๋ ๋ถ๋ถ์ covariance๋ก odom์ ์ ๋ขฐ๋๋ฅผ ํ์ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ์์์๋ก ์ข์ ๊ฐ์ ๋๋ค.
rviz์๋ By display type / By Topic์ ๋๊ฐ์ง add option์ ์ ๊ณตํฉ๋๋ค.
tf๋ tranformation์ ์ฝ์๋ก ๋ก๋ด์ ๊ฐ ๋ถ๋ถ๋ค์ด ์ฐ๊ฒฐ๋ joint๋ค์ ํ์ธํ ์ ์๋ต๋๋ค.
roslaunch๋ก rviz ์คํํ๊ธฐ
rviz ๋ํ ros node์
๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ด
rosnode list
์คํ ์ ์กฐํํ ์ ์์ต๋๋ค.
$ rosnode list
/gazebo
/gazebo_gui
/joint_state_publisher
/robot_state_publisher
/rosout
/rviz_1611581303228680334
๋น์ฐํ ๋ค์๊ณผ ๊ฐ์ด rosrun
์ผ๋ก ์คํ ์ํฌ ์๋
์์ง์, ์ถ๊ฐ์ ์ผ๋ก rviz๋ผ๊ณ ๋ง ์
๋ ฅํด๋ ์คํ๋ฉ๋๋ค.
$ rosrun rviz rviz
or
$ rviz
์ฒ์ ์์ ์์ roslaunch ์คํ ์ rviz๋ ๊ฐ์ด ์คํ๋์๋๋ฐ์, ๋ค์๊ณผ ๊ฐ์ด launch ํ์ผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ ๋ค์ด๊ฐ๋ .rviz ํ์ผ์ ์ค์ ์ ๋ชจ๋ ์ ์ฅํ ํ์ผ์ ๋๋ค.
<!-- Spawn My Robot -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -param robot_description -model $(arg model_name)
-x $(arg x) -y $(arg y) -z $(arg z)
-R $(arg roll) -P $(arg pitch) -Y $(arg yaw)"/>
<!--launch rviz-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(arg dollar)$(arg path)/rviz/tinybot.rviz"/>
</launch>
- tinybot.rviz (
yaml
์ ํ์์ ๊ฐ์ต๋๋ค.)
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
Splitter Ratio: 0.5
Tree Height: 155
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.5886790156364441
rqt
rqt๋ ๋ค์ํ gui ํ๋ก๊ทธ๋จ๋ค์ ์งํฉ์
๋๋ค. ๊ฐ์ฅ ๋จผ์ , ์ด์ ์ ์ฌ์ฉํด๋ณด์๋
rqt_graph
๊ฐ ์์ต๋๋ค.
์ด๋ฒ์๋ ๊ทธ๋ฅ rqt๋ฅผ ์ ๋ ฅํด ๋ณด๊ฒ ์ต๋๋ค.
์๋จ์ pulgins๋ฅผ ์ ํํ๋ฉด, ์๋ง์ rqt ๋๊ตฌ๋ค์ด ๋ณด์ด๋๋ฐ์. ๋ชจ๋ ๋ค๋ฃจ์ง๋ ์๊ณ , topic publisher ์ topic monitor์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์๋ฅผ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๊ตฌ์ฑํด ์ฃผ์ธ์!
- pulgins โ topics โ Message Publisher
- pulgins โ topics โ Topic Monitor
์ฝ๋ฉ ์์ด Message Publisher๋ก cmd_vel์ ์ง์ ํ์ฌ publish ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!!
์ด์ ์๋ฎฌ๋ ์ด์ ์ ๊บผ๋ณด๊ณ , topic Monitor๋ฅผ ์ดํผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ์ฝ๋ฉ ์์ด rqt๋ฅผ ์ฌ์ฉํด์ topic publish, monitoring์ ํ ์ ์๋ต๋๋ค ๐
rqt_plot
์์น ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ rqt_plot์ด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
plugin โ visualization โ plot
/cmd_vel/linear๋ฅผ ๊ฐ์ง๊ณ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐
๊ฐ๋ก, ์ธ๋ก ๋ฒ์๋ฅผ ์ ์ง์ ํด์ฃผ์ด์ผ ๊ทธ๋ํ๊ฐ ๋ณด๊ธฐ ์ฝ์ต๋๋ค. ์ด๊ฒ์ Figure Option์์ ์ค์ ํ ์ ์์ต๋๋ค.
๊ทธ ๋ฐ์๋ ์๋ง์ rqt ๋๊ตฌ๋ค์ด ์๋๋ฐ์, ๋ชจ๋ ์ดํด๋ณด๋ ๋์ ๋งํฌ๋ก ๋์ฒดํ๊ฒ ์ต๋๋ค.
์ ์ฉํ ํด๋ค์ด ์ ๋ง ๋ง์๋ฐ, ๋ชจ๋ ์๊ฐ์์ผ๋๋ฆฌ์ง ๋ชปํด์ ์์ฌ์ธ ์ ๋๋ค์ ๐ข ์์ผ๋ก ์คํ์์ค ํจํค์ง๋ค์ ๋ถ์ํ๋ฉด์, rqt์ ๊ฐ๋ ฅํ ์๊ฐํ ๋๊ตฌ๋ค์ ์ ๊ทน ์ฌ์ฉํ๊ธฐ์ค ๊ถ์ฅํฉ๋๋ค.