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

实体机器人在gazebo中的映射

这一部分目的是将真实的机器人映射到gazebo中,使得gazebo中的其他虚拟机器人能识别到真实世界的wheeltec机器人。

真实机器人的型号的wheeltec旗下的mini_mec。

一、在wheeltec官方百度云文档中找到URDF原始导出功能包.zip

找到对应的包

拷贝到工作空间下

在原有文件基础上新建如下文件

mini_mec_robot_run.urdf.xacro文件内容

<?xml version="1.0"?>
<robot name="mini_mec_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"><xacro:property name="prefix" value="$(arg prefix)" /><xacro:if value="${prefix == '/' or prefix == '' or prefix == ' '}"><xacro:property name="tf_prefix" value="" /></xacro:if><xacro:unless value="${prefix == '/' or prefix == '' or prefix == ' '}"><xacro:property name="tf_prefix" value="${prefix}/" /></xacro:unless><xacro:include filename="$(find mini_mec_robot)/urdf/mini_mec_robot.urdf.xacro" /><xacro:include filename="$(find mini_mec_robot)/urdf/lidar_gazebo.xacro" /><mini_mec_robot/></robot>

mini_mec_robot.urdf.xacro

这个文件是基于mini_mec_robot.urdf制作的,主要是copy mini_mec_robot.urdf文件中的关节和link关系,再配置gazebo中关键link的颜色材质,以及odom的计算,并发布odom到baselink之间的tf变换。

<?xml version="1.0" encoding="utf-8"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">这里插入urdf中robot内部的内容(link和joint前面都加上${tf_prefix})<gazebo reference="${tf_prefix}base_link"><material>Gazebo/Grey</material></gazebo><gazebo reference="${tf_prefix}lb_wheel_link"> <mu1>0.1</mu1><mu2>0.1</mu2><kp>500000.0</kp><kd>10.0</kd><material>Gazebo/DarkGrey</material><maxVel>0.1</maxVel><minDepth>0.001</minDepth><fdir1>1 0 0</fdir1></gazebo><gazebo reference="${tf_prefix}lf_wheel_link"><mu1>0.1</mu1><mu2>0.1</mu2><kp>500000.0</kp><kd>10.0</kd><material>Gazebo/DarkGrey </material><maxVel>0.1</maxVel><minDepth>0.001</minDepth><fdir1>1 0 0</fdir1></gazebo><gazebo reference="${tf_prefix}rf_wheel_link"><mu1>0.1</mu1><mu2>0.1</mu2><kp>500000.0</kp><kd>10.0</kd><material>Gazebo/DarkGrey </material><maxVel>0.1</maxVel><minDepth>0.001</minDepth><fdir1>1 0 0</fdir1></gazebo><gazebo reference="${tf_prefix}rb_wheel_link"><mu1>0.1</mu1><mu2>0.1</mu2><kp>500000.0</kp><kd>10.0</kd><material>Gazebo/DarkGrey </material><maxVel>0.1</maxVel><minDepth>0.001</minDepth><fdir1>1 0 0</fdir1></gazebo><!-- <gazebo reference="${tf_prefix}caster_wheel_link"> <material>Gazebo/DarkGrey </material><maxVel>0.0</maxVel><minDepth>0.001</minDepth></gazebo> --><!-- controller 这是2轮为odom到bselink的tf--><!-- <gazebo><plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"><rosDebugLevel>Error</rosDebugLevel><publishWheelTF>false</publishWheelTF><robotNamespace>/</robotNamespace><publishTf>true</publishTf><publishOdomTF>true</publishOdomTF><publishWheelJointState>false</publishWheelJointState><updateRate>50</updateRate><legacyMode>false</legacyMode> --><!-- 前轮 --><!-- <leftJoint>${tf_prefix}lf_wheel_joint</leftJoint><rightJoint>${tf_prefix}rf_wheel_joint</rightJoint> --><!-- 轮子的相关参数 --><!-- <wheelSeparation>0.1</wheelSeparation><wheelDiameter>0.043</wheelDiameter><broadcastTF>1</broadcastTF><wheelTorque>20</wheelTorque><wheelAcceleration>1.0</wheelAcceleration> --><!-- 控制命令与里程计话题 --><!-- <commandTopic>${tf_prefix}cmd_vel</commandTopic><odometryFrame>${tf_prefix}odom</odometryFrame><odometryTopic>${tf_prefix}odom</odometryTopic><odometrySource>world</odometrySource><robotBaseFrame>${tf_prefix}base_link</robotBaseFrame></plugin>
这是4全向轮计算odom并发布odom和baselinkTF的
</gazebo> --><gazebo><plugin name="mecanum_controller" filename="libgazebo_ros_planar_move.so">
<!-- 这两个似乎会自带${tf_prefix} --><commandTopic>cmd_vel</commandTopic><odometryTopic>odom</odometryTopic><odometryFrame>${tf_prefix}odom</odometryFrame><leftFrontJoint>lf_wheel_joint</leftFrontJoint><rightFrontJoint>rf_wheel_joint</rightFrontJoint><leftRearJoint>lb_wheel_joint</leftRearJoint><rightRearJoint>rb_wheel_joint</rightRearJoint><odometryRate>20.0</odometryRate><odometrySource>world</odometrySource><robotBaseFrame>${tf_prefix}base_link</robotBaseFrame></plugin>
</gazebo></robot>

lidar_gazebo.xacro这是虚拟雷达文件

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="lidar"><!-- Create laser reference frame --><gazebo reference="${tf_prefix}laser"> <sensor type="ray" name="rplidar"><pose>0 0 0 0 0 0</pose><visualize>false</visualize><update_rate>5.5</update_rate><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3</min_angle><max_angle>3</max_angle></horizontal></scan><range><min>0.10</min><max>6.0</max><resolution>0.01</resolution></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so"><robotNamespace>/</robotNamespace><topicName>${tf_prefix}scan</topicName><frameName>${tf_prefix}laser</frameName></plugin></sensor></gazebo></robot>

新建一个功能包wheeltec 新建launch/includes/model_wheeltec.launch.xml

<launch><!-- 迷你机器人,基础参数 --><arg name="robot_name" /><arg name="model" /><arg name="gui" default="False" /><!-- 加载机器人模型描述参数 --><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mini_mec_robot)/urdf/mini_mec_robot_run.urdf.xacro' prefix:=$(arg robot_name)" /><!-- 运行joint_state_publisher节点,发布机器人的关节状态  --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ><param name="rate" value="50"/></node> <!-- 运行robot_state_publisher节点,发布tf  --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" ><param name="publish_frequency" type="double" value="50.0" /></node>
</launch>

在我的wxfpublish功能包的launch文件夹新建 spawn_wheeltec.launch

<launch><!-- 迷你机器人,基础参数 --><arg name="robot_name" default="wheeltec_01" /><!-- 仿真环境机器人初始位置 --><arg name="initial_pose_x"  default="-1.0"/><arg name="initial_pose_y"  default="0.0"/><!-- <arg name="initial_pose_Y"  default="0.0581694505"/> --><!-- 偏航角,wxf手动调教的参数,还有一些误差在 --><arg name="initial_pose_Y"  default="0"/><!-- 偏航角,wxf手动调教的参数,还有一些误差在 --><arg name="init_pose" value="-x $(arg initial_pose_x) -y $(arg initial_pose_y) -Y $(arg initial_pose_Y)" /><!-- 迷你机器人模型 --><include ns="$(arg robot_name)" file="$(find wheeltec)/launch/includes/model_wheeltec.launch.xml"><arg name="robot_name" value="$(arg robot_name)" /></include><!-- 在gazebo中加载机器人模型--><node ns="$(arg robot_name)" name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"args="$(arg init_pose) -urdf -model $(arg robot_name) -param robot_description"/></launch>

之后就能正常调用了。

相关文章:

实体机器人在gazebo中的映射

这一部分目的是将真实的机器人映射到gazebo中&#xff0c;使得gazebo中的其他虚拟机器人能识别到真实世界的wheeltec机器人。 真实机器人的型号的wheeltec旗下的mini_mec。 一、在wheeltec官方百度云文档中找到URDF原始导出功能包.zip 找到对应的包 拷贝到工作空间下 在原有…...

【学习笔记】Kubernetes

一、 概览 Kubernetes 提供了一个抽象层&#xff0c;是用户可以在屋里或虚拟环境中部署容器化应用&#xff0c;提供以容器为中心的基础架构。 Kubernetes的控制平面和工作节点都有什么组建&#xff1f; 分别有什么作用&#xff1f; 1.1 Kubernetes控制平面和工作节点的组件及…...

【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch

ping&#xff1a;检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat&#xff1a;查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…...

上海创智学院(测试)算法笔试(ACM赛制)部分例题

1.第一个题&#xff0c;大概题目意思是求n句话中最长的单词和最短的单词 这个题目做的有点磕巴&#xff0c;好几年没有写过c/c了&#xff0c;连string的复制都不会写了&#xff0c;哈哈哈&#xff0c;太笨了 后面一点点捡起来&#xff0c;还是写出来了&#xff0c;本身没啥&…...

【学术投稿-第四届材料工程与应用力学国际学术会议(ICMEAAE 2025】材料工程与应用力学的探讨

重要信息 官网&#xff1a;www.icmeaae.com 时间&#xff1a;2025年3月7-9日 地点&#xff1a;中国西安 简介 第四届材料工程与应用力学&#xff08;ICMEAAE 2025&#xff09;将于2025年3月7日至9日在中国西安召开。本次会议将重点讨论材料科学、应用力学等领域的最新研究进…...

2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务

前言&#xff1a; 关于EO边缘安全加速平台服务 参照&#xff1a;产品概述,具体如下&#xff1a; 边缘安全加速平台 EO&#xff08;Tencent Cloud EdgeOne&#xff0c;下文简称为 EdgeOne&#xff09;是国内首款基于全新架构的真正一体化的边缘安全加速平台。提供全面的安全防…...

力扣-动态规划-70 爬楼梯

思路 dp数组定义&#xff1a;爬到第i个台阶有多少种爬法递推公式&#xff1a; 当前台阶可能是从前一个或者前两个来的dp数组初始化&#xff1a;遍历顺序&#xff1a;顺序遍历时间复杂度&#xff1a; 代码 class Solution { public:int climbStairs(int n) {if(n 1) ret…...

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …...

使用 pytest-mock 进行 Python 高级单元测试与模拟

一、单元测试与模拟的意义 在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致: 测试速度变慢测试结果不可控产生副作用(如真实发送邮件)模拟(Mocking) 技术通过创建虚拟对象替代真…...

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类&#xff1a;exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…...

《Linux 指令集:开启极客世界的钥匙_01》

一、命令行基础 &#xff08;一&#xff09;命令行提示符解析 当前用户&#xff1a;显示当前登录的用户名。例如&#xff0c;当前用户为 “ubuntu_user”&#xff0c;则在命令行提示符中会显示该用户名。 连接符&#xff1a;通常是 “”&#xff0c;用于分隔用户名和计算机名…...

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中&#xff0c;不可避免的需要遇到去与H5交互&#xff0c;甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息&#xff1a; 直接在浏览器地址栏输入 &#xff1a; chrome://inspect/#devices 直接连接手机usb,打开开发者模式…...

Deepseek 实战全攻略,领航科技应用的深度探索之旅

想玩转 Deepseek&#xff1f;这攻略别错过&#xff01;先带你了解它的基本原理&#xff0c;教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧&#xff0c;结合案例加深理解&#xff0c;让你全面掌握&#xff0c;探索科技…...

《论区块链技术及应用》审题技巧 - 系统架构设计师

区块链技术及应用论题写作框架 一、考点概述 本论题“区块链技术及应用”主要考察软件测试工程师对区块链技术的理解及其在软件项目中的实际应用能力。论题涵盖了多个关键方面&#xff0c;首先要求考生对区块链技术有全面的认识&#xff0c;包括但不限于其作为分布式记账技术…...

ROS2 强化学习:案例与代码实战

一、引言 在机器人技术不断发展的今天&#xff0c;强化学习&#xff08;RL&#xff09;作为一种强大的机器学习范式&#xff0c;为机器人的智能决策和自主控制提供了新的途径。ROS2&#xff08;Robot Operating System 2&#xff09;作为新一代机器人操作系统&#xff0c;具有…...

【Python模块】——pymysql

pymysql是python操作mysql的标准库&#xff0c;可以通过pip install快速导入pymysql包操作数据库 使用pymysql操作mysql 简单demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…...

【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南

一、腾讯云的镜像 https://mirrors.cloud.tencent.com/AndroidSDK/ 二、 打开 Android Studio‌的SDK Manager 路径:Tools–>SDK Manager 在右侧找到 SDK Update Sites 列表‌‌,添加如下链接,像下面一样,一个一个添加 将下面几个链接都加上去 https:...

springboot实现多文件上传

springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…...

Webpack打包优化

在使用 Webpack 打包项目时&#xff0c;随着项目规模的扩大&#xff0c;构建时间和打包产物的体积可能会逐渐增加。为了提高构建性能和减小打包产物的体积&#xff0c;可以采取以下几种 Webpack 打包优化 的方法。 1. 使用 mode 配置 Webpack 通过 mode 配置来指定构建模式。…...

浅谈HTTP及HTTPS协议

1.什么是HTTP&#xff1f; HTTP全称是超文本传输协议&#xff0c;是一种基于TCP协议的应用非常广泛的应用层协议。 1.1常见应用场景 一.浏览器与服务器之间的交互。 二.手机和服务器之间通信。 三。多个服务器之间的通信。 2.HTTP请求详解 2.1请求报文格式 我们首先看一下…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...