大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言

有没有遇到过这样的情况:当你手持手机或相机准备拍摄视频时,心中已经构想了完美的画面,但却因为实际的限制无法捕捉到理想中的角度?这种情况可能会让人感到挫折。例如,如果想要从地面一只蚂蚁的视角拍摄,镜头需要与蚂蚁处于同一水平线上,这在操作上不仅困难,而且往往难以实现。

尽管目前市场上有许多稳定设备如平衡环架(gimbal)来辅助拍摄,以求达到稳定和多角度的拍摄效果,但在此篇文章中,我将探索一种独特的解决方案:通过将手机安装在机械臂的末端来进行拍摄,以实现那些传统方法难以捕捉的特殊视角。此次尝试不仅旨在克服拍摄过程中的物理限制,而且也期望通过技术的创新来开拓我们对摄影角度的想象和实践。

设备

myCobot 320 M5stack

myCobot 320,一款具备六自由度的协作型机械臂,凭借其独特的设计和高精度伺服电机成为了领域内的亮点。这款机械臂拥有最大350mm的工作半径和最大1000g的末端负载能力,使其适用于广泛的应用场景。myCobot 320不仅支持灵活的视觉开发应用,还提供了深入的机械运动原理解析,为用户带来了12个标准的24V工业IO接口,满足不同的开发需求。

它的开放性极高,兼容大多数主流操作系统和编程语言,包括Python和ROS等,为开发者提供了极大的灵活性和自由度。无论是在教育、研发还是工业应用中,myCobot 320都能提供强大支持,使创新和应用开发更加便捷高效。

myCobot Pro phone holder

它可以安装在myCobot 320,myCobot pro 630机械臂的末端,能够稳定的固定住手机。

以上就是我们需要使用到的设备了。

初次尝试

安装手机支架

整体安装的效果图片

基础控制测试

做一个简单的尝试。

拍摄视频

给机械臂进行关节控制的编程,让我们一起看看效果如何。

尽管视频中展示的机械臂运动轨迹看似简单,但实际上,调整这些轨迹点位仍需耗费大量时间,且效果未必理想。因此,我在考虑是否存在更优解决方案,例如,通过设定几种运动模式和预先规划机械臂的拍摄路径。这不仅能够有效利用机械臂辅助拍摄,同时也提供了一种更为高效的部署方式。

编程挑战

开发需求分析

确定使用的设备如下

产品

功能

备注

myCobot 320 M5Stack

整个项目的核心搭载手机进行拍摄。

myCobot Pro Phone Holder

在机械臂的末端安装,能够保持手机的稳定

 Smart Phone

进行拍摄的设备

ios或者,安卓系统的手机

Computer

编写代码,控制机械臂,调动程序

需求:需求优化:

目标是为静态物体拍摄场景设计一系列创新的视频拍摄方式,初步计划采用三种方法:

1. 利用机械臂末端固定的手机,实现物体360°全景视频拍摄。

2. 创建一种画面效果,从远处平缓推进至物体近前,模拟“拉近镜头”的效果。

3. 实现机械臂末端的快速旋转与移动,捕捉动感十足的画面。

为了精准控制拍摄过程,计划利用OpenCV机器视觉算法和AVFoundation iOS框架,通过Python脚本控制机械臂的精确运动。我们将通过手机摄像头识别物体的尺寸,进而计算出机械臂末端与物体之间的理想距离。根据这个距离,设计相应的机械臂运动算法,确保拍摄过程中能够获得最佳画面效果。

YOLO视觉算法

为了节省时间,我们将不会自行训练机器视觉算法来识别特定物体。相反,我们直接采用其他开发者已经训练优化的YOLOv5库,以实现对目标物体的准确检测。

import cv2
import torch
from pathlib import Path
from models.experimental import attempt_load
from utils.general import non_max_suppression, scale_coords
from utils.torch_utils import select_device, time_synchronizeddef detect_apples(img_path):device = select_device('')weights = 'yolov5s.pt'model = attempt_load(weights, map_location=device)img0 = cv2.imread(img_path)  # BGRimg = img0[:, :, ::-1]  # RGBimg = torch.from_numpy(img).to(device)img = img.float()  # uint8 to fp16/32img /= 255.0  # 0 - 255 to 0.0 - 1.0if img.ndimension() == 3:img = img.unsqueeze(0)# Inferencet1 = time_synchronized()pred = model(img)[0]# Apply NMSpred = non_max_suppression(pred, 0.4, 0.5, classes=None, agnostic=False)t2 = time_synchronized()print(f'Inference time: {(t2 - t1):.3f}s')# Process detectionsfor i, det in enumerate(pred):  # detections per imagegn = torch.tensor(img0.shape)[[1, 0, 1, 0]]  # normalization gain whwhif len(det):det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()for *xyxy, conf, cls in reversed(det):label = f'{model.names[int(cls)]} {conf:.2f}'plot_one_box(xyxy, img0, label=label, color=(255, 0, 0))return img0def plot_one_box(xyxy, img, color=None, label=None, line_thickness=None):# Plots one bounding box on image imgtl = (line_thickness or round(0.002 * max(img.shape[0:2])) + 1)  # line/font thicknesscolor = color or [random.randint(0, 255) for _ in range(3)]c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)if label:tf = max(tl - 1, 1)  # font thicknesst_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA)  # filledcv2.putText(img,label,(c1[0], c1[1] - 2),0,tl / 3,[225, 255, 255],thickness=tf,lineType=cv2.LINE_AA,)return imgif __name__ == '__main__':img_path = 'test_image.jpg'  # 输入你的图像路径result_img = detect_apples(img_path)cv2.imshow('Result', result_img)cv2.waitKey(0)cv2.destroyAllWindows()

保留识别物体的尺寸的数据,之后要用在别的地方上。

机械臂运动控制算法

机械臂的控制方法

# 这个方法控制机械臂的关节进行运动
mc.send_angles([angle_list],speed)# 这个方法用坐标控制机械臂在空间上进行运动
mc.send_coords([coords_list],speed,mode)example:
mc.send_angles([0,0,0,0,0,0],100)
time.sleep(2)
mc.send_coords([(-3.6), 30.32, (-45.79), (-46.84), 97.38, 0.35],100,1)

获得物体的尺寸数据之后,定义机械臂末端距离物体的合理位置

def calculate_angles_for_distance(distance):# 根据理想距离计算机械臂的关节角度# 这里的计算需要根据实际情况和物理参数进行调整return [0, -10, distance * 0.1, 0, 30, 0]  def calculate_adjusted_angles(action_angles):# 基于特定动作后可能需要的坐标调整计算新的角度# 这里仅为示例,具体逻辑根据需要调整return [angle * 1.1 for angle in action_angles]  

再选择模式对应的运动控制

#360全景拍摄
# 定义具体的拍摄模式
def shoot_mode_360(ideal_distance):print("执行360°全景拍摄模式")# 首先,移动到理想拍摄位置move_to_ideal_position(ideal_distance)# 处理理想距离ideal_ratio =  ratio# 执行360°全景拍摄的特定动作mc.send_angles([0, 0, 0, 0, 0, 0], speed=15)time.sleep(1)mc.send_coords([angle * ratio for angle in angles_list]
,15)time.sleep(1)mc.send_coords([angle * ratio for angle in angles_list]
,15)time.sleep(1)mc.send_coords([angle * ratio for angle in angles_list]
,15)

手机相机的调用

在开发过程中,尝试调用手机摄像头接口以实现自动化拍摄功能,我遇到了一系列挑战。作为我的第一次深入探索AVFoundation iOS框架,目标是激活并控制手机的摄像头,我发现自己还未能完全成功实现这一功能。当前的难点主要集中在如何准确调用摄像头进行视频拍摄,以及在拍摄过程中如何通过软件调整来补偿图像的可能拉伸,这需要对机械臂的运动进行精细控制。

这些问题标志着我后续研究的重点方向,需要我继续深入学习AVFoundation框架的使用,特别是其控制摄像头的具体方法,并探索如何将这些控制整合到机械臂的运动调整中,以确保最终拍摄出的视频质量符合预期。

总结

随着这次项目记录的结束,我意识到虽然项目尚有诸多不足,但这次尝试将两个独立设备在不同的框架下协同工作,对我来说仍是一次宝贵的经验。确实,整个项目目前尚未达到我心中的理想状态。然而,我认为这个项目探索的方向极具潜力,考虑到市面上已经存在能够拍摄出令人赞叹效果的专业摄影机械臂,这强化了我对项目潜在价值的信念。

机械臂的应用已经广泛渗透到我们的日常生活中,无论是在工业生产、日常服务,还是在艺术创作领域,都发挥着越来越重要的作用。随着人工智能技术的不断进步和普及,AI与机器人的结合无疑将成为未来技术发展的重要趋势。我对机器人技术的未来发展抱有极大的期待,相信未来它们将在更多领域发挥出惊人的能力和创造力。

如果你对我的项目感兴趣,或者有任何想法和建议,非常欢迎与我交流。你的反馈将对我继续改进和完善这个项目提供宝贵的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构7-1-查找-线性-二分法-二叉树-哈希表】

目录 1 查找基本概念2 线性表的查找2.1 顺序查找2.2 二分法查找2.3 分块查找 3 树表的查询3.1 二叉排序树3.1.1 定义3.1.2 二叉树的建立、遍历、查找、增加、删除:3.1.3 代码实现: 3.2 平衡二叉树3.2.1 平横因子3.2.2 不平横树的调整-左旋3.2.3 不平横树…

Python实现的人脸识别系统

一、引言 人脸识别技术作为计算机视觉领域的重要应用之一,近年来得到了广泛的研究和应用。在Python环境下,我们可以利用开源库和算法来实现一个人脸识别系统。本文将介绍如何使用Python及相关库来实现一个简单的人脸识别系统,包括人脸检测、特征提取和匹配识别等关键步骤。…

[系统安全] 六十.威胁狩猎 (1)APT攻击检测及防御与常见APT组织的攻击案例分析

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…

大语言模型在专业领域的应用——医疗场景下的大语言模型

大语言模型在专业领域的应用——医疗场景下的大语言模型 构建面向医疗的大语言模型数据资源总结医疗是与人类生活密切相关的重要领域之一。由于具有较强的通用任务解决能力,大语言模型被广泛用于辅助医生处理各种相关医疗任务,例如医疗诊断、临床报告生成、医学语言翻译、心理…

AI大模型-使用 FastChat 部署ChatGLM3

文章目录 FastChat介绍支持的模型安装环境命令行方式加载本地模型web服务方式运行本地模型启动 the controller启动 model worker(s)启动 Gradio web serverAPI-Based的模型支持新模型的支持参考资料FastChat介绍 FastChat是一个用于培训、服务和评估基于大型语言模型的聊天机…

[极客大挑战 2019]Upload、[ACTF2020 新生赛]Upload、[MRCTF2020]你传你呢

[极客大挑战 2019]Upload 打开环境&#xff0c;是上传一句话木马的题 先上传1.php试试&#xff0c;发现不可以 试试改后缀为phtml&#xff0c;提示语句中不能包含<?&#xff0c;只能改木马&#xff1a; <script language"php">eval($_POST[line]);</sc…

etcd集群安装和单机安装

etcd集群安装和单机安装 etcd介绍 etcd 是基于 Raft 的分布式 key-value 存储系统&#xff0c;由 CoreOS 开发&#xff0c;常用于服务发现、共享配置以及并发控制&#xff08;如 leader 选举、分布式锁等&#xff09;。kubernetes 使用 etcd 存储所有运行数据。etcd基于Go语言…

Stm32cubeide 在指定文件夹中生成以时间命名的文件_时间命名的bin文件

其实就是在生成文件后 使用命令将文件转换改名并保存在指定文件下 命令如下 在项目目录下Bin_file文件夹中生成以 项目名称+时间为文件名的bin文件 arm-none-eabi-objcopy ${ProjDirPath}/Debug/*.elf -O binary P r o j D i r P a t h / B i n f i l e / {ProjDirPath}/Bi…

实现多线程并发服务器和多进程并发服务器(Linux网络编程)

多进程并发服务器 实现流程 1. Socket(); 创建 监听套接字 lfd2. Bind() 绑定地址结构 Strcut scokaddr_in addr;3. Listen(); 4. while (1) {cfd Accpet(); 接收客户端连接请求。pid fork();if (pid 0){ 子进程 read(cfd) --- 小写->大写 --write(cfd) close(lf…

pytest测试之conftest详解

一、概述   Conftest是一个Python测试框架&#xff0c;它是pytest的一个组件&#xff0c;用于配置测试环境和参数。通过Conftest&#xff0c;我们可以创建一个可复用的测试配置文件&#xff0c;以便在多个测试模块之间共享配置信息。Conftest非常适合用于管理大型项目中的测试…

scrollintoview方法滚动距离顶部距离

scrollIntoView 方法是 DOM API 的一部分&#xff0c;用于将元素滚动到视图中。这个方法接收一个布尔值参数 alignToTop&#xff0c;指示是否需要滚动到视图的顶部。 以下是如何使用 scrollIntoView 方法的示例代码&#xff1a; // 获取需要滚动的元素 const element docume…

机器学习-11-卷积神经网络-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步&#xff1a;数据准备第二步&#xff1a;定义网络第三步&#xff1a;训练网络第四步&#xff1a;测试训练好的网络 总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…

编译Qt6.5.3LTS版本(Mac/Windows)的mysql驱动(附带编译后的全部文件)

文章目录 0 背景1 编译过程2 福利参考 0 背景 因为项目要用到对MYSQL数据库操作&#xff0c;所以需要连接到MYSQL数据库。但是连接需要MYSQL驱动&#xff0c;但是Qt本身不自带MYSQL驱动&#xff0c;需要自行编译。网上有很多qt之前版本的mysql驱动&#xff0c;但是没有找到qt6…

使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B

2024年4月18日&#xff0c;meta开源了Llama 3大模型[1]&#xff0c;虽然只有8B[2]和70B[3]两个版本&#xff0c;但Llama 3表现出来的强大能力还是让AI大模型界为之震撼了一番&#xff0c;本人亲测Llama3-70B版本的推理能力十分接近于OpenAI的GPT-4[4]&#xff0c;何况还有一个4…

降薪、调岗、裁员,库迪咖啡没有“钱景”

文 | 螳螂观察 作者 | 青玥 2024年&#xff0c;连锁咖啡行业依然激战正酣。 卷价格、卷联名、卷代言人&#xff0c;部分咖啡小店已经在这样内卷的氛围中&#xff0c;率先被淘汰&#xff0c;咖门的统计数据显示&#xff0c;2023年前九个月&#xff0c;注销的咖啡企业有9825家…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号&#xff0c;且自动保留两位有效数字 输入&#xff1a;123 输出&#xff1a;123.00 输入&#xff1a;12345 输出&#xff1a;12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

前端高并发的出现场景及解决方法——技能提升——p-limit的使用

最近在写后台管理系统的时候&#xff0c;遇到一个场景&#xff0c;就是打印的页面需要根据传入的多个id&#xff0c;分别去请求详情接口。 比如id有10个&#xff0c;则需要调用10次详情接口获取到数据&#xff0c;最后对所有的数据进行整合后页面渲染。 相信大家或多或少都遇到…

redis中使用pipeline批量执行命令,提升性能

注意&#xff1a;此操作非原子性 将一批要执行的redis命令提交到pipeline中&#xff0c;pipeline一次性的将数据发送给服务器&#xff0c;服务器再逐条执行命令。 redisTemplate中已经提供了对应方法executePipelined()可以直接调用&#xff0c;它支持两个类型…

ASP.NET实验室预约系统的设计

摘 要 实验室预约系统的设计主要是基于B/S模型&#xff0c;在Windows系统下&#xff0c;运用ASP.NET平台和SQLServer2000数据库实现实验室预约功能。该设计主要实现了实验室的预约和管理功能。预约功能包括老师对实验室信息、实验项目和实验预约情况的查询以及对实验室的预约…

Linux--05---相对路径与绝对路径、终端的认识

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. 相对路径与绝对路径切换到用户家目录&#xff1a;cd ~当前目录&#xff1a;./ 2. 对终端的认识3. 文件的类型颜色表示的文件类型&#xff1a;文件类型和权限的表…