TartleBot3 のシミュレーション環境を使います。
カメラはデフォルトで搭載されている深度カメラと、新規にWebカメラを試してみます。
デフォルトのカメラ機能の確認
TurtleBot3には深度カメラ(Intel RealSense R200)が搭載され、Gazebo のPlugin も用意されています。仮想空間(World)の中の風景がどんな風に見えるのか確認してみます。
その前に、ここで使うmy_room.worldは壁以外何もない空間なのでいくつかアセットを追加しておきます。
追加の方法は2/5のAppendixをご参照ください、
TurtleBot3 でGazebo 起動
1 |
roslaunch turtlebot3_gazebo turtlebot3_my_room.launch |
こんな感じで、仮想空間にinsertしておきます(人、椅子、コーラ缶)。
どの地図を使うのか決めます。4/5 の hector slam で作った地図を使ってみます。
navigationを起動します。
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/maps/my_room_hector_map.yaml
カメラ画像
Addー>By topicでRGBカメラの画像をみてみます。
左下に見えるのがRGBカメラ画像です。
Overlay Alpha の値を1
Zoom Factor の値を2
に設定すると見やすくなります。
2D Nav Goal で移動させてみます。隣室の右上にGoalを設定。移動するに従ってカメラ視野にアセットが見えます。
YOLO で物体認識
AI の物体認識でよく使われるYOLO はROS にも対応しています。
ナビゲーション環境で使ってみます。
インストール
1 2 3 4 5 6 7 8 9 |
cd ~/catkin_ws/src/ git clone --recursive https://github.com/leggedrobotics/darknet_ros.git cd ~/catkin_ws catkin_make source devel/setup.bash |
catkin_makeでcv_bridge のエラーになった場合
findなどでopencv2を探して、リンクを張っておきます
sudo ln -s /usr/include/opencv4/opencv2/ /usr/include/opencv
再度 catkin_make。
こういう部屋の中を認識させてみます。
Gazebo を起動して物品(アセット)追加
1 |
roslaunch turtlebot3_gazebo turtlebot3_my_room.launch |
navigationを起動
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/maps/my_room_hector_map.yaml
YOLOスタート
1 |
roslaunch darknet_ros darknet_ros.launch |
左上がYOLOのwindowです。teleopでロボットを回転させてみます。Person とChairは比較的よく認識されています。
Web カメラ を使う場合
RealSense R200 の代わりに安価なUSB Webカメラを使ってみます。
簡単なweb-cam daeファイルを以下のフォルダーにコピー
/opt/ros/melodic/share/turtlebot3_description/meshes/sensors
以下の2つのファイルを編集可能にしておきます。
1 2 3 |
sudo chmod 666 /opt/ros/melodic/share/turtlebot3_description/urdf/turtlebot3_waffle.urdf.xacro sudo chmod 666 /opt/ros/melodic/share/turtlebot3_description/urdf/turtlebot3_waffle.gazebo.xacro |
turtlebot3_waffle.gazebo.xacroを開いて、<gazebo reference=”camera_rgb_frame”>タグをまるごと削除するか、コメントアウトしておきます。
で、以下を追加
webカメラ用のPlugin はlibgazebo_ros_camera.soです(デフォルトでインストールされています)。
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 43 |
<gazebo reference="webcam_front_link"> <material>Gazebo/White</material> <visualize>true</visualize> <turnGravityOff>false</turnGravityOff> <sensor type="camera" name="webcam_front_camera"> <update_rate>10.0</update_rate> <camera name="webcam_front_camera"> <pose>0.025 0 0 0 0 0}</pose> <horizontal_fov>1.3962634</horizontal_fov> <image> <width>800</width> <height>600</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip> <noise> <type>gaussian</type> <mean>0.0</mean> <stddev>0.007</stddev> </noise> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <alwaysOn>true</alwaysOn> <updateRate>0.0</updateRate> <cameraName>webcam_front_camera</cameraName> <imageTopicName>image_raw</imageTopicName> <cameraInfoTopicName>camera_info</cameraInfoTopicName> <frameName>webcam_front_link</frameName> <hackBaseline>0.0</hackBaseline> <distortionK1>0.0</distortionK1> <distortionK2>0.0</distortionK2> <distortionK3>0.0</distortionK3> <distortionT1>0.0</distortionT1> <distortionT2>0.0</distortionT2> </plugin> </sensor> </gazebo> |
turtlebot3_waffle.urdf.xacroを開いて、後半にあるcamera関連のjoint、linkタグをまるごと削除するかコメントアウトしておきます。
で、以下を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<joint name="webcam_joint" type="fixed"> <origin xyz="0.064 0.0 0.10" rpy="0 0 0"/> <parent link="base_link"/> <child link="webcam_front_link"/> </joint> <link name="webcam_front_link"> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://turtlebot3_description/meshes/sensors/web-cam.dae" scale="0.6 0.6 0.6"/> </geometry> </visual> <collision> <origin xyz="0.003 0.065 0.007" rpy="0 0 0"/> <geometry> <box size="0.012 0.132 0.020"/> </geometry> </collision> </link> |
上記と同様にGazebo を起動してアセットを追加しておきます。
1 2 |
export TURTLEBOT3_MODEL=waffle roslaunch turtlebot3_gazebo turtlebot3_my_room.launch |
Rviz 起動
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/maps/my_room_hector_map.yaml
Addー>By topic で/webcam_front_camera の/image_raw でCameraを選択
カメラ画像を確認できます(YOLOを使う場合、必ずしも必要というわけではないです)。
また、YOLOで物体認識させる場合
darknet_ros.launchを編集
1 2 3 |
cd ~/catkin_ws/src/darknet_ros/darknet_ros/launch sudo nano darknet_ros.launch |
<arg name=”image” default=”/camera/rgb/image_raw” /> を削除するかコメントアウトして、以下を追加
1 |
<arg name="image" default="/webcam_front_camera/image_raw" /> |
で、YOLOを起動します。
1 |
roslaunch darknet_ros darknet_ros.launch |
逆にturtlebot3_waffle.gazebo.xacroでcamera/rgbを記述してもいいかも。
Appendix
YOLO はV2、V3がインストールされいます。
darknet_ros.launchではV2が使われているようです。
V3を使う場合は、
roslaunch darknet_ros yolo_v3.launch
で起動します。
独自にトレーニングした場合、weightsファイルとcfgファイルの保存場所は…
~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights
~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/cfg
yamlファイル
~/catkin_ws/src/darknet_ros/darknet_ros/config
Leave a Reply