このページの記述は上記の続きです。
こういう仮想空間の地図を作ってみます。
gmapping slamを使います。
以下をインストールしておきます。
1 2 3 |
sudo apt-get install ros-melodic-slam-gmapping sudo apt-get install ros-melodic-map-server -y |
launchディレクトリへ移動して、 launchファイルを作ります。
1 2 3 |
cd ~/catkin_ws/src/my_robot/launch sudo nano my_robot_slam.launch |
Gazebo とRviz を起動させます。Rvizのconfigファイル(my_robot_slam.rviz)はまだないですが、ダミーで入れておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find my_robot)/worlds/my_room.world"/> </include> <arg name="gui" default="True"/> <param name="robot_description" command="$(find xacro)/xacro $(find my_robot)/urdf/my_robot.urdf.xacro"/> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" args="-urdf -model my_robot -param robot_description"/> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"> <param name="base_frame" value="base_footprint"/> <param name="odom_frame" value="odom"/> <param name="map_frame" value="map"/> <param name="map_update_interval" value="1.0"/> <param name="linearUpdate" value="1.0"/> <param name="angularUpdate" value="0.2"/> <param name="temporalUpdate" value="1.0"/> <param name="maxUrange" value="3.0"/> <param name="maxRange" value="8.0"/> <param name="xmin" value="-10.0"/> <param name="ymin" value="-10.0"/> <param name="xmax" value="10.0"/> <param name="ymax" value="10.0"/> <param name="delta" value="0.05"/> <param name="particles" value="100"/> <param name="minimumScore" value="50"/> </node> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/> <remap from="joint_states" to="/my_robot/joint_states" /> <node pkg="rviz" type="rviz" name="rviz" required="true" args="-d $(find my_robot)/config/my_robot_slam.rviz"/> </launch> |
起動します。
1 |
roslaunch my_robot my_robot_slam.launch |
ロボット制御用に別ターミナルでteleoperationも起動、前面でフォーカスしておきます。
1 |
rosrun teleop_twist_keyboard teleop_twist_keyboard.py |
最初はRvizには何も表示されていません。AddでロボットとLaser、Mapを表示します。
左下のAddをクリック
By display type タブでRobotModel を選択
FixedFrame は他のbase_footprint などを選んでもいいのですが、それだとロボット制御で回転させるとRvizでは地図自体が回転して違和感があるので、ここはmapのままにしておきます。
Add −> By display type タブでLaserScanを選択
topicで/scanを指定
Add −> By display type タブでMapを選択
topicで/mapを指定
teleoperationでロボットを移動させて地図を完成させます。
地図が完成したら、新しいフォルダーを作って保存します(例 : my_room_world_map)。
保存
1 2 3 |
mkdir ~/maps rosrun map_server map_saver -f ~/maps/my_room_world_map |
作成されるファイルは2種類です。
my_room_world_map.yaml
my_room_world_map.pgm
yamlはテキストファイル、pgmは画像ファイルです。
画像によごれのようなものがあればGIMPなどで消去できます。
Leave a Reply