Skip to content

Latest commit

ย 

History

History
executable file
ยท
367 lines (277 loc) ยท 15 KB

README_cn.md

File metadata and controls

executable file
ยท
367 lines (277 loc) ยท 15 KB

English | ็ฎ€ไฝ“ไธญๆ–‡

OpenPI Runtime S600 ๆŽจ็†่Š‚็‚น

ๆฆ‚่ฟฐ

OpenPI Runtime ๆ˜ฏๅŸบไบŽ Pi0 ้‡ๅŒ–้ƒจ็ฝฒ็š„่ง†่ง‰่ฏญ่จ€ๅŠจไฝœๆจกๅž‹๏ผˆVLA๏ผ‰ๆŽจ็†่ฟ่กŒๆ—ถใ€‚ๆœฌ้กน็›ฎๅฎž็Žฐไบ† S600 ๆœบๆขฐ่‡‚็š„็ซฏๅˆฐ็ซฏๆŽงๅˆถๆต็จ‹๏ผŒ้€š่ฟ‡ๆŽฅๆ”ถ็›ธๆœบๅ›พๅƒๅ’Œๆœบๆขฐ่‡‚็Šถๆ€๏ผŒ็ป“ๅˆ็”จๆˆทๆŒ‡ไปค็”ŸๆˆๅŠจไฝœๅบๅˆ—ๅนถๆŽงๅˆถๆœบๆขฐ่‡‚ๆ‰ง่กŒใ€‚

่ฏฅ็ณป็ปŸ้‡‡็”จๅฎขๆˆท็ซฏ-ๆœๅŠก็ซฏๆžถๆž„๏ผšS600 ๆŽจ็†่Š‚็‚นไฝœไธบๅฎขๆˆท็ซฏ่ดŸ่ดฃๆ•ฐๆฎ้‡‡้›†ใ€้ข„ๅค„็†ๅ’ŒๅŠจไฝœๆ‰ง่กŒ๏ผ›Pi0 ๆŽจ็†ๆจกๅž‹ไฝœไธบๆœๅŠก็ซฏ่ดŸ่ดฃๅŠจไฝœ้ข„ๆต‹ใ€‚

็ณป็ปŸๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      S600 ๆŽจ็†่Š‚็‚น็ณป็ปŸๆžถๆž„                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚  โ”‚  ๅคด้ƒจ็›ธๆœบ     โ”‚    โ”‚  ๅทฆ่…•็›ธๆœบ     โ”‚    โ”‚  ๅณ่…•็›ธๆœบ     โ”‚      โ”‚
โ”‚  โ”‚  /camera/    โ”‚    โ”‚ /camera_left/โ”‚    โ”‚   (้ป‘ๅ›พ)     โ”‚      โ”‚
โ”‚  โ”‚  camera/     โ”‚    โ”‚ camera_left/ โ”‚    โ”‚              โ”‚      โ”‚
โ”‚  โ”‚  color/      โ”‚    โ”‚ color/       โ”‚    โ”‚              โ”‚      โ”‚
โ”‚  โ”‚  image_raw   โ”‚    โ”‚ image_raw    โ”‚    โ”‚              โ”‚      โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚         โ”‚                   โ”‚                   โ”‚               โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ”‚
โ”‚                             โ–ผ                                   โ”‚
โ”‚              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                  โ”‚
โ”‚              โ”‚     ่ฏ้ข˜ๅŒๆญฅ็ฎก็†ๅ™จ             โ”‚                  โ”‚
โ”‚              โ”‚  TopicTimeSynchronizer       โ”‚                  โ”‚
โ”‚              โ”‚   ๆ—ถ้—ด็ช—ๅฃ: 100ms             โ”‚                  โ”‚
โ”‚              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                  โ”‚
โ”‚                             โ–ผ                                   โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                       โ”‚
โ”‚         โ”‚        S600 ๆŽจ็†่Š‚็‚น            โ”‚                       โ”‚
โ”‚         โ”‚   s600_inference_node.py      โ”‚                       โ”‚
โ”‚         โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                       โ”‚
โ”‚         โ”‚  1. ๆ•ฐๆฎ้‡‡้›† (0.1ms)           โ”‚                       โ”‚
โ”‚         โ”‚  2. ๅ‰ๅค„็† (3.2ms)            โ”‚                       โ”‚
โ”‚         โ”‚  3. ๆŽจ็† (192.5ms)            โ”‚                       โ”‚
โ”‚         โ”‚  4. ๅŽๅค„็† (0.1ms)            โ”‚                       โ”‚
โ”‚         โ”‚  5. ๅŠจไฝœๆ’ๅ€ผไธŽๆปคๆณขๆ‰ง่กŒ           โ”‚                       โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                       โ”‚
โ”‚                         โ–ผ                                       โ”‚
โ”‚              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                            โ”‚
โ”‚              โ”‚   Pi0 ๆŽจ็†ๆœๅŠกๅ™จ      โ”‚                            โ”‚
โ”‚              โ”‚   (OE-LLM ๅทฅๅ…ทๅŒ…)    โ”‚                            โ”‚
โ”‚              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                            โ”‚
โ”‚                         โ–ผ                                       โ”‚
โ”‚              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                            โ”‚
โ”‚              โ”‚    piper_node        โ”‚                            โ”‚
โ”‚              โ”‚  ๆœบๆขฐ่‡‚ๆŽงๅˆถ่Š‚็‚น       โ”‚                            โ”‚
โ”‚              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                            โ”‚
โ”‚                                                                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒ็‰นๆ€ง

  • ๅคš็›ธๆœบๅŒๆญฅ้‡‡้›†๏ผšๆ”ฏๆŒๅคด้ƒจ็›ธๆœบใ€ๅทฆ่…•็›ธๆœบๅ›พๅƒๅŒๆญฅ้‡‡้›†๏ผŒๅณ่…•็›ธๆœบไฝฟ็”จ้ป‘ๅ›พๅ ไฝ
  • ่ฏ้ข˜ๆ—ถ้—ดๅŒๆญฅ๏ผšๅŸบไบŽ ROS2 ่ฏ้ข˜ๆ—ถ้—ดๆˆณๅŒๆญฅ๏ผŒ็กฎไฟๆ•ฐๆฎไธ€่‡ดๆ€ง
  • ็ซฏๅˆฐ็ซฏไฝŽๅปถ่ฟŸ๏ผšๆ•ฐๆฎ้‡‡้›†โ†’ๅ‰ๅค„็†โ†’ๆŽจ็†โ†’ๅŽๅค„็†โ†’ๆ‰ง่กŒ๏ผŒๅ…จ้“พ่ทฏ่€—ๆ—ถ็›‘ๆŽง
  • ๅŠจไฝœๅนณๆป‘ๅค„็†๏ผš้ฆ–ไธชๅŠจไฝœไปŽๅฝ“ๅ‰็Šถๆ€ๆ’ๅ€ผ่ฟ‡ๆธก๏ผŒๆœ€ๅŽไธ€ไธชๅŠจไฝœๅนณๆป‘ๆ”ถๆ•›๏ผŒไธญ้—ดๅŠจไฝœไธ€้˜ถไฝŽ้€šๆปคๆณข
  • ๅ…ณ่Š‚ไธŽๅคน็ˆชๅˆ†็ฆปๆŽงๅˆถ๏ผš6ไธชๅ…ณ่Š‚ไฝฟ็”จๆปคๆณขๆ’ๅ€ผ๏ผŒๅคน็ˆช็Šถๆ€็›ดๆŽฅๅ‘ๅธƒ

ๆŠ€ๆœฏ่ง„ๆ ผ

่พ“ๅ…ฅๆ•ฐๆฎๆ ผๅผ

ๆ•ฐๆฎ็ฑปๅž‹ ๅฝข็Šถ ๆ•ฐๆฎ็ฑปๅž‹ ่ฏดๆ˜Ž
ๅ›พๅƒๆ•ฐๆฎ (3่ทฏ) [3, 224, 224] uint8 ๅคด้ƒจ็›ธๆœบใ€ๅทฆ่…•็›ธๆœบใ€ๅณ่…•็›ธๆœบ๏ผˆ้ป‘ๅ›พ๏ผ‰
็Šถๆ€ๆ•ฐๆฎ [14] float32 ๅทฆ่‡‚ๅ’Œๅณ่‡‚็š„ๅ…ณ่Š‚ๅ’Œๅคน็ˆช็Šถๆ€
ๆ็คบ่ฏ - string ็”จๆˆทๆŒ‡ไปค๏ผŒๅฆ‚ "put the yellow mango on the blue plate"

่พ“ๅ‡บๅŠจไฝœๆ ผๅผ

ๆ•ฐๆฎ็ฑปๅž‹ ๅฝข็Šถ ๆ•ฐๆฎ็ฑปๅž‹ ่ฏดๆ˜Ž
ๅŠจไฝœๅบๅˆ— [50, 14] float32 50ไธชๆ—ถ้—ดๆญฅ็š„ๅŠจไฝœ๏ผŒๆฏๆญฅๅŒ…ๅซๅทฆ่‡‚็š„6ไธชๅ…ณ่Š‚ + ๅคน็ˆช๏ผŒๅ’Œๅณ่‡‚็š„6ไธชๅ…ณ่Š‚ + ๅคน็ˆช

ๆ€ง่ƒฝๆŒ‡ๆ ‡

้˜ถๆฎต ๅนณๅ‡่€—ๆ—ถ ่ฏดๆ˜Ž
ๆ•ฐๆฎ้‡‡้›† 0.1ms ROS2 ่ฏ้ข˜ๅŒๆญฅไธŽๆ•ฐๆฎ่Žทๅ–
ๅ‰ๅค„็† 3.2ms ๅ›พๅƒๆ ผๅผ่ฝฌๆขใ€ๅฝ’ไธ€ๅŒ–ใ€tokenization
ๆŽจ็† 192.5ms Pi0 ๆจกๅž‹ๆŽจ็†๏ผˆๆœๅŠก็ซฏ๏ผ‰
ๅŽๅค„็† 0.1ms ๅŠจไฝœ่งฃ็ ใ€Delta ่ฟ˜ๅŽŸ
ๅŠจไฝœๆ‰ง่กŒ 700.5ms 50ไธชๅŠจไฝœ + ๆ’ๅ€ผ๏ผŒๆ€ป่ฎก็บฆ70ไธชๆ—ถ้—ดๆญฅ

ๅผ€ๅ‘็Žฏๅขƒ

้กน็›ฎ ็‰ˆๆœฌ/่ง„ๆ ผ
็ผ–็จ‹่ฏญ่จ€ Python 3.12
ๆ“ไฝœ็ณป็ปŸ Ubuntu 24.04
ROS2 ็‰ˆๆœฌ Jazzy
ๆœบๆขฐ่‡‚ๅนณๅฐ S600
็ผ–่ฏ‘ๅทฅๅ…ท colcon
ๆŽจ็†ๆก†ๆžถ Pi0 (OE-LLM)

ไพ่ต–้กน

RDKs600็ซฏ็š„ Python ไพ่ต–

conda create -n s600_pi0 python=312
conda activate s600_pi0

pip install -r resource/requirements.txt

ROS2 ๅŒ…ไพ่ต–

  • realsense2_camera package: Publishes image messages in realsense for the example D457.
  • websocket package: Renders image messages.

ๆจกๅž‹่Žทๅ–

HBM ้‡ๅŒ–ๆจกๅž‹ๅฏไปŽ Hugging Face ่Žทๅ–๏ผšhttps://huggingface.co/D-Robotics/openpi

็‰ˆๆœฌ ๆ–‡ไปถๅคน ๆจกๅž‹ ๆ็คบ่ฏ
v0.1.0 put_the_box pi0_base, HBM put the box
v0.2.0 pi0_put_the_yellow_mango_on_the_blue_plate pi0_base, HBM put the yellow mango on the blue plate

ๅ‚ๆ•ฐ่ฏดๆ˜Ž

ๅ‚ๆ•ฐๅ ็ฑปๅž‹ ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
num_steps int 1250 ๆœ€ๅคงๆŽงๅˆถๆญฅๆ•ฐ
norm_stats_path string "" ๅฝ’ไธ€ๅŒ–็ปŸ่ฎกๆ–‡ไปถ่ทฏๅพ„
action_topic string "/aliciaD/action" ๅŠจไฝœๅ‘ๅธƒ่ฏ้ข˜
qpos_topic string "/piper/qpos" ็Šถๆ€่ฎข้˜…่ฏ้ข˜
wait_timeout float 10.0 ๆ•ฐๆฎ็ญ‰ๅพ…่ถ…ๆ—ถๆ—ถ้—ด๏ผˆ็ง’๏ผ‰
sync_time_window float 0.1 ่ฏ้ข˜ๅŒๆญฅๆ—ถ้—ด็ช—ๅฃ๏ผˆ็ง’๏ผ‰
Parameter Name Explanation Mandatory Default Value Remarks
user_prompt Task name No beat block hammer
max_limit_num the max time the robot can try No 50
state_sub_topic_name Subscribe to robotic arm state No /joint_states
camera_topic_name Brain side camera topic name for subscribing image msg No /camera/camera/color/image_raw
camera_left_topic_name Left-arm Camera on topic name for subscribing image msg No /camera_left/camera_left/color/image_raw

็ผ–่ฏ‘

S600 Ubuntu็ณป็ปŸไธŠ็ผ–่ฏ‘

  1. ็ผ–่ฏ‘็Žฏๅขƒ็กฎ่ฎค

    • ๆฟ็ซฏๅทฒๅฎ‰่ฃ… S600 Ubuntu ็ณป็ปŸ
    • ๅฝ“ๅ‰็ผ–่ฏ‘็ปˆ็ซฏๅทฒ่ฎพ็ฝฎ TogetherROS ็Žฏๅขƒๅ˜้‡๏ผšsource PATH/setup.bash๏ผˆPATH ไธบ TogetherROS ็š„ๅฎ‰่ฃ…่ทฏๅพ„๏ผ‰
    • ๅทฒๅฎ‰่ฃ… ROS2 ็ผ–่ฏ‘ๅทฅๅ…ท colcon๏ผˆ่‹ฅๆœชๅฎ‰่ฃ…๏ผŒๆ‰ง่กŒ pip install -U colcon-common-extensions๏ผ‰
    • ๅทฒ็ผ–่ฏ‘ dnn node package
  2. ็ผ–่ฏ‘

colcon build --packages-select openpi_runtime

dockerไบคๅ‰็ผ–่ฏ‘ S600็‰ˆๆœฌ

  1. ็ผ–่ฏ‘็Žฏๅขƒ็กฎ่ฎค

    ๅœจ docker ไธญ็ผ–่ฏ‘๏ผŒไธ” docker ไธญๅทฒๅฎ‰่ฃ…ๅฅฝ TogetherROSใ€‚docker ๅฎ‰่ฃ…ใ€ไบคๅ‰็ผ–่ฏ‘่ฏดๆ˜Žใ€TogetherROS ็ผ–่ฏ‘ๅ’Œ้ƒจ็ฝฒ่ฏดๆ˜Ž่ฏฆ่งๆœบๅ™จไบบๅผ€ๅ‘ๅนณๅฐ robot_dev_config repo ไธญ็š„ README.mdใ€‚

  2. ็ผ–่ฏ‘

    ้ป˜่ฎคๆ‰“ๅผ€ shared mem ้€šไฟกๆ–นๅผใ€‚

bash robot_dev_config/build.sh -p S600 -s openpi_runtime

่ฟ่กŒ่ฏดๆ˜Ž

1. ๅฏๅŠจ็›ธๆœบ่Š‚็‚น

ๅคด้ƒจ็›ธๆœบ๏ผˆD457๏ผ‰

source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=40
ros2 launch realsense2_camera rs_launch.py \
  serial_no:='_234322302783' \
  camera_namespace:=camera \
  camera_name:=camera \
  rgb_camera.color_profile:=640x480x50

ๅทฆ่…•็›ธๆœบ๏ผˆD457๏ผ‰

source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=40
ros2 launch realsense2_camera rs_launch.py \
  serial_no:='_234322306420' \
  camera_namespace:=camera_left \
  camera_name:=camera_left \
  rgb_camera.color_profile:=640x480x50

2. ๅฏๅŠจ piper ่Š‚็‚น

export COLCON_CURRENT_PREFIX=./install
source /opt/ros/jazzy/setup.bash
source ./install/setup.bash
export ROS_DOMAIN_ID=40

python3 install/lib/openpi_runtime/piper_node \
  --subscribe_topic /aliciaD/action \
  --publish_topic /piper/qpos \
  --publish_rate 50.0 \
  --gripper_open_value 74000 \
  --gripper_close_value 50 \
  --gripper_threshold 0.5 \
  --gripper_state_threshold 64000 \
  --gripper_torque 3500 \
  --can_name can0

3. ๅฏๅŠจ S600 ๆŽจ็†่Š‚็‚น

ๅ‘ฝไปค่กŒๅฏๅŠจ norm_stats_path่ฆไธŽไฝ ็š„ๆจกๅž‹ๆ–‡ไปถๅŒน้…๏ผŒๆณจๆ„ไฟฎๆ”น่ทฏๅพ„ใ€‚ norm_stats.json็š„ไธ‹่ฝฝ่ทฏๅพ„๏ผš

export COLCON_CURRENT_PREFIX=./install
source /opt/ros/jazzy/setup.bash
source ./install/setup.bash
export ROS_DOMAIN_ID=40

python3 install/lib/openpi_runtime/s600_inference_node \
  --ros-args \
  -p norm_stats_path:=norm_stats.json \
  -p action_topic:=/aliciaD/action \
  -p qpos_topic:=/piper/qpos \
  -p num_steps:=1250

ๅŠจไฝœๆ‰ง่กŒ็ฎ—ๆณ•

ๅŠจไฝœๅนณๆป‘็ญ–็•ฅ

ๆœฌ่Š‚็‚น้‡‡็”จไธ‰ๆฎตๅผๅŠจไฝœๅนณๆป‘็ญ–็•ฅ๏ผŒ็กฎไฟๅŠจไฝœๅบๅˆ—ๆ—ขๆต็•…ๅˆ่ƒฝๅ‡†็กฎๅˆฐ่พพ็›ฎๆ ‡็Šถๆ€๏ผš

ๅฝ“ๅ‰็Šถๆ€ โ”€โ”€โ†’ ๆ’ๅ€ผ10ๆฌก โ”€โ”€โ†’ action[0] โ”€โ”€โ†’ ไธ€้˜ถๆปคๆณข โ”€โ”€โ†’ action[1] โ”€โ”€โ†’ ... โ”€โ”€โ†’ action[48] โ”€โ”€โ†’ ๆ’ๅ€ผ10ๆฌก โ”€โ”€โ†’ action[49]
     โ”‚                            โ”‚              โ”‚                                     โ”‚
     โ–ผ                            โ–ผ              โ–ผ                                     โ–ผ
  ๅˆๅง‹ไฝ็ฝฎ                   ้ฆ–ไธชๅŠจไฝœ        ไธญ้—ด48ไธชๅŠจไฝœ                         ๆœ€ๅŽไธ€ไธชๅŠจไฝœ
                          (ๅนณๆป‘่ฟ‡ๆธก)      (alpha=0.15)                         (ๅนณๆป‘ๆ”ถๆ•›)

็ฎ—ๆณ•็ป†่Š‚

  1. ็ฌฌไธ€ๆฎตๆ’ๅ€ผ๏ผˆ้ฆ–ไธชๅŠจไฝœ๏ผ‰

    ไปŽๅฝ“ๅ‰็Šถๆ€ๅˆฐ action[0] ็บฟๆ€งๆ’ๅ€ผ 10 ๆฌก๏ผŒ้ฟๅ…ไปŽ้™ๆญข็Šถๆ€็›ดๆŽฅ่ทณๅ˜ๅˆฐ็›ฎๆ ‡ๅŠจไฝœใ€‚

  2. ไธญ้—ดๆฎตๆปคๆณข๏ผˆaction[1] ๅˆฐ action[48]๏ผ‰

    ไฝฟ็”จไธ€้˜ถไฝŽ้€šๆปคๆณขๅ™จ๏ผŒๆปคๆณขๅ™จ็ณปๆ•ฐ๏ผšalpha = 0.15

    filtered = alpha ร— action + (1 - alpha) ร— previous_filtered
    
  3. ็ฌฌไบŒๆฎตๆ’ๅ€ผ๏ผˆๆœ€ๅŽไธ€ไธชๅŠจไฝœ๏ผ‰

    ไปŽ action[48] ๅˆฐ action[49] ็บฟๆ€งๆ’ๅ€ผ 10 ๆฌก๏ผŒ็กฎไฟๅŠจไฝœๅนณๆป‘ๆ”ถๆ•›ๅˆฐๆœ€็ปˆ็›ฎๆ ‡ใ€‚

  4. ๅคน็ˆชๅค„็†

    • ็ฌฌ 7 ็ปด๏ผˆๅคน็ˆช๏ผ‰ไธๅ‚ไธŽๆปคๆณขๆ’ๅ€ผ
    • ็›ดๆŽฅไฝฟ็”จๆŽจ็†่พ“ๅ‡บ็š„ๅคน็ˆช็Šถๆ€๏ผˆ0 ๆˆ– 1๏ผ‰

ๆ‰ง่กŒๆต็จ‹

้˜ถๆฎต ๅŠจไฝœๆ•ฐ ่ฏดๆ˜Ž
็ฌฌไธ€ๆฎตๆ’ๅ€ผ 10 ๅฝ“ๅ‰็Šถๆ€ โ†’ action[0]
ไธญ้—ดๆฎตๆปคๆณข 48 action[1] โ†’ action[48]
็ฌฌไบŒๆฎตๆ’ๅ€ผ 10 action[48] โ†’ action[49]
ๆ€ป่ฎก 68 ็บฆ 1.36 ็ง’๏ผˆๆฏๆญฅ 20ms๏ผ‰

่ฟ่กŒ็ป“ๆžœ

ไปฅไธ‹่ง†้ข‘ๆผ”็คบไบ† S600 ๆœบๆขฐ่‡‚ๆ‰ง่กŒ Pi0 ๆจกๅž‹็š„่ฟ‡็จ‹๏ผš

S600 Pi0 Demo

่ง†้ข‘่ฏดๆ˜Ž๏ผšๆผ”็คบไบ† S600 ๆœบๆขฐ่‡‚ๆŽฅๆ”ถ็”จๆˆทๆŒ‡ไปค "put the yellow mango on the blue plate" ๅŽ๏ผŒ้€š่ฟ‡ Pi0 ๆจกๅž‹ๆŽจ็†็”ŸๆˆๅŠจไฝœๅบๅˆ—๏ผŒๅนถๅนณๆป‘ๆ‰ง่กŒ็š„ๅ…จ่ฟ‡็จ‹ใ€‚ๅฏไปฅ็œ‹ๅˆฐๆœบๆขฐ่‡‚ไปŽๅˆๅง‹ไฝ็ฝฎๅนณ็จณๆŠ“ๅ–้ป„่‰ฒ่Š’ๆžœๅนถๆ”พ็ฝฎๅˆฐ่“่‰ฒ้ค็›˜ไธŠใ€‚

ๆŸฅ็œ‹่ง†้ข‘๏ผš็‚นๅ‡ปไธŠๆ–นๅ›พ็‰‡ๆˆ– ไธ‹่ฝฝ่ง†้ข‘ ๆŸฅ็œ‹ๅฎŒๆ•ดๆผ”็คบใ€‚

ๆ–‡ไปถ็ป“ๆž„

openpi_runtime/
โ”œโ”€โ”€ inference/
โ”‚   โ””โ”€โ”€ s600_inference_node.py    # S600 ๆŽจ็†ไธป่Š‚็‚น
โ”œโ”€โ”€ robot/
โ”‚   โ””โ”€โ”€ piper_node.py              # Piper ๆœบๆขฐ่‡‚ๆŽงๅˆถ่Š‚็‚น
โ”œโ”€โ”€ common/
โ”‚   โ”œโ”€โ”€ utils/
โ”‚   โ”‚   โ”œโ”€โ”€ ros_data_collector.py
โ”‚   โ”‚   โ””โ”€โ”€ topic_time_synchronizer.py
โ”‚   โ”œโ”€โ”€ pi0_process/
โ”‚   โ”‚   โ”œโ”€โ”€ preprocess.py          # ๆŽจ็†ๅ‰ๅค„็†
โ”‚   โ”‚   โ””โ”€โ”€ postprocess.py         # ๆŽจ็†ๅŽๅค„็†
โ”‚   โ”œโ”€โ”€ ServerUtils/
โ”‚   โ”‚   โ””โ”€โ”€ server.py              # TCP ้€šไฟกๆœๅŠก็ซฏ
โ”‚   โ””โ”€โ”€ msg/
โ”‚       โ””โ”€โ”€ msg.proto              # ๆถˆๆฏๅ่ฎฎๅฎšไน‰
โ”œโ”€โ”€ launch/
โ”‚   โ”œโ”€โ”€ run_pi0_s600.launch        # ๅฏๅŠจๆ–‡ไปถ
โ”‚   โ””โ”€โ”€ readme.md                  # ๅฏๅŠจ่ฏดๆ˜Ž
โ”œโ”€โ”€ resource/
โ”‚   โ””โ”€โ”€ s600_pi0.mp4               # ่ฟ่กŒๆผ”็คบ่ง†้ข‘
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ data_collector/            # ๆ•ฐๆฎ้‡‡้›†ๅทฅๅ…ทไธŽ่ฏดๆ˜Žๆ–‡ๆกฃ
โ””โ”€โ”€ README_cn.md                   # ๆœฌๆ–‡ๆกฃ

ๆ•ฐๆฎ้‡‡้›†๏ผšๅฆ‚้œ€้‡‡้›†่ฎญ็ปƒๆ•ฐๆฎ้›†๏ผŒ่ฏทๅ‚่€ƒ ๆ•ฐๆฎ้‡‡้›†ๆ–‡ๆกฃใ€‚

ๆ•…้šœๆŽ’้™ค

ๅธธ่ง้—ฎ้ข˜

1. ๆ— ๆณ•่Žทๅ–่ง‚ๆต‹ๆ•ฐๆฎ

  • ๆฃ€ๆŸฅ็›ธๆœบ่Š‚็‚นๆ˜ฏๅฆๆญฃๅธธ่ฟ่กŒ
  • ็กฎ่ฎค ROS_DOMAIN_ID ่ฎพ็ฝฎไธ€่‡ด
  • ้ชŒ่ฏ่ฏ้ข˜ๅ็งฐๆ˜ฏๅฆๆญฃ็กฎ

2. ๆŽจ็†่ฟžๆŽฅๅคฑ่ดฅ

  • ็กฎ่ฎค Pi0 ๆŽจ็†ๆœๅŠกๅทฒๅฏๅŠจ
  • ๆฃ€ๆŸฅ็ซฏๅฃ 8888 ๆ˜ฏๅฆ่ขซๅ ็”จ
  • ้ชŒ่ฏ norm_stats.json ๆ–‡ไปถ่ทฏๅพ„ๆญฃ็กฎ

3. ๅŠจไฝœๆ‰ง่กŒไธ่ฟž็ปญ

  • ๆฃ€ๆŸฅ็ฝ‘็ปœๅปถ่ฟŸ
  • ็กฎ่ฎค CAN ้€šไฟกๆญฃๅธธ
  • ่ฐƒๆ•ด sync_time_window ๅ‚ๆ•ฐ

ๅ‚่€ƒ่ต„ๆ–™