当前位置: 首页 > news >正文

基于RealSense D435相机简单实现手部姿态重定向

基于Intel RealSense D435 相机和 MediaPipe的手部姿态检测,进一步简单实现手部姿态与机器人末端的重定向。
假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境,并且有一个可以控制的机器人接口。

一、手部姿态重定向介绍

手部姿态重定向通常涉及将实时手部关键点映射到虚拟环境或另一个坐标系中(通常需要映射到机器人坐标系中)。可以使用以下步骤实现基本的手部姿态重定向:

  1. 获取关键点坐标:使用手部追踪库(如 MediaPipe)获取手部关键点的坐标。
    具体包括数据获取和手部特征识别。
    首先选择合适的相机,如RGB相机、深度相机(如Kinect或RealSense),或高帧率摄像头获取实时图像或深度数据;
    然后使用机器学习或深度学习算法(如YOLO、SSD等)检测图像中的手部,也可以使用现成的手部检测模型,例如MediaPipe Hands,来实现实时手部跟踪;
    最后提取手部的关键点信息,例如手指关节、掌心等。

  2. 定义目标坐标系:确定将手部姿态映射到哪个坐标系中,比如虚拟现实环境或者机器人坐标系。

  3. 姿态重定向:根据目标坐标系的需求,进行平移、旋转或缩放等变换。
    首先将2D图像坐标转换为3D空间坐标,通常需要相机内参(焦距、主点位置等),根据关键点位置计算手部的姿态(位置、方向、旋转);
    然后可以使用旋转矩阵、四元数等方式表示手部的姿态;最后将手部的当前姿态转换到机器人的目标姿态。

  4. 输出重定向后的姿态:将重定向后的坐标记录用于后续处理。

二、简单实现手部姿态与机器人末端的重定向

MediaPipe检测器可以准确定位腕部框架中21个手指关节坐标的3D关键点和图像上的2D关键点。

代码示例

import cv2
import numpy as np
import pyrealsense2 as rs
import mediapipe as mp
import time# 初始化 RealSense 管道
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
pipeline.start(config)# 初始化 MediaPipe 手部模块
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(max_num_hands=2, min_detection_confidence=0.7)
mp_draw = mp.solutions.drawing_utils# 机器人控制函数(示例),具体需要根据需要通过逆解解算
def move_robot_to(position):# 在这里添加机器人控制代码print(f"移动机器人末端到位置: {position}")try:while True:# 获取图像帧frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()if not color_frame:continue# 转换为 numpy 数组color_image = np.asanyarray(color_frame.get_data())# 将图像转换为 RGB 格式rgb_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2RGB)rgb_image.flags.writeable = False# 检测手部results = hands.process(rgb_image)# 将图像转换回 BGR 格式rgb_image.flags.writeable = Trueannotated_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)# 如果检测到手部if results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:# 绘制手部标记mp_draw.draw_landmarks(annotated_image, hand_landmarks, mp_hands.HAND_CONNECTIONS)# 获取手腕的位置(关节0)wrist = hand_landmarks.landmark[mp_hands.HandLandmark.WRIST]h, w, c = annotated_image.shapewrist_x, wrist_y = int(wrist.x * w), int(wrist.y * h)# 将手腕位置转换为机器人坐标,需要进行不同坐标系的位姿变换robot_position = (wrist_x, wrist_y)move_robot_to(robot_position)  # 移动机器人末端# 显示结果cv2.imshow('Hand Detection', annotated_image)if cv2.waitKey(1) & 0xFF == ord('q'):break
finally:# 释放资源pipeline.stop()cv2.destroyAllWindows()

代码说明

  1. 初始化 RealSense 管道:设置相机流,并启动管道。
  2. 初始化 MediaPipe:配置手部检测模块。
  3. 实时捕获与处理:在循环中捕获视频帧,并检测手部姿态。
  4. 机器人控制:通过 move_robot_to 函数模拟移动机器人末端到手腕位置,需要根据自己的机器人接口实现具体的控制代码。
  5. 显示结果:在窗口中显示手部检测的图像,按 q 键退出。

运行代码

  1. 将代码保存为 hand_pose_robot.py

  2. 连接 Intel RealSense D435 相机。

  3. 在终端中运行代码:

    python hand_pose_robot.py
    

运行结果

在这里插入图片描述

三、总结

确保环境中已经安装了相关库,并且相机正常工作。运行后,窗口中将显示实时的手部检测结果,同时机器人末端会根据手腕位置进行重定向。根据需要调整 move_robot_to 函数的实现,以适配机器人的控制逻辑。

相关文章:

基于RealSense D435相机简单实现手部姿态重定向

基于Intel RealSense D435 相机和 MediaPipe的手部姿态检测,进一步简单实现手部姿态与机器人末端的重定向。 假设已经按照【基于 RealSenseD435i相机实现手部姿态检测】配置好所需的库和环境,并且有一个可以控制的机器人接口。 一、手部姿态重定向介绍 …...

Linux下搭建iSCSI共享存储-Tgt

Linux下搭建iSCSI共享存储-Tgt 在Linux上使用tgt搭建iSCSI共享存储,可以实现多个客户端同时访问共享存储。 1. 安装iSCSI Target软件包 使用下面命令安装: # centos sudo yum install scsi-target-utils sudo systemctl status tgtd# ubuntu sudo ap…...

js中正则表达式中【exec】用法深度解读

exec() 是 JavaScript 正则表达式对象(RegExp)中的一个方法,用于匹配字符串中的特定模式,并返回匹配结果。它比 test() 和 match() 更强大,因为它不仅仅返回匹配成功与否,还返回匹配的具体内容及其相关信息…...

Dockerfile的详解与案例

《Dockerfile 详解与案例》 一、Dockerfile 简介 Dockerfile 是一个用来构建 Docker 镜像的文本文件,它包含了一系列指令,用于描述如何创建一个 Docker 镜像。通过 Dockerfile,你可以定义镜像的基础环境、安装软件包、设置环境变量等操作&a…...

[spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范

文章目录 一. MyBatis XML配置文件1. 配置链接字符串和MyBatis2. 写持久层代码方法定义Interface方法实现xml测试 3. 增删改查增:删改查 二. 开发规范(mysql)三. 其他查询操作1. 多表查询2. #{} 和 ${}(面试题)使用区别 排序功能like查询 三. 数据库连接池 一. MyBatis XML配置…...

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …...

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术:强化学习中的自我进化之道 在人工智能的快速发展中,强化学习(Reinforcement Learning, RL)已成为推动智能体自主学习与优化的关键力量。Self-Play技术,作为强化学习领域的一项前沿创新,通过…...

LCR 008. 长度最小的子数组

文章目录 1.题目2.思路3.代码 1.题目 LCR 008. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件…...

uniApp 解决uniapp三方地图获取位置接口的请求次数限制问题,分别提供 Android 和 iOS 的实现方法(原生插件获取)

以下是使用 UniApp 编写获取位置信息的原生插件步骤,这里分别提供 Android 和 iOS 的实现方法。 一、Android 端实现 创建原生插件模块 在 UniApp 项目目录下创建一个目录,比如 nativeplugins/android/locationPlugin。使用 Android Studio 创建一个 An…...

Zabbix Agent 监控 MySQL 进程状态

1. 使用 Zabbix Agent 监控 MySQL 进程状态 这是最简单的方式,通过 Zabbix Agent 监控 MySQL 进程是否在运行。具体步骤如下: 步骤1: 确认 MySQL 进程的名称 在你的 CentOS 服务器上,运行以下命令来确认 MySQL 进程的名称: ps aux | grep mysql通常,MySQL 服务的进程名…...

【模型】感知器

感知器是最早的人工神经网络之一,也是现代深度学习的基础之一。 1. 感知器(Perceptron) 1.1 定义与功能 感知器是一种线性二分类模型,旨在模拟生物神经元的基本功能。它通过对输入特征进行加权求和,并应用激活函数来…...

HtmlCss 基础总结(基础好了才是最能打的)五

Html&Css 基础学习回顾总结 Html&Css 基础总结(基础好了才是最能打的)一 Html&Css 基础总结(基础好了才是最能打的)二 Html&Css 基础总结(基础好了才是最能打的)三 Html&Css 基础总结…...

图神经网络实战——分层自注意力网络

图神经网络实战——分层自注意力网络 0. 前言1. 分层自注意力网络1.1 模型架构1.2 节点级注意力1.3 语义级注意力1.4 预测模块 2. 构建分层自注意力网络相关链接 0. 前言 在异构图数据集上,异构图注意力网络的测试准确率为 78.39%,比之同构版本有了较大…...

基于深度学习的数字识别系统的设计与实现(python、yolov、PyQt5)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

ChatGPT 提取文档内容,高效制作PPT、论文

随着人工智能生成内容(AIGC)的快速发展,利用先进的技术工具如 ChatGPT 的 RAG(Retrieval-Augmented Generation,检索增强生成)模式,可以显著提升文档内容提取和内容创作的效率。以下将详细介绍如…...

3、等保1.0 与 2.0 的区别

数据来源:3.等保1.0和2.0的区别_哔哩哔哩_bilibili 等保1.0时代VS等保2.0时代五个规定动作:定级、备案、建设整改、等级测评、监督检查工作内容维持5个规定动作,增加风险评估、安全监测、通报预警、事件调查、数据防护自主可控、供应链安全、…...

Angular面试题九

一、在Angular中,你如何管理全局状态或跨组件共享数据?有哪些常见的实现方式? 在Angular中,管理全局状态或跨组件共享数据是应用开发中的一个重要方面。这有助于保持数据的一致性和可维护性,特别是在复杂的应用中。以下…...

(转载)智能指针shared_ptr从C++11到C++20

shared_ptr和动态数组 - apocelipes - 博客园 (cnblogs.com) template<typename T> std::shared_ptr<T> make_shared_array(size_t size) { return std::shared_ptr<T>(new T[size],std::default_delete<T[]>()); } std::shar…...

Ubuntu 上安装 Miniconda

一、下载 Miniconda 打开终端。访问 Anaconda 官方仓库下载页面https://repo.anaconda.com/miniconda/选择Miniconda3-py310_24.7.1-0-Linux-x86_64.sh&#xff0c;进行下载。文件名当中的py310_24.7.1表示&#xff0c;在 conda 的默认的 base 环境中的 Python 版本是3.10&…...

【Vue系列五】—Vue学习历程的知识分享!

前言 本篇文章讲述前端工程化从模块化到如今的脚手架的发展&#xff0c;以及Webpack、Vue脚手架的详解&#xff01; 一、模块化 模块化就是把单独的功能封装到模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但可以通过特定的接口公开内部成员…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...