orbbec_camera / orbbec_camera_msgs / orbbec_description
piper / piper_description
piper_msgs
piper_control
piper_launch
piper_llm
piper_voice / edge_tts_voice
piper_tf
piper_vision
piper_moveit
piper_sim
piper_nav
piper_ranger
piper_rl
piper_slam
piper_spatiallm
本系统旨在实现以下能力:
🎤 用户说:抓取红杯子
│
▼
🗣️ whisper_node.py(语音识别) <--> tts_output.py(文本转语音)
│ → /voice_command (String) <--> /tts_request (String)
│ → 这里完成了语音的同步输出与异步输出选择,但是还缺乏流式语音识别和流式语音输出,先凑合用吧
▼
🧠 llm_node.py(大模型解析意图) ← LLM(Ollama)
│ → 输出到 /object_request (String)
▼
🎯 SLAM(读取地图,找到目标) ← 语义地图(VLM_mapper)
│ → 输出到 /object_request (String)
▼
🚗 Nav2(导航与避障) ← 地图 + Ranger_SDK
│ → 输出到 /object_request (String)
▼
👁️ yolo_detect_3d.py(到地方了再做新的目标检测,模拟/真实YOLO)
│ → 输出到 /camera_target_point (geometry_msgs/PointStamped)
│ → 注意:相机的坐标系与机械臂的坐标系不一定一致,需要手动标定或使用 TF 动态转换
▼
📐 tf_transformer.py(相机 → base_link 坐标转换)
│ → /base_target_point (geometry_msgs/PointStamped)
│ → 目前使用静态转换(机固定在底座)
▼
🦾 grasp_server.py(发送抓取 Action 到 MoveIt)
│ → 控制机械臂完成抓取任务 ✅
│ → 防跳点机制:若3s内坐标跳跃 > 0.1m 则忽略,连续五次跳点则认定目标消失
│ → 后续需增加末端姿态控制
whisper_node.py | tts_output.py
/voice_command (String)/tts_request (String)llm_node.py
/object_request(String)yolo_detect_3d.py
/camera/color/image_raw、/depth/image_raw 等话题/camera_target_point(geometry_msgs/PointStamped)tf_transformer.py
base_link 坐标系/camera_target_point/base_target_pointgrasp_server.py
/base_target_point
下面是一个可能的启动顺序(可根据实际需求调整):
语音节点
ros2 run piper_voice whisper_node
ros2 run piper_voice tts_output
大模型节点
ros2 run piper_llm llm_node
TF 坐标转换前的准备
# 假设相机静态固定于机械臂底座, 如上面的图所示
# 可根据实际情况调整数值,这里是按照图片中来的大致数值
ros2 run tf2_ros static_transform_publisher 0.02 0. -0.08 0 0 0 camera_link base_link
启动 tf_transformer
ros2 run piper_tf tf_transformer
启动视觉检测
ros2 launch orbbec_camera dabai_dcw2.launch.py
当前的检测还没有接收大模型给定的指令,所以先以瓶子检测作为目标
ros2 run piper_vision yolo_detect_3d --ros-args -p device:=cpu -p interest:=bottle
# 或模拟信号
ros2 topic pub /camera_target_point geometry_msgs/PointStamped \
"{header: {frame_id: 'camera_link'}, point: {x: 0.1, y: 0.05, z: 0.03}}" --once
启动机械臂及其 MoveIt
ros2 launch piper start_single_piper.launch.py
ros2 launch piper_with_gripper_moveit demo.launch.py
启动抓取服务
ros2 run piper_control grasp_server
# 测试抓取服务
ros2 service call /grasp_command std_srvs/srv/Trigger "{}"


本系统整合了:
实现从自然语言指令到实际物理操作的完整链路。各模块之间结构清晰、松耦合,方便按需组合、逐步学习与自主扩展。欢迎贡献更多功能与改进,一起让 Piper 机械臂更强大!
C++
67.7%
Python
26.1%
CMake
4.3%
Shell
1.3%
orbbec_camera / orbbec_camera_msgs / orbbec_description
piper / piper_description
piper_msgs
piper_control
piper_launch
piper_llm
piper_voice / edge_tts_voice
piper_tf
piper_vision
piper_moveit
piper_sim
piper_nav
piper_ranger
piper_rl
piper_slam
piper_spatiallm
本系统旨在实现以下能力:
🎤 用户说:抓取红杯子
│
▼
🗣️ whisper_node.py(语音识别) <--> tts_output.py(文本转语音)
│ → /voice_command (String) <--> /tts_request (String)
│ → 这里完成了语音的同步输出与异步输出选择,但是还缺乏流式语音识别和流式语音输出,先凑合用吧
▼
🧠 llm_node.py(大模型解析意图) ← LLM(Ollama)
│ → 输出到 /object_request (String)
▼
🎯 SLAM(读取地图,找到目标) ← 语义地图(VLM_mapper)
│ → 输出到 /object_request (String)
▼
🚗 Nav2(导航与避障) ← 地图 + Ranger_SDK
│ → 输出到 /object_request (String)
▼
👁️ yolo_detect_3d.py(到地方了再做新的目标检测,模拟/真实YOLO)
│ → 输出到 /camera_target_point (geometry_msgs/PointStamped)
│ → 注意:相机的坐标系与机械臂的坐标系不一定一致,需要手动标定或使用 TF 动态转换
▼
📐 tf_transformer.py(相机 → base_link 坐标转换)
│ → /base_target_point (geometry_msgs/PointStamped)
│ → 目前使用静态转换(机固定在底座)
▼
🦾 grasp_server.py(发送抓取 Action 到 MoveIt)
│ → 控制机械臂完成抓取任务 ✅
│ → 防跳点机制:若3s内坐标跳跃 > 0.1m 则忽略,连续五次跳点则认定目标消失
│ → 后续需增加末端姿态控制
whisper_node.py | tts_output.py
/voice_command (String)/tts_request (String)llm_node.py
/object_request(String)yolo_detect_3d.py
/camera/color/image_raw、/depth/image_raw 等话题/camera_target_point(geometry_msgs/PointStamped)tf_transformer.py
base_link 坐标系/camera_target_point/base_target_pointgrasp_server.py
/base_target_point
下面是一个可能的启动顺序(可根据实际需求调整):
语音节点
ros2 run piper_voice whisper_node
ros2 run piper_voice tts_output
大模型节点
ros2 run piper_llm llm_node
TF 坐标转换前的准备
# 假设相机静态固定于机械臂底座, 如上面的图所示
# 可根据实际情况调整数值,这里是按照图片中来的大致数值
ros2 run tf2_ros static_transform_publisher 0.02 0. -0.08 0 0 0 camera_link base_link
启动 tf_transformer
ros2 run piper_tf tf_transformer
启动视觉检测
ros2 launch orbbec_camera dabai_dcw2.launch.py
当前的检测还没有接收大模型给定的指令,所以先以瓶子检测作为目标
ros2 run piper_vision yolo_detect_3d --ros-args -p device:=cpu -p interest:=bottle
# 或模拟信号
ros2 topic pub /camera_target_point geometry_msgs/PointStamped \
"{header: {frame_id: 'camera_link'}, point: {x: 0.1, y: 0.05, z: 0.03}}" --once
启动机械臂及其 MoveIt
ros2 launch piper start_single_piper.launch.py
ros2 launch piper_with_gripper_moveit demo.launch.py
启动抓取服务
ros2 run piper_control grasp_server
# 测试抓取服务
ros2 service call /grasp_command std_srvs/srv/Trigger "{}"


本系统整合了:
实现从自然语言指令到实际物理操作的完整链路。各模块之间结构清晰、松耦合,方便按需组合、逐步学习与自主扩展。欢迎贡献更多功能与改进,一起让 Piper 机械臂更强大!
C++
67.7%
Python
26.1%
CMake
4.3%
Shell
1.3%