ROSCon JP 2023での講演資料です。 https://roscon.jp/2023
スマートファニチャープラットフォーム「カチャカ」はPreferred Roboticsが販売中の家庭用自律移動ロボットです。独自の深層学習、ナビゲーション、SLAMなどの技術をコンパクトなボディに内蔵しています。今回、近日提供予定の開発者向けAPIとそのAPIを使ったROS 2インターフェイス実装を紹介します。カチャカは家庭用途だけでなく、教育、産業用途にも適用範囲を拡大していきます。
ۙ౻ ๛ ɹ࡚ ߞฏɹ֎ؙ හɹଜ ɹ ݈Ұɹࣉా ߞࢤגࣜձࣾPreferred Robotics https://www.pfrobotics.jpՈఉ༻ࣗҠಈϩϘοτʮΧνϟΧʯͷ։ൃऀAPIެ։ͱROS 2ΠϯλʔϑΣΠε࣮
View Slide
@youtalkۙ౻ ๛• 2021/11~ Preferred Robotics PjM / ΤϯδχΞ• 2019/8 #ROS2Ͱ͡ΊΑ͏ ग़൛• 2018/5~ Preferred Networks ΤϯδχΞ• 2018~ ROSCon JP ࣮ߦҕһ• 2013/4~ ΧϫμϩϘςΟΫε ओ• 2013/3 ಸྑઌେ Ph.D2
• 2021/11 Preferred NetworksΑΓࣾԽ• ࣗҠಈϩϘοτͷԽɾࣄۀԽʹྗ• B2C / B2B྆ࣄۀͷಉ࣌ਐߦ3@pfrobotics
CEATEC Japan 2018ͯ͢ͷਓʹϩϘοτΛ
https://youtu.be/VGj3daiFNdM
https://kachaka.lifeεϚʔτϑΝχνϟʔϓϥοτϑΥʔϜΧνϟΧ
https://youtu.be/SdVglHOJgiA
@kachaka_jp• Ոఉ༻ࣗҠಈϩϘοτ• Ո۩ͷࣗಈӡൖΛ௨ͯ͡ͷҠಈɺย͚ɺश׳ԽͳͲΛαϙʔτ• ຊମɿ228,000ԁ• ΧνϟΧγΣϧϑɿ23,800ԁʙ• αϒεΫϦϓγϣϯɿ980ԁ/݄8
https://www.instagram.com/youtalk/reels/9
ROSCon JP 2023ͯ͢ͷҠಈϩϘοτ։ൃऀʹΧνϟΧAPIΛ
ΧνϟΧAPI• εϚϑΥΞϓϦ૬ͷAPIΛ֎෦։ൃऀʹެ։• gRPCͷ.protoϑΝΠϧɺPythonΫϥΠΞϯτϥΠϒϥϦɺROS 2ϒϦοδͷఏڙ• ROS 2ϒϦοδ֎෦PC࣮ߦ• Apache License 2.0https://github.com/pf-robotics/kachaka-api11
ΧνϟΧAPI• PythonϓϩάϥϛϯάΧνϟΧମͷJupyterLabͰ࣮ߦՄೳ• ΧνϟΧAPIͷ։ൃʹඞཁͳͷϒϥβ͚ͩ12
60ഒ
ΧνϟΧAPIఏڙػೳ• Ո۩ӡൖɺతҠಈ• ҙͷҐஔ࢟Ҡಈ• ࢦྩ• ൃ• Ո۩ҰཡऔಘɺతҰཡऔಘ• ίϚϯυ࣮ߦཤྺҰཡऔಘ• ࣗಈॆిɺखಈૢ࡞ͷઃఆ• ΦυϝτϦʢࣗݾҐஔͱݱࡏʣऔಘ• IMUσʔλऔಘ• LiDAR܈σʔλऔಘ• લΧϝϥը૾औಘ• ମೝࣝ݁ՌʢਓɺՈ۩ɺॆిثɺ൶ʣऔಘ• ΧνϟΧϚοϓऔಘίϚϯυ࣮ߦ ηϯαग़ྗ14
ROS 2ϒϦοδఏڙػೳ$ ros2 service list | grep -v parameter/kachaka/auto_homing/set_enabled/kachaka/manual_control/set_enabled$ ros2 action list/kachaka/kachaka_command/execute$ ros2 interface list | grep kachaka.../msg/KachakaCommand.../msg/Location.../msg/LocationList.../msg/ObjectDetection.../msg/ObjectDetectionListStamped.../msg/Shelf.../msg/ShelfList.../msg/ShelfSize.../action/ExecKachakaCommand$ ros2 topic list | grep kachaka/kachaka/front_camera/camera_info/kachaka/front_camera/image_raw/kachaka/front_camera/image_raw/compressed/kachaka/imu/imu/kachaka/layout/locations/list/kachaka/layout/shelves/list/kachaka/lidar/scan/kachaka/manual_control/cmd_vel/kachaka/mapping/map/kachaka/object_detection/result/kachaka/odometry/odometry/kachaka/robot_info/version/kachaka_description/joint_states/kachaka_description/robot_description15
ΧνϟΧgRPCίϯςφgRPCUIαʔόεϚʔτϑΥϯΧνϟΧΞϓϦgRPCAPIαʔόPlaygroundίϯςφJupyterLabαʔόࣗ࡞gRPCϓϩάϥϜϒϥβ֎෦PCros2_bridgeίϯςφkachaka_grpc_ros2_bridgeࣗ࡞ROS 2ϓϩάϥϜ֎෦PCࣗ࡞gRPCϓϩάϥϜ19
YComponentXComponentRobotInfoComponentΧνϟΧgRPCίϯςφgRPCAPIαʔόRos2TopicBridge<kachaka_api::GetRobotVersionResponse,std_msgs::msg::String>Converterros2_msg->data = grpc_msg.version()https://github.com/pf-robotics/kachaka-api/blob/main/ros2/kachaka_grpc_ros2_bridge/src/component/robot_info_component.cppΧνϟΧιϑτΣΞͷόʔδϣϯΛPub͢ΔROS 2ίϯϙʔωϯτ~/versionτϐοΫPubGetRobotVersionRPCݺͼग़͠22
ΧνϟΧAPIܦ༝ͰͷφϏήʔγϣϯ• ExecKachakaCommandΞΫγϣϯΛRViz2ͷ2DGoal Poseػೳʹద༻• લΧϝϥʹΑΔSemanticSegmentationɺLiDARɺToFͯ͢Ληϯαʔ౷߹• Ո۩ͷੵࡌ༗ແͰInflationMapมԽ
Navigation 2ʹΑΔφϏήʔγϣϯ• https://github.com/ros-planning/navigation2 ΛɹɹϦϞʔτϒϨΠϯͰ࣮ߦՄೳ• ηϯαʔใLiDARͷΈ• ΧνϟΧAPIͰະఏڙͷPathInflation MapදࣔʹɹରԠ
ΧνϟΧιϑτΣΞຊؾͷφϏήʔγϣϯ• ੑೳࣗମΧνϟΧAPIܦ༝ͱ΄΅ಉ༷ʢϒϦοδʹ͏Φʔόʔϔουͳ͠ʣ• ΧνϟΧAPIͰະఏڙͷSemantic SegmentationɺToF͕༻Մೳ• ToF APIϓϥΠόγʔΛղܾޙɺఏڙ༧ఆ25
ΧνϟΧAPIROS 2ϒϦοδTips
CompressedImageͷར༻Tips• ඇѹॖը૾τϐοΫHz͕͍͕ɺJPEGը૾τϐοΫHz͕ߴ͍• remap͢ΕRViz2ͳͲͰඳըՄೳ$ ros2 topic hz /kachaka/front_camera/image_rawaverage rate: 1.961$ ros2 topic hz /kachaka/front_camera/image_raw/compressedaverage rate: 8.672$ rviz2 --ros-args --remap/kachaka/front_camera/image_raw/camera_info:=/kachaka/front_camera/camera_infoImageCompressedImage28
ମೝࣝΞϓϦέʔγϣϯ• ಠࣗͷֶशσʔληοτͳͷͰਓ͚ͩͰೝࣝՄೳ• ΧνϟΧγΣϧϑΧόʔ༗ແɺੵࡌ༗ແʹݶΒͣೝࣝՄೳ• Network Architecture SearchʹΑΔݶք·ͰͷܰྔԽ• ਓैɺՈ۩ࣗಈൃݟͳͲʹɹԠ༻Մೳ29ਓ Ո۩ ॆిث ൶Tips
IMUΞϓϦέʔγϣϯTips• XYZ࣠ͷฒਐՃͱZ࣠ͷճసΛग़ྗ• Ωουφοϓݕग़ɺసɹݕग़ͳͲʹԠ༻Մೳ30
ηϯαʔτϐοΫͷQoSઃఆTips• ΧνϟΧͷηϯαʔτϐοΫͯ͢rclcpp::SensorDataQoSΛ༻• ReliabilityΛBest Effortʹઃఆ͠ͳ͍ͱɺτϐοΫΛSubͰ͖ͳ͍ͷͰҙ
cmd_velͷ҆શػೳTips• લΧϝϥͷSemantic SegmentationɺLiDARɺToFʹΑΔඇৗఀࢭػೳ͕༗ޮ• ޙୀ҆શػೳ͕ͳ͍ʢͿ͔ͭΔʣ• ࣗಈॆిػೳͷແޮԽՄೳ• Remap͢ΕROS 2ඪ४ύοέʔδͱ૬ੑྑ͠$ ros2 service call /kachaka/auto_homing/set_enabled std_srvs/srv/SetBool "data: true"$ ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --remap/cmd_vel:=/kachaka/manual_control/cmd_vel32
kachaka_grpc_ros2_bridgeͷϩʔΧϧ࣮ߦTips• ros2_bridgeίϯςφΛΘͣɺϩʔΧϧ࣮ߦ͢Δ͜ͱՄೳ• https://github.com/pf-robotics/kachaka-api/blob/main/Dockerfile.ros2 Λࢀߟʹ$ cd ~/kachaka-api/ros2/kachaka_grpc_ros2_bridge$ protoc -I ~/kachaka-api/protos --grpc_out gen-src--plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin--cpp_out=gen-src ~/src/kachaka-api/protos/kachaka-api.proto$ mkdir -p ~/kachaka-api-ros/src$ ln -s ~/kachaka-api/ros2/kachaka_* ~/kachaka-api-ros/src/$ cd ~/kachaka-api-ros$ rosdep install --from-paths src --ignore-src -r -y$ colcon build$ source ~/kachaka-api-ros/install/setup.zsh$ ros2 launch kachaka_grpc_ros2_bridge grpc_ros2_bridge.launch.xmlserver_uri:=$KACHAKA_IP:2640033
ΧνϟΧAPIϫʔΫγϣοϓࢿྉ• 9/15ʹ։࠵͞ΕͨΧνϟΧAPIϫʔΫγϣοϓͷߨٛࢿྉ • 15͋Εɺࣗ͝ͷΧνϟΧͰAPIϫʔΫγϣοϓͷݸਓֶश͕Մೳhttps://github.com/pf-robotics/kachaka-api/blob/main/docs/kachaka_api_workshop.ipynbTips34
ฐࣾΤϯδχΞʹΑΔQiitaهࣄhttps://qiita.com/organizations/pfroboticsTips
GitHub Discussionsͷ׆༻Tips• ΧνϟΧAPI͋͘·ͰίϛϡχςΟʔαϙʔτ• GitHub DiscussionsͰͷ౼ɺGitHubIssuesͰͷఏىɺGitHub PRʹΑΔOSSߩݙɺ͓͓ͪͯ͠Γ·͢https://github.com/pf-robotics/kachaka-api/discussions36
https://x.com/hakuturu583/status/1681886045212909568?s=20 ΑΓసࡌhttps://x.com/ko1_baseba11/status/1692509808845549620?s=20 ΑΓసࡌhttps://x.com/_ame_a_/status/1692888644951163357?s=20 ΑΓసࡌhttps://x.com/daijiro/status/1699307339839582379?s=20 ΑΓసࡌhttps://x.com/hakuturu583/status/1702158560803828034?s=20 ΑΓసࡌhttps://x.com/_ame_a_/status/1703417718018625814?s=20 ΑΓసࡌ37
֤छECαΠτͰઈࢍൃചதhttps://store.kachaka.life/https://rt-net.jp/service/kachaka/https://www.amazon.co.jp/stores/Kachaka/page/194F8B15-D2F4-46CE-B591-F722A5D0B2F7https://www.rakuten.co.jp/kachaka/ެࣜαΠτެඅɾߍඅ͍༗ྉαϙʔτཌૹAmazonϙΠϯτָఱܦࡁݍָఱϙΠϯτ40
๏ਓ͚ຊ֨ಋೖ։࢝• ΧνϟΧ͕ҩྍɾࢱɺҿ৯ۀքͳͲΛத৺ʹɺࣄۀͷݱʹ͓͍ͯ׆༻͕ਐΜͰ͍Δ͜ͱΛड͚ɺ๏ਓ͚αΠτΛΦʔϓϯ• https://kachaka.life/business/
ΧνϟΧϥϯδ• ؙͷςϥεʹ͋Δձһ੍γΣΞεϖʔεOCA TOKYOʹΧνϟΧͷγϣʔϧʔϜ͕Φʔϓϯ• https://prtimes.jp/main/html/rd/p/000000012.000115855.html• https://note.kachaka.life/n/nde611aa906fa
HAPiiBOT• ΞϚϊ༷ͱڞಉ։ൃͨ͠খܕচચড়ϩϘοτ• Preferred Robotics͕φϏήʔγϣϯγεςϜɺAIϏδϣϯɺΤοδCPUϘʔυͳͲΛ։ൃhttps://www.amano.co.jp/Clean/hapiibot.html ΑΓసࡌ43
https://youtu.be/-dkSf5Wor64 ΑΓసࡌ
Cursor• gRPCʹͳ͍ಠࣗͷΈ• cursorൺֱʹΑΔσʔλऔಘͷطಡཧͱϩϯάϙʔϦϯάΛಋೖ• cursor = 0ͷͱ͖ɺͦͷ࣌ͷ࠷৽Λड৴• cursor = Xͷͱ͖ɺαʔόଆ͕cursor != XʹͳΔ·Ͱػ͠ɺσʔλΛड৴• ॏෳड৴ɺ࠶ૹɺ࠷৽σʔλͷΈड৴ͳͲͷ՝ʹରԠmessage Metadata {sfixed64 cursor = 1;}message GetRequest {Metadata metadata = 1;}message GetRobotSerialNumberResponse {Metadata metadata = 1;string serial_number = 2;}service KachakaApi {rpc GetRobotSerialNumber (GetRequest)returns (GetRobotSerialNumberResponse);}https://github.com/pf-robotics/kachaka-api/blob/main/protos/kachaka-api.proto ൈਮ45
cursor = 0ͷέʔε46
cursor != 0ͷέʔε