实体机器人在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请求报文格式 我们首先看一下…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
