Upgrade to Pro — share decks privately, control downloads, hide ads and more …

家庭用自律移動ロボット「カチャカ」の開発者API公開と ROS 2インターフェイス実装

Yutaka Kondo
September 26, 2023

家庭用自律移動ロボット「カチャカ」の開発者API公開と ROS 2インターフェイス実装

ROSCon JP 2023での講演資料です。 https://roscon.jp/2023

スマートファニチャープラットフォーム「カチャカ」はPreferred Roboticsが販売中の家庭用自律移動ロボットです。独自の深層学習、ナビゲーション、SLAMなどの技術をコンパクトなボディに内蔵しています。今回、近日提供予定の開発者向けAPIとそのAPIを使ったROS 2インターフェイス実装を紹介します。カチャカは家庭用途だけでなく、教育、産業用途にも適用範囲を拡大していきます。

Yutaka Kondo

September 26, 2023
Tweet

More Decks by Yutaka Kondo

Other Decks in Programming

Transcript

  1. ۙ౻ ๛ ɹ໺࡚ ߞฏɹ֎ؙ හ޺ɹଜ੉ ࿨౎ɹ೔୆ ݈Ұɹࣉా ߞࢤ
    גࣜձࣾPreferred Robotics https://www.pfrobotics.jp
    Ոఉ༻ࣗ཯ҠಈϩϘοτ
    ʮΧνϟΧʯͷ։ൃऀAPIެ։ͱ
    ROS 2ΠϯλʔϑΣΠε࣮૷

    View Slide

  2. @youtalk
    ۙ౻ ๛
    • 2021/11~ Preferred Robotics PjM / ΤϯδχΞ

    • 2019/8 #ROS2Ͱ͸͡ΊΑ͏ ग़൛

    • 2018/5~ Preferred Networks ΤϯδχΞ

    • 2018~ ROSCon JP ࣮ߦҕһ

    • 2013/4~ ΧϫμϩϘςΟΫε ओ೚

    • 2013/3 ಸྑઌ୺େ Ph.D
    2

    View Slide

  3. • 2021/11 Preferred Networks
    ΑΓ෼ࣾԽ

    • ࣗ཯ҠಈϩϘοτͷ੡඼Խɾ
    ࣄۀԽʹ஫ྗ

    • B2C / B2B྆ࣄۀͷಉ࣌ਐߦ
    3
    @pfrobotics

    View Slide

  4. CEATEC Japan 2018
    ͢΂ͯͷਓʹϩϘοτΛ

    View Slide

  5. https://youtu.be/VGj3daiFNdM

    View Slide

  6. https://kachaka.life
    εϚʔτϑΝχνϟʔϓϥοτϑΥʔϜ
    ΧνϟΧ

    View Slide

  7. https://youtu.be/SdVglHOJgiA

    View Slide

  8. @kachaka_jp
    • Ոఉ༻ࣗ཯ҠಈϩϘοτ

    • Ո۩ͷࣗಈӡൖΛ௨ͯ͡෺ͷҠಈɺ
    ย෇͚ɺश׳ԽͳͲΛαϙʔτ

    • ຊମɿ228,000ԁ

    • ΧνϟΧγΣϧϑɿ23,800ԁʙ

    • αϒεΫϦϓγϣϯɿ980ԁ/݄
    8

    View Slide

  9. https://www.instagram.com/youtalk/reels/
    9

    View Slide

  10. ROSCon JP 2023
    ͢΂ͯͷҠಈϩϘοτ։ൃऀʹ
    ΧνϟΧAPIΛ

    View Slide

  11. ΧνϟΧAPI
    • εϚϑΥΞϓϦ૬౰ͷAPIΛ֎෦։ൃऀʹެ։

    • gRPCͷ.protoϑΝΠϧɺPythonΫϥΠΞϯτ
    ϥΠϒϥϦɺROS 2ϒϦοδͷఏڙ

    • ROS 2ϒϦοδ͸֎෦PC࣮ߦ

    • Apache License 2.0
    https://github.com/pf-robotics/
    kachaka-api
    11

    View Slide

  12. ΧνϟΧAPI
    • Pythonϓϩάϥϛϯά͸ΧνϟΧ
    ମ಺ͷJupyterLabͰ࣮ߦՄೳ

    • ΧνϟΧAPIͷ։ൃʹඞཁͳ΋ͷ͸
    ϒϥ΢β͚ͩ
    12

    View Slide

  13. 60ഒ଎

    View Slide

  14. ΧνϟΧAPIఏڙػೳ
    • Ո۩ӡൖɺ໨త஍Ҡಈ

    • ೚ҙͷҐஔ࢟੎Ҡಈ

    • ଎౓ࢦྩ

    • ൃ࿩

    • Ո۩Ұཡऔಘɺ໨త஍Ұཡऔಘ

    • ίϚϯυ࣮ߦཤྺҰཡऔಘ

    • ࣗಈॆిɺखಈૢ࡞ͷઃఆ
    • ΦυϝτϦʢࣗݾҐஔͱݱࡏ଎౓ʣऔಘ

    • IMUσʔλऔಘ

    • LiDAR఺܈σʔλऔಘ

    • લΧϝϥը૾औಘ

    • ෺ମೝࣝ݁ՌʢਓɺՈ۩ɺॆిثɺ൶ʣऔಘ

    • ΧνϟΧϚοϓऔಘ
    ίϚϯυ࣮ߦ ηϯαग़ྗ
    14

    View Slide

  15. 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_description
    15

    View Slide

  16. ΧνϟΧ
    gRPC
    ίϯςφ
    gRPC
    UIαʔό
    εϚʔτϑΥϯ
    ΧνϟΧ
    ΞϓϦ
    gRPC
    APIαʔό
    Playground
    ίϯςφ
    JupyterLab
    αʔό
    ࣗ࡞gRPC
    ϓϩάϥϜ
    ୺຤
    ϒϥ΢β
    ֎෦PC
    ros2_bridge
    ίϯςφ
    kachaka_grpc
    _ros2_bridge
    ࣗ࡞ROS 2
    ϓϩάϥϜ
    ֎෦PC
    ࣗ࡞gRPC
    ϓϩάϥϜ
    19

    View Slide

  17. YComponent
    XComponent
    RobotInfoComponent
    ΧνϟΧ
    gRPC
    ίϯςφ
    gRPC
    APIαʔό
    Ros2TopicBridge<
    kachaka_api::GetRobotVersionResponse,
    std_msgs::msg::String>
    Converter
    ros2_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

    τϐοΫPub
    GetRobotVersion

    RPCݺͼग़͠
    22

    View Slide

  18. ΧνϟΧAPIܦ༝ͰͷφϏήʔγϣϯ
    • ExecKachakaCommand
    ΞΫγϣϯΛRViz2ͷ2D
    Goal Poseػೳʹద༻

    • લΧϝϥʹΑΔSemantic
    SegmentationɺLiDARɺ
    ToF͢΂ͯΛηϯαʔ౷߹

    • Ո۩ͷੵࡌ༗ແͰInflation
    Map΋มԽ

    View Slide

  19. Navigation 2ʹΑΔφϏήʔγϣϯ
    • https://github.com/ros-
    planning/navigation2 Λɹɹ
    ϦϞʔτϒϨΠϯͰ࣮ߦՄೳ

    • ηϯαʔ৘ใ͸LiDARͷΈ

    • ΧνϟΧAPIͰ͸ະఏڙͷ
    Path΍Inflation Mapදࣔʹɹ
    ରԠ

    View Slide

  20. ΧνϟΧιϑτ΢ΣΞຊؾͷφϏήʔγϣϯ
    • ੑೳࣗମ͸ΧνϟΧAPIܦ༝
    ͱ΄΅ಉ༷ʢϒϦοδʹ൐͏Φʔόʔϔουͳ͠ʣ


    • ΧνϟΧAPIͰ͸ະఏڙͷ
    Semantic Segmentationɺ
    ToF͕࢖༻Մೳ

    • ToF API͸ϓϥΠόγʔ໰୊
    Λղܾޙɺఏڙ༧ఆ
    25

    View Slide

  21. View Slide

  22. ΧνϟΧAPI
    ROS 2ϒϦοδTips

    View Slide

  23. CompressedImageͷར༻
    Tips
    • ඇѹॖը૾τϐοΫ͸Hz͕௿͍͕ɺ
    JPEGը૾τϐοΫ͸Hz͕ߴ͍

    • remap͢Ε͹RViz2ͳͲͰ΋ඳըՄೳ
    $ ros2 topic hz /kachaka/front_camera/
    image_raw
    average rate: 1.961
    $ ros2 topic hz /kachaka/front_camera/
    image_raw/compressed
    average rate: 8.672
    $ rviz2 --ros-args --remap
    /kachaka/front_camera/image_raw/camera_info:=
    /kachaka/front_camera/camera_info
    Image
    CompressedImage
    28

    View Slide

  24. ෺ମೝࣝΞϓϦέʔγϣϯ
    • ಠࣗͷֶशσʔληοτͳͷͰ
    ਓ͸଍͚ͩͰ΋ೝࣝՄೳ

    • ΧνϟΧγΣϧϑ͸Χόʔ༗ແɺ
    ੵࡌ༗ແʹݶΒͣೝࣝՄೳ

    • Network Architecture Searchʹ
    ΑΔݶք·ͰͷܰྔԽ

    • ਓ௥ैɺՈ۩ࣗಈൃݟͳͲʹɹ
    Ԡ༻Մೳ
    29
    ਓ Ո۩ ॆిث ൶
    Tips

    View Slide

  25. IMUΞϓϦέʔγϣϯ
    Tips
    • XYZ࣠ͷฒਐՃ଎౓ͱZ࣠
    ͷճస଎౓Λग़ྗ

    • Ωουφοϓݕग़ɺస౗ɹ
    ݕग़ͳͲʹԠ༻Մೳ
    30

    View Slide

  26. ηϯαʔτϐοΫͷQoSઃఆ
    Tips
    • ΧνϟΧͷηϯαʔτϐοΫ͸͢΂ͯrclcpp::SensorDataQoSΛ࢖༻

    • ReliabilityΛBest Effortʹઃఆ͠ͳ͍ͱɺτϐοΫΛSubͰ͖ͳ͍ͷͰ஫ҙ

    View Slide

  27. 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_vel
    32

    View Slide

  28. 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.xml
    server_uri:=$KACHAKA_IP:26400
    33

    View Slide

  29. ΧνϟΧAPIϫʔΫγϣοϓࢿྉ
    • 9/15ʹ։࠵͞ΕͨΧνϟΧAPIϫʔΫ
    γϣοϓͷߨٛࢿྉ

    • 15෼͋Ε͹ɺࣗ͝୐ͷΧνϟΧͰAPI
    ϫʔΫγϣοϓͷݸਓֶश͕Մೳ
    https://github.com/pf-robotics/kachaka-api/
    blob/main/docs/kachaka_api_workshop.ipynb
    Tips
    34

    View Slide

  30. ฐࣾΤϯδχΞʹΑΔQiitaهࣄ
    https://qiita.com/organizations/pfrobotics
    Tips

    View Slide

  31. GitHub Discussionsͷ׆༻
    Tips
    • ΧνϟΧAPI͸͋͘·ͰίϛϡχςΟʔ
    αϙʔτ

    • GitHub DiscussionsͰͷ౼࿦ɺGitHub
    IssuesͰͷ໰୊ఏىɺGitHub PRʹΑΔ
    OSSߩݙɺ͓଴͓ͪͯ͠Γ·͢
    https://github.com/pf-robotics/
    kachaka-api/discussions
    36

    View Slide

  32. 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

    View Slide

  33. View Slide

  34. ֤छECαΠτͰઈࢍൃചத
    https://store.kachaka.life/
    https://rt-net.jp/service/kachaka/
    https://www.amazon.co.jp/stores/Kachaka/page/
    194F8B15-D2F4-46CE-B591-F722A5D0B2F7
    https://www.rakuten.co.jp/kachaka/
    ެࣜαΠτ
    ެඅɾߍඅ෷͍

    ༗ྉαϙʔτ
    ཌ೔഑ૹ

    AmazonϙΠϯτ
    ָఱܦࡁݍ

    ָఱϙΠϯτ
    40

    View Slide

  35. ๏ਓ޲͚ຊ֨ಋೖ։࢝
    • ΧνϟΧ͕ҩྍɾ෱ࢱɺҿ৯ۀքͳ
    ͲΛத৺ʹɺࣄۀͷݱ৔ʹ͓͍ͯ΋
    ׆༻͕ਐΜͰ͍Δ͜ͱΛड͚ɺ๏ਓ
    ޲͚αΠτΛΦʔϓϯ

    • https://kachaka.life/business/

    View Slide

  36. ΧνϟΧϥ΢ϯδ
    • ؙͷ಺ςϥε಺ʹ͋Δձһ੍γΣΞ
    εϖʔεOCA TOKYOʹΧνϟΧͷ
    γϣʔϧʔϜ͕Φʔϓϯ

    • https://prtimes.jp/main/html/rd/p/
    000000012.000115855.html

    • https://note.kachaka.life/n/
    nde611aa906fa

    View Slide

  37. HAPiiBOT
    • ΞϚϊ༷ͱڞಉ։ൃͨ͠খܕচચড়ϩϘοτ

    • Preferred Robotics͕φϏήʔγϣϯγεςϜɺAI
    ϏδϣϯɺΤοδCPUϘʔυͳͲΛ։ൃ
    https://www.amano.co.jp/Clean/hapiibot.html ΑΓసࡌ
    43

    View Slide

  38. https://youtu.be/-dkSf5Wor64 ΑΓసࡌ

    View Slide

  39. 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

    View Slide

  40. cursor = 0ͷέʔε
    46

    View Slide

  41. cursor != 0ͷέʔε

    View Slide