实体机器人在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中,使得gazebo中的其他虚拟机器人能识别到真实世界的wheeltec机器人。 真实机器人的型号的wheeltec旗下的mini_mec。 一、在wheeltec官方百度云文档中找到URDF原始导出功能包.zip 找到对应的包 拷贝到工作空间下 在原有…...
【学习笔记】Kubernetes
一、 概览 Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。 Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用? 1.1 Kubernetes控制平面和工作节点的组件及…...
【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch
ping:检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat:查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…...
上海创智学院(测试)算法笔试(ACM赛制)部分例题
1.第一个题,大概题目意思是求n句话中最长的单词和最短的单词 这个题目做的有点磕巴,好几年没有写过c/c了,连string的复制都不会写了,哈哈哈,太笨了 后面一点点捡起来,还是写出来了,本身没啥&…...
【学术投稿-第四届材料工程与应用力学国际学术会议(ICMEAAE 2025】材料工程与应用力学的探讨
重要信息 官网:www.icmeaae.com 时间:2025年3月7-9日 地点:中国西安 简介 第四届材料工程与应用力学(ICMEAAE 2025)将于2025年3月7日至9日在中国西安召开。本次会议将重点讨论材料科学、应用力学等领域的最新研究进…...
2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
前言: 关于EO边缘安全加速平台服务 参照:产品概述,具体如下: 边缘安全加速平台 EO(Tencent Cloud EdgeOne,下文简称为 EdgeOne)是国内首款基于全新架构的真正一体化的边缘安全加速平台。提供全面的安全防…...
力扣-动态规划-70 爬楼梯
思路 dp数组定义:爬到第i个台阶有多少种爬法递推公式: 当前台阶可能是从前一个或者前两个来的dp数组初始化:遍历顺序:顺序遍历时间复杂度: 代码 class Solution { public:int climbStairs(int n) {if(n 1) ret…...
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求,目前需要了解以下几个关键点及分步解决方案: --- 一、现状分析 1. Ollama 的限制: - 目前Ollama主要面向文本大模型,原生不支持直接上传/处理图片 …...
使用 pytest-mock 进行 Python 高级单元测试与模拟
一、单元测试与模拟的意义 在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致: 测试速度变慢测试结果不可控产生副作用(如真实发送邮件)模拟(Mocking) 技术通过创建虚拟对象替代真…...
lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。
入口类: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》
一、命令行基础 (一)命令行提示符解析 当前用户:显示当前登录的用户名。例如,当前用户为 “ubuntu_user”,则在命令行提示符中会显示该用户名。 连接符:通常是 “”,用于分隔用户名和计算机名…...
【Android】用 chrome://inspect/#devices 调试H5页面
通常做Android开发的过程中,不可避免的需要遇到去与H5交互,甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息: 直接在浏览器地址栏输入 : chrome://inspect/#devices 直接连接手机usb,打开开发者模式…...
Deepseek 实战全攻略,领航科技应用的深度探索之旅
想玩转 Deepseek?这攻略别错过!先带你了解它的基本原理,教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧,结合案例加深理解,让你全面掌握,探索科技…...
《论区块链技术及应用》审题技巧 - 系统架构设计师
区块链技术及应用论题写作框架 一、考点概述 本论题“区块链技术及应用”主要考察软件测试工程师对区块链技术的理解及其在软件项目中的实际应用能力。论题涵盖了多个关键方面,首先要求考生对区块链技术有全面的认识,包括但不限于其作为分布式记账技术…...
ROS2 强化学习:案例与代码实战
一、引言 在机器人技术不断发展的今天,强化学习(RL)作为一种强大的机器学习范式,为机器人的智能决策和自主控制提供了新的途径。ROS2(Robot Operating System 2)作为新一代机器人操作系统,具有…...
【Python模块】——pymysql
pymysql是python操作mysql的标准库,可以通过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 打包项目时,随着项目规模的扩大,构建时间和打包产物的体积可能会逐渐增加。为了提高构建性能和减小打包产物的体积,可以采取以下几种 Webpack 打包优化 的方法。 1. 使用 mode 配置 Webpack 通过 mode 配置来指定构建模式。…...
浅谈HTTP及HTTPS协议
1.什么是HTTP? HTTP全称是超文本传输协议,是一种基于TCP协议的应用非常广泛的应用层协议。 1.1常见应用场景 一.浏览器与服务器之间的交互。 二.手机和服务器之间通信。 三。多个服务器之间的通信。 2.HTTP请求详解 2.1请求报文格式 我们首先看一下…...
基于粒子群算法的配电网分布式电源与储能选址定容规划,以最低总成本为目标,综合考虑年运行成本、设...
配电网分布式电源和储能选址定容 以配电网总成本最低为目标函数,其中包括年运行成本,设备维护折损成本、环境成本;以系统潮流运行为约束条件,采用粒子群算法求解,实现光伏、风电、储能设备的规划。 这是一个使用粒子群…...
程序员生存指南:除了会写代码,你还得学会“甩锅”和“自救”
程序员生存指南:除了会写代码,你还得学会“甩锅”和“自救” 嘿,兄弟,姐妹!欢迎来到代码的“修罗场”。 既然你点开了这篇文章,说明你大概率正经历着程序员职业生涯中的三大喜:电脑没蓝屏、代…...
B 站超 5 亿播放、“高数救星”宋浩老师新作《微积分精选 850 题》终于来了!
大学有两大渡劫现场:一是早八占座,二是微积分考试。你是不是也这样?上课的时候跟着老师的思路走觉得:“哇好简单。”笔记记得密密麻麻。一到下课自己做题,看着题目突然大脑空白:“公式在哪来着?…...
Harbor镜像仓库从入门到精通:除了安装,你更该知道的5个生产级调优技巧
Harbor镜像仓库生产级调优实战:5个关键技巧让性能提升300% 当你已经完成了Harbor的基础安装,看着控制台上"Ready"的绿色标志,是否觉得大功告成了?现实往往比这复杂得多。我们团队在去年的一次压力测试中发现,…...
XHS-Downloader:3种高效方法帮你轻松下载小红书无水印内容
XHS-Downloader:3种高效方法帮你轻松下载小红书无水印内容 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
FPGA时序约束进阶:Set_Bus_Skew在跨时钟域设计中的实战解析
1. 什么是Set_Bus_Skew约束? 第一次在跨时钟域设计中遇到总线偏斜问题时,我盯着时序报告里那些莫名其妙的违例数字整整发呆了半小时。作为FPGA工程师,你可能已经熟悉了常规的setup/hold检查,但当多个信号需要同步跨时钟域传输时&a…...
AIAgent协议一致性危机爆发前夜:4步诊断法+3类协议健康度SLI指标(P99延迟、语义丢失率、Schema漂移频次),立即自查你的Agent集群
第一章:AIAgent架构中的通信协议设计 2026奇点智能技术大会(https://ml-summit.org) 在多智能体协同系统中,通信协议是决定Agent间语义对齐、时序可控与容错能力的核心基础设施。不同于传统微服务间RESTful或gRPC调用,AIAgent需支持异步事件…...
【效率工具】XMind在Windows系统下的高效部署与核心操作指南
1. 为什么选择XMind提升工作效率 作为一个用了五年XMind的老用户,我深刻体会到这款思维导图工具对工作效率的颠覆性改变。记得第一次用XMind整理项目需求时,原本需要3小时梳理的复杂逻辑,只用40分钟就形成了清晰可视化的框架。这种思维可视化…...
如何理解Transformer模块:从Layer Normalization到Feed Forward网络的完整指南
如何理解Transformer模块:从Layer Normalization到Feed Forward网络的完整指南 【免费下载链接】transformer A TensorFlow Implementation of the Transformer: Attention Is All You Need 项目地址: https://gitcode.com/gh_mirrors/tr/transformer Transf…...
Orcad与Allegro交互式布局全解析:如何实现原理图与PCB的高效协同设计
Orcad与Allegro交互式布局全解析:如何实现原理图与PCB的高效协同设计 在复杂的PCB设计流程中,原理图与PCB布局的协同效率直接决定了项目周期和设计质量。作为Cadence旗下的黄金搭档,Orcad Capture CIS与Allegro PCB Designer的交互式布局功能…...
