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

本文主要是介绍大象机器人开源六轴协作机械臂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与机器人的结合无疑将成为未来技术发展的重要趋势。我对机器人技术的未来发展抱有极大的期待,相信未来它们将在更多领域发挥出惊人的能力和创造力。

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

这篇关于大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943785

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

青龙面板2.9之Cdle傻妞机器人编译教程

看到有的朋友对傻妞机器人感兴趣,这里写一下傻妞机器人的编译教程。 第一步,这里以linux amd64为例,去官网下载安装go语言安装包: 第二步,输入下方指令 cd /usr/local && wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz -O go1.16.7.linux-amd64.tar.gz

计算机Java项目|基于SpringBoot的网上摄影工作室

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码  项目编号:L-BS-QBBSSPRINGBOOT

(1995-2022年) 全国各省份-技术交易活跃度

技术交易活跃度是一个关键指标,用于衡量技术市场的交易频繁程度和活跃性。它不仅显示了市场参与者对技术交易的参与热情,而且交易的频率也体现了市场的活力。这一指标对于不同的利益相关者具有不同的意义: 对投资者而言,技术交易活跃度是把握市场趋势、评估交易策略和预测市场波动的重要工具。对企业来说,技术交易活跃度反映了其技术创新的活跃程度和市场竞争的激烈程度,有助于企业制定技术创新和市场竞争策略。对政策制定

AI与音乐:当技术与艺术发生冲突

AI在创造还是毁掉音乐? 在科技日新月异的今天,人工智能(AI)已经渗透到了我们生活的方方面面,音乐领域也不例外。然而,尽管AI为音乐创作带来了前所未有的便利,我却深感其正在毁掉音乐的本质。 首先,AI的介入使得音乐创作过程变得过于机械化。传统的音乐创作往往需要音乐家们经过长时间的思考、尝试和修改,最终才能创作出触动人心的作品。这一过程不仅体现了音乐家的才华和技艺,更蕴含了他们对生活的感悟和对

IPD推行成功的核心要素(十一)技术规划与平台规划促进公司战略成功

随着外部大环境的影响,各企业仅有良好的愿望是不够的。预测并顺应新兴市场和技术的变化,变危机为转机,不断推出强大的产品才是一个公司持续繁荣的根本保障。而高效的产品开发往往是基于某些关键技术,针对市场推出的一个或几个产品系列,这些产品系列通常共用一些产品平台,共用一种或者几种关键技术。当一家企业进入了平稳发展期,已经建立了较为完善的管理制度和产品开发流程,但是依然认为竞争对手是那样强大,那样不可战胜。