-- Views
October 30, 25
スライド概要
I proposed tool to build simulator environment using mesh data of 3D Scan Application.
https://community.gazebosim.org/t/community-meeting-mesh2gazebo/3499
The in-store image was collected at EZOHUB TOKYO with the cooperation of SATUDORA HOLDINGS CO.,LTD.
OpenCVではじめよう ディープラーニングによる画像認識、OpenCVプログラミングブックの中の人(の一人).Computer Vision/OpenCV/GPGPU/ROS/AR/インタラクティブアート/ニコニコ技術部
ROSCon 2025 In-advance Lightning Talks mesh2gazebo: Building a simulator environment using mesh data of 3D scan application CyberAgent AI Lab Yasuhiro Yoshimura
About me Yasuhiro Yoshimura CyberAgent AI Lab Activity Understanding Team Research Engineer I research robotics and the sensing to understand human activity. And, I published book for developer of OpenCV. 2
Motivation ● Simulator environment is important for developing algorithms for autonomous mobile robots. ● And, robotics engineers hope to build a simulator environment by simply steps. Real world Gazebo World 3
mesh2gazebo mesh2gazebo solves these problems!😆 ● Robotics engineers can build a simulator environment by simply steps. ● The quality of generated world is very good. ● mesh2gazebo supports Gazebo Ignition. Real World 3D Mesh data Gazebo World 4
Pipeline of mesh2gazebo I proposed mesh2gazebo to build a simulator environment using mesh data of 3D scan application. 3D Scan Application mesh2gazebo Mesh data (obj data, texture) Gazebo Gazebo World 5
Pipeline of mesh2gazebo Please see the Appendix for details. mesh2gazebo Conversion (OBJ ⇒ DAE) Mesh data (OBJ, texture) Post processing Making World Gazebo World 6
Real retail store https://www.youtube.com/watch?v=4dIjLJ6BXzM 7
Generated world with navigation https://www.youtube.com/watch?v=x92R9y_1isM 8
Conclusion mesh2gazebo helps to developing algorithms for autonomous mobile robots.😆 ● Robotics engineers can build a simulator environment by simply steps. ● The quality of generated world is very good. ● mesh2gazebo supports Gazebo Ignition. Real World 3D Mesh data Gazebo World 9
Acknowledgment The in-store image was collected at EZOHUB TOKYO with the cooperation of SATUDORA HOLDINGS CO.,LTD. 10
11
Appendix:Pipeline of mesh2gazebo Please see the Appendix for details. mesh2gazebo Conversion (OBJ ⇒ DAE) Mesh data (OBJ, texture) Post processing Making World Gazebo World 12
Appendix:Technical briefing ● 3D Scanning ○ ○ I used Scaniverse for the 3D Scanning. ■ I scan the floor surface for post processing. ■ I export OBJ format via Scaniverse. I convert from OBJ format to DAE format by MeshLab for Gazebo. Exported mesh data Texture data 13
Appendix:Technical briefing ● Post Processing(1/2) ○ ○ If there is the difference in the coordinate axes between Gazebo and mesh, I need to rotate. I used MeshLab to rotate mesh data. Y Z X 14
Appendix:Technical briefing ● Post Processing(2/2) ○ ○ If the floor surface is NOT flat in generated mesh data, it is difficult to run for mobile robot. So, I used MeshLab to make floor surface flat. before after Z Z 15
Appendix:Technical briefing ● Making of Gazebo World(1/2) ○ I specified the file path of mesh data in <collision> tag in SDF file. <model name="mesh2gazebo"> <static>true</static> <link name="link"> <collision name="collision"> <geometry> <mesh> <scale>1 1 1</scale> <uri>file:///home/jazzy/Scaniverse_2024_11_18_162729.dae</uri> </mesh> </geometry> </collision> Filepath of ... mesh data </link> </model> 16
Appendix:Technical briefing ● Making of Gazebo World(2/2) ○ I specified the file path of mesh data in <visual> tag in SDF file. <model name="mesh2gazebo"> <static>true</static> <link name="link"> ... <visual name="visual"> <geometry> <mesh> <scale>1 1 1</scale> <uri>file:///home/jazzy/Scaniverse_2024_11_18_162729.dae</uri> </mesh> </geometry> Filepath of </visual> mesh data </link> </model> 17
Appendix:generated Gazebo world https://www.youtube.com/watch?v=z63dIfPx9iE 18
Appendix:Visualization of mesh data in RViz2 scan RGB camera Mobile robot costmap I visualized scan, costmap and mesh data. 19
Appendix:Tips for Gazebo ● Decrease of CPU usage ○ ○ I disabled cast shadows to decrease CPU usage. So, I set cast_shadows to 0. <light type="directional" name="sun"> <cast_shadows>0</cast_shadows> <pose>0 0 10 0 0 0</pose> <diffuse>0.8 0.8 0.8 1</diffuse> <specular>0.2 0.2 0.2 1</specular> <attenuation> <range>1000</range> <constant>0.9</constant> <linear>0.01</linear> <quadratic>0.001</quadratic> </attenuation> <direction>-0.5 0.1 -0.9</direction> </light> 20