给自己的机器人部件安装单目摄像头并实现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

在这里插入图片描述

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

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

相关文章

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine&#xff0c;导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换&#xff0c;包括 UTF-8、UTF-16、UTF-32 std::…

MES生产管理系统:私有云、公有云与本地化部署的比较分析

随着信息技术的迅猛发展&#xff0c;云计算作为一种新兴的技术服务模式&#xff0c;已经深入渗透到企业的日常运营中。在众多部署方式中&#xff0c;私有云、公有云和本地化部署是三种最为常见的选择。它们各自具有独特的特点和适用场景&#xff0c;并在不同程度上影响着企业的…

python应用-os库操作目录

python自带的os模块提供了许多与操作系统交互的函数&#xff0c;适配多种操作系统&#xff0c;比如windows&#xff0c;mac&#xff0c;linux等&#xff0c;比如常用路径操作、进程管理、环境参数等都可通过os模块实现。 以下是自带的os.py中的前面一部分代码。 第一个红框中主…

kibana源码编译

一、安装nodejs16.14.2及yarn &#xff08;一&#xff09;nodejs 1、下载 https://cdn.npmmirror.com/binaries/node/v16.14.2/node-v16.14.2-linux-x64.tar.gz2、解压 tar -zxf node-v16.14.2-linux-x64.tar.gz -C /app cd /app mv node-v16.14.2-linux-x64 node3、配置环…

bugku-web-decrypt

这里的提示解密后没有什么意义 这里下载文件包 得到一个index.php文件 得到代码 <?php function encrypt($data,$key) {$key md5(ISCC);$x 0;$len strlen($data);$klen strlen($key);for ($i0; $i < $len; $i) { if ($x $klen){$x 0;}$char . $key[$x];$x1;}for…

UI设计/交互设计/视觉设计项目汇报/作品集Figma/PPT模板

作为UI设计/交互设计/视觉设计师&#xff0c;创建作品集对于向潜在客户或雇主展示您的技能、创造力和风格至关重要。以下分步指南可帮助您创建令人印象深刻的作品集&#xff1a; 选择您的最佳作品&#xff1a;选择您最强大且最相关的设计项目&#xff0c;将其纳入您的作品集。…

stm32移植嵌入式数据库FlashDB

本次实验的程序链接stm32f103FlashDB嵌入式数据库程序资源-CSDN文库 一、介绍 FlashDB 是一款超轻量级的嵌入式数据库&#xff0c;专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同&#xff0c;FlashDB 结合了 Flash 的特性&#xff0c;具有较强的性能…

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a&#xff0c;如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0&#xff0c;则beauty。其中 i &…

HarmonyOS鸿蒙端云一体化开发--适合小白体制

端云一体化 什么是“端”&#xff0c;什么是“云”&#xff1f; 答&#xff1a;“端“&#xff1a;手机APP端 “云”:后端服务端 什么是端云一体化&#xff1f; 端云一体化开发支持开发者在 DevEco Studio 内使用一种语言同时完成 HarmonyOS 应用的端侧与云侧开发。 …

《经典论文阅读1》YouTubeDNN—基于深度学习的搜推系统开山之作

论文链接&#xff1a; https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf全文由『说文科技』原创出品。版权所有&#xff0c;翻版必究。 这篇发表于2016年九月的文章&#xff0c;在搜索推荐仍然基于矩阵分解的时代&#xff0c;抛…

python基础——类型注解【变量,函数,Union】

&#x1f4dd;前言&#xff1a; 上一篇文章Python基础——面相对象的三大特征提到&#xff0c;python中的多态&#xff0c;python中&#xff0c;类型是动态的&#xff0c;这意味着我们不需要在声明变量时指定其类型。然而&#xff0c;这可能导致运行时错误&#xff0c;因为我们…

【数据结构】泛型(分享重点)

什么是泛型&#xff1f; 泛型就是适用于许多许多类型&#xff0c;对类型参数化。 怎么创建一个泛型呢 class 泛型类名称<类型形参列表> { // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> { } class 泛型类名称<类型形参列表> extends 继承类…

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中&#xff0c;除了了解中间件&#xff0c;web漏洞&#xff0c;这些攻击的手法&#xff0c;还得了解应急响应&#xff0c;安全产品&#xff0c;入侵排查&#xff0c;溯源反制...... 那么今天&#xff0c;就来说一下安全产品&#xff08;安全公司我就不说了&#xff0c;这个…

自动化收集Unity版本更新日志

自动化收集Unity版本更新日志 &#x1f365;功能介绍&#x1f96a;食用手册填写配置开始搜集 &#x1f368;数据展示 &#x1f365;功能介绍 &#x1f4a1;获取指定年份中所有的Unity版本更新日志。 &#x1f4a1;根据指定字符串过滤。 &#x1f4a1;.收集后自动保存成markdow…

Niobe开发板OpenHarmony内核编程开发——定时器

本示例将演示如何在Niobe Wifi IoT开发板上使用cmsis 2.0 接口进行定时器开发 Timer API分析 osTimerNew() /// Create and Initialize a timer./// \param[in] func function pointer to callback function./// \param[in] type \ref osTimerOnce …

Kafka 架构深入探索

目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…

事务隔离级别的无锁实现方式 -- MVCC

MVCC的全称是Multiversion Concurrency Control(多版本并发控制器)&#xff0c;是一种事务隔离级别的无锁的实现方式&#xff0c;用于提高事务的并发性能&#xff0c;即事务隔离级别的一种底层实现方式。 在了解MVCC之前&#xff0c;我们先来回顾一些简单的知识点&#xff1a;…

终端工具命令行颜色配置(解决终端工具连上服务器之后,无颜色问题)

本期主题&#xff1a; 讲解使用mobaxterm等终端工具连上服务器&#xff0c;但是命令行没有颜色的问题 目录 1. 问题描述2. 原因解释3.测试 1. 问题描述 使用终端工具&#xff08;Mobaxterm等&#xff09;连上服务器之后&#xff0c;发现终端工具没有颜色&#xff0c;如下图&am…

API接口京东开放平台item_get-获得京东商品详情API接口根据商品ID查询商品标题价格描述等详情数据

京东商品详情API接口可以提供以下方面的信息&#xff1a; 商品基础信息&#xff1a;包括商品的标题、价格、描述、图片等基本信息&#xff0c;这是构建电商平台的基础数据。商品分类信息&#xff1a;帮助用户更好地了解商品所属的类别&#xff0c;便于商品筛选和查找。商品销售…