实体机器人在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请求报文格式 我们首先看一下…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
