スキップしてメイン コンテンツに移動

Aruco AR marker detector library (ROS noetic)


https://github.com/pal-robotics/aruco_ros

https://www.sciencedirect.com/science/article/abs/pii/S0031320314000235

hpc@hpc-ubuntu:~$ mkdir -p ~/catkin_aruco/src
hpc@hpc-ubuntu:~$ cd ~/catkin_aruco/
hpc@hpc-ubuntu:~/catkin_aruco$ cd src
hpc@hpc-ubuntu:~/catkin_aruco/src$ git clone https://github.com/pal-robotics/aruco_ros.git
Cloning into 'aruco_ros'...
remote: Enumerating objects: 1067, done.
remote: Counting objects: 100% (221/221), done.
remote: Compressing objects: 100% (75/75), done.
remote: Total 1067 (delta 151), reused 186 (delta 145), pack-reused 846
Receiving objects: 100% (1067/1067), 746.65 KiB | 2.28 MiB/s, done.
Resolving deltas: 100% (636/636), done.

hpc@hpc-ubuntu:~/catkin_aruco$ catkin_make
Base path: /home/hpc/catkin_aruco
Source space: /home/hpc/catkin_aruco/src
Build space: /home/hpc/catkin_aruco/build
Devel space: /home/hpc/catkin_aruco/devel
Install space: /home/hpc/catkin_aruco/install
Creating symlink "/home/hpc/catkin_aruco/src/CMakeLists.txt" pointing to "/opt/ros/noetic/share/catkin/cmake/toplevel.cmake"
####
#### Running command: "cmake /home/hpc/catkin_aruco/src -DCATKIN_DEVEL_PREFIX=/home/hpc/catkin_aruco/devel -DCMAKE_INSTALL_PREFIX=/home/hpc/catkin_aruco/install -G Unix Makefiles" in "/home/hpc/catkin_aruco/build"
####
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /home/hpc/catkin_aruco/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/noetic
-- This workspace overlays: /opt/ros/noetic
-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3")
-- Using PYTHON_EXECUTABLE: /usr/bin/python3
-- Using Debian Python package layout
-- Found PY_em: /usr/lib/python3/dist-packages/em.py  
-- Using empy: /usr/lib/python3/dist-packages/em.py
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/hpc/catkin_aruco/build/test_results
-- Forcing gtest/gmock from source, though one was otherwise available.
-- Found gtest sources under '/usr/src/googletest': gtests will be built
-- Found gmock sources under '/usr/src/googletest': gmock will be built
-- Found PythonInterp: /usr/bin/python3 (found version "3.8.10")
-- Found Threads: TRUE  
-- Using Python nosetests: /usr/bin/nosetests3
-- catkin 0.8.10
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing 3 packages in topological order:
-- ~~  - aruco_msgs
-- ~~  - aruco
-- ~~  - aruco_ros
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'aruco_msgs'
-- ==> add_subdirectory(aruco_ros/aruco_msgs)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- aruco_msgs: 2 messages, 0 services
-- +++ processing catkin package: 'aruco'
-- ==> add_subdirectory(aruco_ros/aruco)
-- Found OpenCV: /usr (found suitable version "4.2.0", minimum required is "4.2.0")
-- +++ processing catkin package: 'aruco_ros'
-- ==> add_subdirectory(aruco_ros/aruco_ros)
-- Found OpenCV: /usr (found version "4.2.0")
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hpc/catkin_aruco/build
####
#### Running command: "make -j14 -l14" in "/home/hpc/catkin_aruco/build"
####
Scanning dependencies of target std_msgs_generate_messages_eus
Scanning dependencies of target _aruco_msgs_generate_messages_check_deps_MarkerArray
Scanning dependencies of target _aruco_msgs_generate_messages_check_deps_Marker
Scanning dependencies of target std_msgs_generate_messages_py
Scanning dependencies of target geometry_msgs_generate_messages_eus
Scanning dependencies of target std_msgs_generate_messages_lisp
Scanning dependencies of target geometry_msgs_generate_messages_lisp
Scanning dependencies of target geometry_msgs_generate_messages_py
Scanning dependencies of target std_msgs_generate_messages_cpp
Scanning dependencies of target std_msgs_generate_messages_nodejs
Scanning dependencies of target geometry_msgs_generate_messages_cpp
Scanning dependencies of target aruco
Scanning dependencies of target geometry_msgs_generate_messages_nodejs
Scanning dependencies of target actionlib_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_py
[  0%] Built target geometry_msgs_generate_messages_py
[  0%] Built target geometry_msgs_generate_messages_lisp
[  0%] Built target geometry_msgs_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_cpp
[  0%] Built target std_msgs_generate_messages_nodejs
[  0%] Built target actionlib_generate_messages_eus
[  0%] Built target geometry_msgs_generate_messages_cpp
[  0%] Built target geometry_msgs_generate_messages_nodejs
Scanning dependencies of target visualization_msgs_generate_messages_py
[  0%] Built target std_msgs_generate_messages_lisp
Scanning dependencies of target visualization_msgs_generate_messages_nodejs
Scanning dependencies of target aruco_ros_gencfg
Scanning dependencies of target visualization_msgs_generate_messages_lisp
Scanning dependencies of target visualization_msgs_generate_messages_eus
Scanning dependencies of target tf2_msgs_generate_messages_py
Scanning dependencies of target tf2_msgs_generate_messages_nodejs
Scanning dependencies of target tf2_msgs_generate_messages_lisp
[  0%] Built target visualization_msgs_generate_messages_py
Scanning dependencies of target actionlib_msgs_generate_messages_nodejs
[  2%] Generating dynamic reconfigure files from cfg/ArucoThreshold.cfg: /home/hpc/catkin_aruco/devel/include/aruco_ros/ArucoThresholdConfig.h /home/hpc/catkin_aruco/devel/lib/python3/dist-packages/aruco_ros/cfg/ArucoThresholdConfig.py
[  2%] Built target visualization_msgs_generate_messages_nodejs
Scanning dependencies of target actionlib_generate_messages_py
[  2%] Built target visualization_msgs_generate_messages_lisp
[  2%] Built target visualization_msgs_generate_messages_eus
Scanning dependencies of target actionlib_msgs_generate_messages_lisp
[  2%] Built target tf2_msgs_generate_messages_py
[  2%] Built target tf2_msgs_generate_messages_nodejs
[  2%] Built target tf2_msgs_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_nodejs
[  2%] Built target actionlib_msgs_generate_messages_nodejs
[  2%] Built target actionlib_generate_messages_py
Scanning dependencies of target sensor_msgs_generate_messages_lisp
Scanning dependencies of target dynamic_reconfigure_generate_messages_eus
[  2%] Built target _aruco_msgs_generate_messages_check_deps_Marker
Scanning dependencies of target dynamic_reconfigure_gencfg
[  2%] Built target actionlib_msgs_generate_messages_lisp
[  2%] Built target _aruco_msgs_generate_messages_check_deps_MarkerArray
Scanning dependencies of target sensor_msgs_generate_messages_nodejs
Scanning dependencies of target dynamic_reconfigure_generate_messages_lisp
Scanning dependencies of target dynamic_reconfigure_generate_messages_py
[  2%] Built target actionlib_generate_messages_nodejs
Scanning dependencies of target sensor_msgs_generate_messages_py
Scanning dependencies of target rosgraph_msgs_generate_messages_py
Scanning dependencies of target dynamic_reconfigure_generate_messages_cpp
[  2%] Built target dynamic_reconfigure_generate_messages_eus
[  2%] Built target sensor_msgs_generate_messages_lisp
Scanning dependencies of target tf_generate_messages_lisp
[  2%] Built target dynamic_reconfigure_gencfg
Scanning dependencies of target roscpp_generate_messages_cpp
[  2%] Built target sensor_msgs_generate_messages_nodejs
[  2%] Built target dynamic_reconfigure_generate_messages_py
[  2%] Built target dynamic_reconfigure_generate_messages_lisp
Scanning dependencies of target sensor_msgs_generate_messages_eus
[  2%] Built target sensor_msgs_generate_messages_py
[  2%] Built target rosgraph_msgs_generate_messages_py
[  2%] Built target dynamic_reconfigure_generate_messages_cpp
Scanning dependencies of target roscpp_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_lisp
[  2%] Built target tf_generate_messages_lisp
[  2%] Built target roscpp_generate_messages_cpp
Scanning dependencies of target tf2_msgs_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_eus
Scanning dependencies of target dynamic_reconfigure_generate_messages_nodejs
Scanning dependencies of target sensor_msgs_generate_messages_cpp
[  2%] Built target sensor_msgs_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_nodejs
[  2%] Built target roscpp_generate_messages_lisp
[  2%] Built target actionlib_generate_messages_lisp
Scanning dependencies of target rosgraph_msgs_generate_messages_cpp
[  2%] Built target tf2_msgs_generate_messages_eus
Scanning dependencies of target rosgraph_msgs_generate_messages_eus
[  2%] Built target roscpp_generate_messages_eus
Scanning dependencies of target tf_generate_messages_eus
Scanning dependencies of target tf2_msgs_generate_messages_cpp
[  2%] Built target sensor_msgs_generate_messages_cpp
[  2%] Built target dynamic_reconfigure_generate_messages_nodejs
Scanning dependencies of target roscpp_generate_messages_py
[  2%] Built target roscpp_generate_messages_nodejs
Scanning dependencies of target actionlib_msgs_generate_messages_eus
Scanning dependencies of target tf_generate_messages_py
Scanning dependencies of target rosgraph_msgs_generate_messages_lisp
[  2%] Built target rosgraph_msgs_generate_messages_cpp
[  2%] Built target rosgraph_msgs_generate_messages_eus
[  2%] Built target tf_generate_messages_eus
Scanning dependencies of target tf_generate_messages_cpp
[  2%] Built target tf2_msgs_generate_messages_cpp
Scanning dependencies of target actionlib_msgs_generate_messages_py
[  2%] Built target roscpp_generate_messages_py
Scanning dependencies of target rosgraph_msgs_generate_messages_nodejs
Scanning dependencies of target tf_generate_messages_nodejs
[  2%] Built target actionlib_msgs_generate_messages_eus
[  2%] Built target tf_generate_messages_py
[  2%] Built target rosgraph_msgs_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_cpp
Scanning dependencies of target visualization_msgs_generate_messages_cpp
[  2%] Built target tf_generate_messages_cpp
Scanning dependencies of target actionlib_msgs_generate_messages_cpp
Scanning dependencies of target aruco_msgs_generate_messages_eus
[  2%] Built target actionlib_msgs_generate_messages_py
Generating reconfiguration files for ArucoThreshold in aruco_ros
Scanning dependencies of target aruco_msgs_generate_messages_py
[  2%] Built target rosgraph_msgs_generate_messages_nodejs
Wrote header file in /home/hpc/catkin_aruco/devel/include/aruco_ros/ArucoThresholdConfig.h
[  2%] Built target tf_generate_messages_nodejs
Scanning dependencies of target aruco_msgs_generate_messages_lisp
Scanning dependencies of target aruco_msgs_generate_messages_nodejs
Scanning dependencies of target aruco_msgs_generate_messages_cpp
[  2%] Built target actionlib_generate_messages_cpp
[  2%] Built target actionlib_msgs_generate_messages_cpp
[  2%] Built target visualization_msgs_generate_messages_cpp
[  8%] Generating EusLisp code from aruco_msgs/MarkerArray.msg
[  8%] Generating EusLisp code from aruco_msgs/Marker.msg
[ 10%] Generating EusLisp manifest code for aruco_msgs
[ 13%] Generating Python from MSG aruco_msgs/Marker
[ 16%] Generating Python from MSG aruco_msgs/MarkerArray
[ 29%] Generating C++ code from aruco_msgs/Marker.msg
[ 29%] Generating Lisp code from aruco_msgs/MarkerArray.msg
[ 29%] Generating Javascript code from aruco_msgs/Marker.msg
[ 29%] Generating C++ code from aruco_msgs/MarkerArray.msg
[ 29%] Generating Javascript code from aruco_msgs/MarkerArray.msg
[ 32%] Generating Lisp code from aruco_msgs/Marker.msg
[ 32%] Built target aruco_ros_gencfg
[ 35%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/debug.cpp.o
[ 37%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/cvdrawingutils.cpp.o
[ 43%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/dictionary.cpp.o
[ 43%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/ippe.cpp.o
[ 43%] Built target aruco_msgs_generate_messages_lisp
[ 45%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/cameraparameters.cpp.o
[ 48%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/marker.cpp.o
[ 54%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/markerdetector.cpp.o
[ 54%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/markerlabeler.cpp.o
[ 54%] Built target aruco_msgs_generate_messages_nodejs
[ 56%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/markermap.cpp.o
[ 59%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/posetracker.cpp.o
[ 59%] Built target aruco_msgs_generate_messages_cpp
[ 62%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/markerlabelers/dictionary_based.cpp.o
[ 64%] Building CXX object aruco_ros/aruco/CMakeFiles/aruco.dir/src/aruco/markerlabelers/svmmarkers.cpp.o
[ 67%] Generating Python msg __init__.py for aruco_msgs
[ 67%] Built target aruco_msgs_generate_messages_py
[ 67%] Built target aruco_msgs_generate_messages_eus
Scanning dependencies of target aruco_msgs_generate_messages
[ 67%] Built target aruco_msgs_generate_messages
[ 70%] Linking CXX shared library /home/hpc/catkin_aruco/devel/lib/libaruco.so
[ 70%] Built target aruco
Scanning dependencies of target double
Scanning dependencies of target marker_publisher
Scanning dependencies of target aruco_ros_utils
Scanning dependencies of target single
[ 72%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/aruco_ros_utils.dir/src/aruco_ros_utils.cpp.o
[ 75%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/single.dir/src/simple_single.cpp.o
[ 78%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/single.dir/src/aruco_ros_utils.cpp.o
[ 81%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/marker_publisher.dir/src/marker_publish.cpp.o
[ 83%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/marker_publisher.dir/src/aruco_ros_utils.cpp.o
[ 86%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/double.dir/src/aruco_ros_utils.cpp.o
[ 89%] Building CXX object aruco_ros/aruco_ros/CMakeFiles/double.dir/src/simple_double.cpp.o
[ 91%] Linking CXX shared library /home/hpc/catkin_aruco/devel/lib/libaruco_ros_utils.so
[ 91%] Built target aruco_ros_utils
[ 94%] Linking CXX executable /home/hpc/catkin_aruco/devel/lib/aruco_ros/marker_publisher
[ 97%] Linking CXX executable /home/hpc/catkin_aruco/devel/lib/aruco_ros/double
[ 97%] Built target marker_publisher
[ 97%] Built target double
[100%] Linking CXX executable /home/hpc/catkin_aruco/devel/lib/aruco_ros/single
[100%] Built target single

 

# launch camera(intel realsense D455)

hpc@hpc-ubuntu:~$ roslaunch realsense2_camera rs_camera.launch  

hpc@hpc-ubuntu:~/catkin_aruco$ rostopic list
/camera/color/camera_info
/camera/color/image_raw
/camera/color/image_raw/compressed
/camera/color/image_raw/compressed/parameter_descriptions
/camera/color/image_raw/compressed/parameter_updates
/camera/color/image_raw/compressedDepth
/camera/color/image_raw/compressedDepth/parameter_descriptions
/camera/color/image_raw/compressedDepth/parameter_updates
/camera/color/image_raw/theora
/camera/color/image_raw/theora/parameter_descriptions
/camera/color/image_raw/theora/parameter_updates
/camera/color/metadata
/camera/depth/camera_info
/camera/depth/image_rect_raw
/camera/depth/image_rect_raw/compressed
/camera/depth/image_rect_raw/compressed/parameter_descriptions
/camera/depth/image_rect_raw/compressed/parameter_updates
/camera/depth/image_rect_raw/compressedDepth
/camera/depth/image_rect_raw/compressedDepth/parameter_descriptions
/camera/depth/image_rect_raw/compressedDepth/parameter_updates
/camera/depth/image_rect_raw/theora
/camera/depth/image_rect_raw/theora/parameter_descriptions
/camera/depth/image_rect_raw/theora/parameter_updates
/camera/depth/metadata
/camera/extrinsics/depth_to_color
/camera/motion_module/parameter_descriptions
/camera/motion_module/parameter_updates
/camera/realsense2_camera_manager/bond
/camera/rgb_camera/auto_exposure_roi/parameter_descriptions
/camera/rgb_camera/auto_exposure_roi/parameter_updates
/camera/rgb_camera/parameter_descriptions
/camera/rgb_camera/parameter_updates
/camera/stereo_module/auto_exposure_roi/parameter_descriptions
/camera/stereo_module/auto_exposure_roi/parameter_updates
/camera/stereo_module/parameter_descriptions
/camera/stereo_module/parameter_updates
/diagnostics
/rosout
/rosout_agg
/tf
/tf_static

# change launch file (aruco_ros/launch/single.launch)

<launch>

<arg name="markerId" default="23"/>
<arg name="markerSize" default="0.30"/> <!-- in m -->
<arg name="eye" default="left"/>
<arg name="marker_frame" default="aruco_marker_frame"/>
<arg name="ref_frame" default=""/> <!-- leave empty and the pose will be published wrt param parent_name -->
<arg name="corner_refinement" default="LINES" /> <!-- NONE, HARRIS, LINES, SUBPIX -->


<node pkg="aruco_ros" type="single" name="aruco_single">
<!--remap from="/camera_info" to="/stereo/$(arg eye)/camera_info" /-->
<!--remap from="/image" to="/stereo/$(arg eye)/image_rect_color" /-->
<remap from="/camera_info" to="/camera/color/camera_info" />
<remap from="/image" to="/camera/color/image_raw" />
<param name="image_is_rectified" value="True"/>
<param name="marker_size" value="$(arg markerSize)"/>
<param name="marker_id" value="$(arg markerId)"/>
<param name="reference_frame" value="$(arg ref_frame)"/> <!-- frame in which the marker pose will be refered -->
<param name="camera_frame" value="stereo_gazebo_$(arg eye)_camera_optical_frame"/>
<param name="marker_frame" value="$(arg marker_frame)" />
<param name="corner_refinement" value="$(arg corner_refinement)" />
</node>

</launch>

 

# launch aruco ros

hpc@hpc-ubuntu:~/catkin_aruco$ source devel/setup.bash

hpc@hpc-ubuntu:~/catkin_aruco$ roslaunch aruco_ros single.launch
... logging to /home/hpc/.ros/log/0e4a878c-4087-11ed-8f77-853331e88fb6/roslaunch-hpc-ubuntu-18058.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://hpc-ubuntu:45085/

SUMMARY
========

PARAMETERS
 * /aruco_single/camera_frame: stereo_gazebo_lef...
 * /aruco_single/corner_refinement: LINES
 * /aruco_single/image_is_rectified: True
 * /aruco_single/marker_frame: aruco_marker_frame
 * /aruco_single/marker_id: 23
 * /aruco_single/marker_size: 0.3
 * /aruco_single/reference_frame:
 * /rosdistro: noetic
 * /rosversion: 1.15.14

NODES
  /
    aruco_single (aruco_ros/single)

ROS_MASTER_URI=http://localhost:11311

process[aruco_single-1]: started with pid [18076]
[ WARN] [1664518695.506888963]: Corner refinement options have been removed in ArUco 3.0.0, corner_refinement ROS parameter is deprecated
[ WARN] [1664518695.625301216]: normalizeImageIllumination is unimplemented!




コメント

このブログの人気の投稿

[참고] ROS kinetic에서 WebCam 사용하기 (Ubuntu 16.04)

Reference: 1. https://github.com/bosch-ros-pkg/usb_cam/issues/53  2. http://zumashi.blogspot.jp/2016/12/ros-kinetic-usb-cam.html  3. http://cafe.naver.com/openrt/5963 위의 사이트들을 참고하여 ROS Kinetic에서 Logitech WebCam C270의 동작을 확인했습니다. $ cd ~/catkin_ws/src $ git clone https://github.com/bosch-ros-pkg/usb-cam.git $ cd .. $ catkin_make WebCam test $ roscore $ rosrun usb_cam usb_cam_node $ rosrun image_view image_view image:=/usb_cam/image_raw $ rosrun rviz rviz 1) By display type>rviz>image 2) Image topic: /usb_cam/image_raw --> 왼쪽 하단과 같이 WebCam이 잘 동작하는 것을 확인했습니다.

[vscode] TImeout waiting for debugger connection

이제까지 잘 동작하던 비주얼 스튜디오 코드가 위와 같은 에러 메세지를 내면서 갑자기 디버깅이 안되서 인터넷을 검색한 결과.. vscode의 User Setting에서 검색창에 python.terminal.activateEnvironment을 입력하여 true로 설정되어 있는 값을 false로 변환하면 된다. 

日常の話

今年の夏は本当に暑かったですね。それで、我らもなるべく室内で活動しました。図書館で絵本を読んでいる長男さん。 カラオケ大会〜〜 漫画を読んでいた長女 長男はおもちゃで遊んでました。 魚べいで外食 橋コンテストで出品する作品を作る次女 長男が大好きなマインクラフトレゴ。官舎の壁は長男の落書きで大変な状態です。 お父さん、お母さんが作って下さった美味しい料理 お父さんのハヤシライスは美味しい! 頑張って運動している長男 親切に教えてくれた先生たち、ありがとうございました。 JAXA来年までメイン建物が運営しません!ご参考までに〜〜 長女と長男、図書室の中で〜〜