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

给自己的机器人部件安装单目摄像头并实现gazebo仿真功能

手术执行器添加摄像头

  • 手术执行器文件夹surgical_new内容展示
  • 如何添加单目摄像头
  • 下载现成的机器人环境文件
  • 启动仿真环境

手术执行器文件夹surgical_new内容展示

在这里插入图片描述
进入src文件夹下选择进入vision_obliquity文件夹
在这里插入图片描述
选择launch
在这里插入图片描述
有两个可用gazebo中rviz展示的launch文件,robot.launch是添加有摄像头的手术执行器文件,robot_env.launch进一步添加有环境信息的手术执行器文件
在这里插入图片描述
下图是robot.launch展示(红色方块是我们添加的摄像头):
在这里插入图片描述
下图是robot_env.launch展示:
在这里插入图片描述

如何添加单目摄像头

参考b站学习视频的添加摄像头部分内容: https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=263&vd_source=9e3999ac88af2c6889c5f00cccc8d215
对应课程文档链接:http://www.autolabor.com.cn/book/ROSTutorials/
实现为我们自己的机器人添加摄像头功能:
实现流程:
摄像头仿真基本流程:
已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加摄像头配置;
将此文件集成进xacro文件;
启动 Gazebo,使用 Rviz 显示摄像头信息。

  1. 摄像头 xacro 文件
    camera.xacro,代码内容如下:
    camera link、将相机作为一个link添加到机器人上的部件link2,于是便有个camera2link2的关节,type为固定的fixed
<!-- 摄像头相关的 xacro 文件 -->
<robot name="my_camera" xmlns:xacro="http://wiki.ros.org/xacro"><!-- 摄像头属性 --><xacro:property name="camera_length" value="0.001" /> <!-- 摄像头长度(x) --><xacro:property name="camera_width" value="0.00025" /> <!-- 摄像头宽度(y) --><xacro:property name="camera_height" value="0.00025" /> <!-- 摄像头高度(z) --><xacro:property name="camera_x" value="0" /> <!-- 摄像头安装的x坐标 --><xacro:property name="camera_y" value="0" /> <!-- 摄像头安装的y坐标 --><xacro:property name="camera_z" value="0.02" /> <!-- 摄像头安装的z坐标:底盘高度 / 2 + 摄像头高度 / 2  --><!-- Create laser reference frame --><link name="camera"><visual><origin xyz="0.000198755346578818 -0.000268944626068074 -0.0105330004865362" rpy="0 0 0" /><geometry><box size="${camera_length} ${camera_width} ${camera_height}" /></geometry><material name="red"/></visual><collision><origin xyz="0.000198755346578818 -0.000268944626068074 -0.0105330004865362" rpy="0 0 0" /><geometry><box size="${camera_length} ${camera_width} ${camera_height}" /></geometry></collision></link><!-- 关节 --><joint name="camera2link2" type="fixed"><parent link="link2"/><child link="camera" /><!-- 需要计算两个 link 的物理中心之间的偏移量 --><!-- 设置joint相对于父节的偏移量 --><origin xyz="-0.00028 -0.0003 0.0102" rpy="0 0 0" /><!-- 设置关节旋转参考的坐标轴,0表示不绕该轴旋转,1表示绕该轴旋转 --><axis xyz="0 0 1" /></joint> 
</robot>
  1. Gazebo 仿真摄像头
    通过 Gazebo 模拟摄像头传感器,并在 Rviz 中显示摄像头数据
    新建 xacro 文件命名为cameraz_gazebo.xacro,配置摄像头传感器信息:
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="my_sensors"><gazebo reference="camera"><material>Gazebo/Red</material></gazebo><gazebo reference="camera"><sensor type="camera" name="camera_node"><update_rate>30.0</update_rate><camera name="head"><horizontal_fov>1.3962634</horizontal_fov><image><width>1280</width><height>720</height><format>R8G8B8</format></image><clip><near>0.02</near><far>300</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><plugin name="gazebo_camera" filename="libgazebo_ros_camera.so"><alwaysOn>true</alwaysOn><updateRate>0.0</updateRate><cameraName>/camera</cameraName><imageTopicName>image_raw</imageTopicName><cameraInfoTopicName>camera_info</cameraInfoTopicName><frameName>camera</frameName><hackBaseline>0.07</hackBaseline><distortionK1>0.0</distortionK1><distortionK2>0.0</distortionK2><distortionK3>0.0</distortionK3><distortionT1>0.0</distortionT1><distortionT2>0.0</distortionT2></plugin></sensor></gazebo>
</robot>

1.2摄像头 xacro 文件
camera.xacro,代码内容如下:
camera link、将相机作为一个link添加到机器人上link2,于是便有个camera2link2的关节,type为固定的fixed

<!-- 摄像头相关的 xacro 文件 -->
<robot name="my_camera" xmlns:xacro="http://wiki.ros.org/xacro"><!-- 摄像头属性 --><xacro:property name="camera_length" value="0.001" /> <!-- 摄像头长度(x) --><xacro:property name="camera_width" value="0.00025" /> <!-- 摄像头宽度(y) --><xacro:property name="camera_height" value="0.00025" /> <!-- 摄像头高度(z) --><xacro:property name="camera_x" value="0" /> <!-- 摄像头安装的x坐标 --><xacro:property name="camera_y" value="0" /> <!-- 摄像头安装的y坐标 --><xacro:property name="camera_z" value="0.02" /> <!-- 摄像头安装的z坐标:底盘高度 / 2 + 摄像头高度 / 2  --><!-- Create laser reference frame --><link name="camera"><visual><origin xyz="0.000198755346578818 -0.000268944626068074 -0.0105330004865362" rpy="0 0 0" /><geometry><box size="${camera_length} ${camera_width} ${camera_height}" /></geometry><material name="red"/></visual><collision><origin xyz="0.000198755346578818 -0.000268944626068074 -0.0105330004865362" rpy="0 0 0" /><geometry><box size="${camera_length} ${camera_width} ${camera_height}" /></geometry></collision></link><!-- 关节 --><joint name="camera2link2" type="fixed"><parent link="link2"/><child link="camera" /><!-- 需要计算两个 link 的物理中心之间的偏移量 --><!-- 设置joint相对于父节的偏移量 --><origin xyz="-0.00028 -0.0003 0.0102" rpy="0 0 0" /><!-- 设置关节旋转参考的坐标轴,0表示不绕该轴旋转,1表示绕该轴旋转 --><axis xyz="0 0 1" /></joint> 
</robot>

封装惯性矩阵算法的 xacro 文件,内容如下的my_head.xacro文件书写,这个文件复制于链接http://www.autolabor.com.cn/book/ROSTutorials/di-6-zhang-ji-qi-ren-xi-tong-fang-zhen/66-urdfji-cheng-gazebo/662-urdf-ji-cheng-gazebo-xiang-guan-she-zhi.html的6.6.2 URDF集成Gazebo相关设置这一小节,将标准的球体、圆柱与立方体的惯性矩阵公式封装成xacro实现:

<robot name="base" xmlns:xacro="http://wiki.ros.org/xacro"><!-- Macro for inertia matrix --><xacro:macro name="sphere_inertial_matrix" params="m r"><inertial><mass value="${m}" /><inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"iyy="${2*m*r*r/5}" iyz="0" izz="${2*m*r*r/5}" /></inertial></xacro:macro><xacro:macro name="cylinder_inertial_matrix" params="m r h"><inertial><mass value="${m}" /><inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"iyy="${m*(3*r*r+h*h)/12}" iyz = "0"izz="${m*r*r/2}" /> </inertial></xacro:macro><xacro:macro name="Box_inertial_matrix" params="m l w h"><inertial><mass value="${m}" /><inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"iyy="${m*(w*w + l*l)/12}" iyz= "0"izz="${m*(w*w + h*h)/12}" /></inertial></xacro:macro>
</robot>

组合执行器与摄像头

<!-- 组合执行器与摄像头 -->
<robot name="my_robot" xmlns:xacro="http://wiki.ros.org/xacro"><xacro:include filename="myhead.xacro" /><xacro:include filename="vision_obliquity_gazebo.xacro" /><xacro:include filename="camera.xacro" /><xacro:include filename="camera_gazebo.xacro" />
</robot>

这里的vision_obliquity_gazebo.xacro是我们自己的机器人xacro文件,也就是手术执行器,替换成你们自己的机器人描述文件。

下载现成的机器人环境文件

1.下载官方模型库
https://github.com/osrf/gazebo_models
2.将模型库复制进 gazebo
将得到的box_hours.world文件复制到 /urdf/worlds下
在这里插入图片描述

启动仿真环境

  1. 进入到手术执行器文件夹surgical_new文件夹路径下
    执行如下命令,启动gazebo:
catkin_make
source devel/setup.bash
roslaunch vision_obliquity robot_env.launch

在这里插入图片描述

  1. 进入到手术执行器文件夹surgical_new文件夹路径下
    另起一个终端terminal,执行命令,就可以看到摄像头环境信息
rqt_image_view

在这里插入图片描述

相关文章:

给自己的机器人部件安装单目摄像头并实现gazebo仿真功能

手术执行器添加摄像头 手术执行器文件夹surgical_new内容展示如何添加单目摄像头下载现成的机器人环境文件启动仿真环境 手术执行器文件夹surgical_new内容展示 进入src文件夹下选择进入vision_obliquity文件夹 选择launch 有两个可用gazebo中rviz展示的launch文件&#xff0…...

用AI的视角看世界

前言 2024年将是Ai人工智能在各个行业垂直领域发展的元年。 随着2022年11月openai 的大语言模型chatgpt3.5的诞生&#xff0c;已经预示着互联网时代&#xff0c;移动互联网时代即将迎来新的变革&#xff0c;也预示着web3.0和元宇宙更近了一步。 回顾历史&#xff0c;互联网的…...

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64)

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64) 一、算法介绍二、算法步骤三、算法实现1.代码 (完整,注释清晰,可直接用)2.结果一、算法介绍 首先说明: ------这里代码手动实现,不调用matlab提供的法向量计算接口,更有助于大家了解法向量和曲率的计算方法,…...

拯救鲨鱼!Helping wireshark!wireshark未响应解决方法

前言 做题的的时候 在用wireshark解密tls秘钥的时候 我的小鲨鱼突然未响应了 然后我多次尝试无果 并且殃及池鱼 我电脑上所有的流量包都打不开了&#xff1f;&#xff01;&#xff01;&#xff01; 于是乎 尝试删了重下 还是未响应 开始怀疑电脑 重启电脑两次 还是打…...

设计模式之责任链讲解

责任链模式适用于需要将请求和处理解耦的场景&#xff0c;同时又需要动态地组织处理逻辑的场景。 通过使用责任链模式&#xff0c;可以实现请求的动态处理、灵活的扩展和简化的代码编写&#xff0c;提高系统的可维护性和可扩展性。 一、责任链入门 以下这是GPT生成的责任链代…...

K8s: 将一个节点移出集群和相关注意事项

前置步骤 在Kubernetes集群中&#xff0c;要移出一个节点&#xff0c;你需要执行以下步骤&#xff1a; 1 &#xff09;将节点标记为不可调度 首先&#xff0c;你需要将目标节点标记为不可调度&#xff0c;以确保Kubernetes不会在该节点上调度新的Pod这可以通过执行以下命令实…...

Python学习笔记24 - 学生信息管理系统

1. 需求分析 2. 系统设计 3. 系统开发必备 4. 主函数设计 5. 学生信息维护模块设计 a. 录入学生信息 b. 删除学生信息 c. 修改学生信息 d. 查询学生信息 e. 统计学生总人数 f. 显示所有学生信息 g. 排序模块设计 6. 项目打包...

【物联网应用案例】某制造企业电锅炉检测项目

供暖行业在我国的经济发展中占据着重要的地位&#xff0c;然而&#xff0c;长期以来&#xff0c;该行业存在着自动化水平低、管理效率不高等问题&#xff0c;制约了其持续发展。为了解决这些问题&#xff0c;吉林某电锅炉生产厂家进行了一项创新性的尝试。 该厂家通过集成物联…...

设计模式实践

结合设计模式概念和在java/spring/spring boot中的实战&#xff0c;说明下列设计模式。 一、工厂模式 这里只讲简单工厂模式&#xff0c;详细的可以参考Java工厂模式&#xff08;随笔&#xff09;-CSDN博客。工厂类会根据不同的参数或条件来决定创建哪种对象&#xff0c;这样…...

嵌入式学习52-ARM1

知识零散&#xff1a; 1.flash&#xff1a; nor flash 可被寻地址 …...

Java(MySQL基础)

数据库相关概念 MySOL数据库 关系型数据库(RDBMS) 概念: 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。特点: 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL SOL通用语法…...

预约系统的使用

预约系统的使用 目录概述需求&#xff1a; 设计思路实现思路分析1.用户年规则 在 预约系统中的使用流程 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wa…...

酷开科技OTT大屏营销:开启新时代的营销革命

随着互联网技术的不断发展和普及&#xff0c;大屏已经成为越来越多家庭选择的娱乐方式。在这个背景下&#xff0c;酷开科技凭借其强大的技术实力和敏锐的市场洞察力&#xff0c;成功地将大屏转化为一种新的营销渠道&#xff0c;为品牌和企业带来了前所未有的商业机会。 酷开科技…...

网络安全(防火墙,IDS,IPS概述)

问题一:什么是防火墙,IDS,IPS? 防火墙是对IP:port的访问进行限制,对访问端口进行制定的策略去允许开放的访问,将不放开的端口进行拒绝访问,从而达到充当防DDOS的设备。主要是拒绝网络流量,阻断所有不希望出现的流程,禁止数据流量流通,达到安全防护的作用。如将一些恶…...

安装IntelliJ IDEA插件教程

安装IntelliJ IDEA插件&#xff1a;一份详细指南 在提升IntelliJ IDEA开发效率的过程中&#xff0c;插件扮演着不可或缺的角色。它们为IDE提供了额外的功能和工具&#xff0c;以满足开发者在特定编程语言、框架、测试、版本控制等方面的个性化需求。本文将为您详细阐述如何在I…...

大厂基础面试题(之四)

Q1&#xff1a;请先进行自我介绍 Q2&#xff1a;说下你学习前端的详细过程 Q3&#xff1a;一个页面从url输入到显示页面的整个过程 1.URL解析 2.DNS解析 3.建立TCP连接 4.发起HTTP请求 5.服务器处理请求 6.返回HTTP响应 7.下载页面资源 8.解析和渲染页面 9.JavaScript执行 10…...

为什么我们应该切换到Rust

What is RUST? 什么是Rust&#xff1f; Rust is a programming language focused on safety, particularly safe concurrency, supporting functional and imperative-procedural paradigms. Rust is syntactically similar to C, but it provides memory safety without usi…...

基于Linux定时任务实现的MySQL周期性备份

1、创建备份目录 sudo mkdir -p /var/backups/mysql/database_name2、创建备份脚本 sudo touch /var/backups/mysql/mysqldump.sh# 用VIM编辑脚本文件&#xff0c;写入备份命令 sudo vim /var/backups/mysql/mysqldump.sh# 内如如下 #!/bin/bash mysqldump -uroot --single-…...

【Altium Designer 20 笔记】隐藏PCB上的信号线(连接线)

使用网络类隐藏特定类型的信号线 如果你想要隐藏特定类型的信号线&#xff08;例如电源类&#xff09;&#xff0c;你可以首先创建一个网络类。使用快捷键DC调出对象类浏览器&#xff0c;在Net Classes中右击添加类&#xff0c;并重命名&#xff08;例如为“Power”&#xff0…...

【Git教程】(九)版本标签 —— 创建、查看标签,标签的散列值,将标签添加到日志输出中,判断标签是否包含特定的提交 ~

Git教程 版本标签&#xff08;tag&#xff09; 1️⃣ 创建标签2️⃣ 查看存在的标签3️⃣ 标签的散列值4️⃣ 将标签添加到日志输出中5️⃣ 判断tag是否包含特定的提交&#x1f33e; 总结 大多数项目都是用 1.7.3.2和 “ gingerbread” 这样的数字或名称来标识软件版本的。在 …...

LaTeX科技论文写作:如何优雅地呈现SenseVoice-Small模型实验数据

LaTeX科技论文写作&#xff1a;如何优雅地呈现SenseVoice-Small模型实验数据 写论文&#xff0c;尤其是技术论文&#xff0c;最头疼的往往不是实验本身&#xff0c;而是如何把那些复杂的模型结构、密密麻麻的数据和曲线图&#xff0c;清晰又专业地呈现在纸上。你辛辛苦苦跑出来…...

RMBG-2.0应用案例:如何快速处理社交媒体配图

RMBG-2.0应用案例&#xff1a;如何快速处理社交媒体配图 1. 社交媒体配图的痛点与解决方案 在当今内容爆炸的时代&#xff0c;社交媒体配图的质量直接影响着内容的传播效果。无论是个人博主还是企业账号&#xff0c;每天都需要制作大量配图来吸引用户注意力。然而&#xff0c…...

ORA-22816: RETURNING子句不支持功能对比,Oracle故障修复与远程处理方案选择

ORA-22816: RETURNING子句不支持功能对比,Oracle故障修复与远程处理方案选择 最近&#xff0c;一些Oracle数据库管理员在技术论坛上提到&#xff0c;在执行涉及LOB字段的更新操作时&#xff0c;偶尔会遇到ORA-22816错误。例如&#xff0c;一位开发者在2024年5月尝试在一个大型…...

从Python入门到调用伏羲API:零基础开发者气象AI初体验

从Python入门到调用伏羲API&#xff1a;零基础开发者气象AI初体验 你是不是也对那些能预测天气、分析气候的AI模型感到好奇&#xff0c;但一看到“API调用”、“HTTP请求”这些词就觉得头大&#xff0c;心想“这得会编程才行吧”&#xff1f;别担心&#xff0c;这篇教程就是为…...

FireRedASR-AED-L赋能在线教育:实时语音转写与错误检测实践

FireRedASR-AED-L赋能在线教育&#xff1a;实时语音转写与错误检测实践 在线教育的课堂里&#xff0c;老师正对着屏幕滔滔不绝。突然&#xff0c;一个关键的知识点口误了——“光合作用的原料是二氧化碳和水&#xff0c;产物是氧气和...呃...葡萄糖&#xff1f;” 屏幕另一端的…...

计算机毕业设计:懂车帝车质网汽车数据分析平台 Django框架 Scrapy爬虫 可视化 车辆 懂车帝大数据 数据分析 机器学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

Studio 3T 2026.6 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端

Studio 3T 2026.6 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端 The Ultimate GUI, IDE and client for MongoDB 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…...

nli-distilroberta-base算法优化:利用LSTM思想增强序列上下文建模

nli-distilroberta-base算法优化&#xff1a;利用LSTM思想增强序列上下文建模 1. 效果展示背景 在自然语言推理任务中&#xff0c;nli-distilroberta-base作为轻量级Transformer模型表现出色&#xff0c;但在处理长文本序列时仍面临挑战。传统Transformer架构的自注意力机制虽…...

百度网盘真实下载地址高效提取与极速下载全攻略

百度网盘真实下载地址高效提取与极速下载全攻略 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在日常工作与学习中&#xff0c;我们经常会遇到百度网盘分享链接下载速度受限、…...

告别裸机轮询:在GD32F30x上用USART中断和回调函数实现驱动解耦

GD32F30x串口驱动架构升级&#xff1a;从轮询到中断回调的工程化实践 在嵌入式开发中&#xff0c;串口通信作为最基础的外设接口之一&#xff0c;其实现方式往往决定了整个系统的响应效率和代码质量。许多工程师在项目初期为了快速验证功能&#xff0c;常采用简单的轮询方式处理…...