ros学习

news2024/10/6 12:08:39

1创建工作空间

catkin_init_workspace 将文件夹初始化成ros文件

编译工作空间catkin_make

vi ~/.bashrc
加入环境变量bashrc一下在任何终端都生效

catkin_create_pkg learning_communication通讯机制 std_msgs数据结构 rospy roscpp
catkin_create_pkg mbot_description urdf:xacro
创建相应文件
2创建urdf模型
Config中配置rviz文件 rviz自己的文件不用管

Urdf中写代码编模型,检查urdf模型
在这里插入图片描述

在launch文件夹中创建launch文件

roslaunch car_base.launch启动查看模型

3改写urdf模型
Urdf改xacro

将之前urdf的launch文件声明一下是xacro

启动launch文件roslaunch rbot_base.launch

看到xacro文件模型与urdf模型相同,但xacro模型方便编写
4搭建gazebo物理模型
在xacro基础上加入惯性参数和碰撞属性

标准刚体

添加gazebo标签

添加gazebo控制插件

配置gazebo的launch文件

配置实际环境并保存world文件

5配置仿真雷达、move_base、gmapping文件并进行建图导航
在xacro文件中加入激光雷达仿真配置

配置建图导航文件

Move_base与gmapping都是固定功能包可根据自己需求更改相应的配置,并配置好yaml文件
启动launch文件进行建图 也可不用move base直接用键盘

rosrun map_server map_saver -f car_gmapping 保存地图
配置导航launch文件

启动launch文件进行导航

6 rviz配置

下面这两个为膨胀半径和amcl点

Urdf

<?xml version="1.0" ?>
<link name="base_link">
    <visual>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
            <cylinder length="0.05" radius="0.20"/>
        </geometry>
        <material name="yellow">
            <color rgba="1 0.4 0 1"/>
        </material>
    </visual>
</link>






**<link name="radar_link">
    <visual>
        <origin xyz="0 0 0" rpy="0 0 0" />
        <geometry>
            <cylinder radius="0.03" length = "0.04"/>
        </geometry>
        <material name="black">
            <color rgba="0 0 0 0.95"/>
        </material>
    </visual>
</link>**




<joint name="left_wheel_joint" type="continuous">
    <origin xyz="0 0.21 -0.02" rpy="0 0 0"/>
    <parent link="base_link"/>
    <child link="left_wheel_link"/>
    <axis xyz="0 1 0"/>
</joint>

<link name="left_wheel_link">
    <visual>
        <origin xyz="0 0 0" rpy="1.5707 0 0" />
        <geometry>
            <cylinder radius="0.05" length = "0.025"/>
        </geometry>
        <material name="white">
            <color rgba="1 1 1 0.9"/>
        </material>
    </visual>
</link>

<joint name="right_wheel_joint" type="continuous">
    <origin xyz="0 -0.21 -0.02" rpy="0 0 0"/>
    <parent link="base_link"/>
    <child link="right_wheel_link"/>
    <axis xyz="0 1 0"/>
</joint>

<link name="right_wheel_link">
    <visual>
        <origin xyz="0 0 0" rpy="1.5707 0 0" />
        <geometry>
            <cylinder radius="0.06" length = "0.025"/>
        </geometry>
        <material name="white">
            <color rgba="1 1 1 0.9"/>
        </material>
    </visual>
</link>

<joint name="front_caster_joint" type="continuous">
    <origin xyz="0.18 0 -0.0475" rpy="0 0 0"/>
    <parent link="base_link"/>
    <child link="front_caster_link"/>
    <axis xyz="0 1 0"/>
</joint>

<link name="front_caster_link">
    <visual>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
            <sphere radius="0.0225" />
        </geometry>
        <material name="black">
            <color rgba="0 0 0 0.95"/>
        </material>
    </visual>
</link>

<joint name="back_caster_joint" type="continuous">
    <origin xyz="-0.18 0 -0.0475" rpy="0 0 0"/>
    <parent link="base_link"/>
    <child link="back_caster_link"/>
    <axis xyz="0 1 0"/>
</joint>

<link name="back_caster_link">
    <visual>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
            <sphere radius="0.0225" />
        </geometry>
        <material name="black">
            <color rgba="0 0 0 0.95"/>
        </material>
    </visual>
</link>

Xacro

<?xml version="1.0"?>
<!-- PROPERTY LIST -->
<xacro:property name="M_PI" value="3.1415926"/>
<xacro:property name="base_radius" value="0.2"/>
<xacro:property name="base_length" value="0.05"/>

<xacro:property name=“base_mass” value=“20” />

<xacro:property name="wheel_radius" value="0.05"/>
<xacro:property name="wheel_length" value="0.025"/>
<xacro:property name="wheel_joint_y" value="0.21"/>
<xacro:property name="wheel_joint_z" value="0.02"/>

<xacro:property name=“wheel_mass” value=“2” />

<xacro:property name="caster_radius" value="0.0225"/> <!-- wheel_radius - ( base_length/2 - wheel_joint_z) -->
<xacro:property name="caster_joint_x" value="0.18"/>

<xacro:property name=“caster_mass” value=“0.5” />

<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>
<xacro:property name=“radar_mass” value=“1” />
<xacro:property name=“radar_radius” value=“0.05”/>
<xacro:property name=“radar_length” value=“0.0001”/>
<xacro:property name=“radar_joint_x” value=“0.16”/>
<xacro:property name=“radar_joint_z” value=“0.03”/>

<!-- Defining the colors used in this robot -->
<material name="yellow">
    <color rgba="1 0.4 0 1"/>
</material>
<material name="black">
    <color rgba="0 0 0 1"/>
</material>     
<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>







<!-- Macro for robot wheel -->
<xacro:macro name="wheel" params="prefix reflect">
    <joint name="${prefix}_wheel_joint" type="continuous">
        <origin xyz="0 ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="${prefix}_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="${prefix}_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
            <geometry>
                <cylinder radius="${wheel_radius}" length = "${wheel_length}"/>
            </geometry>
            <material name="black" />
        </visual>
    <gazebo reference="${prefix}_wheel_link">
        <material>Gazebo/Black</material>
    </gazebo>
    <!-- Transmission is important to link the joints and the controller -->
    <transmission name="${prefix}_wheel_joint_trans">
        <type>transmission_interface/SimpleTransmission</type>
        <joint name="${prefix}_wheel_joint" >
            <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
        </joint>
        <actuator name="${prefix}_wheel_joint_motor">
            <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
            <mechanicalReduction>1</mechanicalReduction>
        </actuator>
    </transmission>


</xacro:macro>

<xacro:macro name=“radar” params=“prefix reflect”>





    <link name="${prefix}_radar_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder radius="${radar_radius}" length = "${radar_length}"/>
            </geometry>
            <material name="red" />
        </visual>
    <gazebo reference="${prefix}_radar_link">
        <material>Gazebo/Blue</material>
    </gazebo>



</xacro:macro>   

<!-- Macro for robot caster -->
<xacro:macro name="caster" params="prefix reflect">
    <joint name="${prefix}_caster_joint" type="continuous">
        <origin xyz="${reflect*caster_joint_x} 0 ${-(base_length/2 + caster_radius)}" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="${prefix}_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="${prefix}_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="${caster_radius}" />
            </geometry>
            <material name="black" />
       </visual>




        <collision>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="${caster_radius}" />
            </geometry>
        </collision>      
        <sphere_inertial_matrix  m="${caster_mass}" r="${caster_radius}" />
    </link>

    <gazebo reference="${prefix}_caster_link">
        <material>Gazebo/Black</material>
    </gazebo>
</xacro:macro>



<xacro:macro name="mbot_base_gazebo">
    <link name="base_footprint">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <box size="0.001 0.001 0.001" />
            </geometry>
        </visual>
    </link>
false
    <joint name="base_footprint_joint" type="fixed">
        <origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />        
        <parent link="base_footprint"/>
        <child link="base_link" />
    </joint>

    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="${base_length}" radius="${base_radius}"/>
            </geometry>
            <material name="yellow" />
    <gazebo reference="base_link">
        <material>Gazebo/Orange</material>
    </gazebo>



    <wheel prefix="left" reflect="-1"/>
    <wheel prefix="right" reflect="1"/>

    <caster prefix="front" reflect="-1"/>
    <caster prefix="back" reflect="1"/>


    <radar prefix="back" reflect="1"/>
Debug true / 1 true true 100.0 true left_wheel_joint right_wheel_joint ${wheel_joint_y*2} ${2*wheel_radius} 1 30 1.8 cmd_vel odom odom base_footprint
</xacro:macro>

Gmapping.launch

<include file="$(find mbot_navigation)/launch/gmapping.launch"/>

<!-- 运行move_base节点 -->
<include file="$(find mbot_navigation)/launch/move_base.launch" />

<!-- 运行rviz -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot.rviz" required="true" />

Mbot_move.launch

<!-- 运行地图服务器,并且加载设置的地图-->
<node name="map_server" pkg="map_server" type="map_server" args="$(find mbot_navigation)/maps/$(arg map)"/>

<!-- 运行move_base节点 -->
<include file="$(find mbot_navigation)/launch/move_base.launch"/>



<!-- 对于虚拟定位,需要设置一个/odom与/map之间的静态坐标变换 -->
<node pkg="tf" type="static_transform_publisher" name="map_odom_broadcaster" args="0 0 0 0 0 0 /map /odom 100" />

<!-- 运行rviz -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot.rviz" required="true" />

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雅思备考经验!阅读 8.5,听力 8.5!

成绩单 先上热乎乎的成绩单截图&#xff08;2023.5.19 考试&#xff09;&#xff0c;偏科选手出来挨打&#xff01;好在小分都达到了要求~ 英语基础 大概是两三年前考过托福和 GRE&#xff0c;成绩过期了没办法&#xff0c;只能重考&#xff0c;这次试试雅思。 雅思和托福的…

14-Vue技术栈之Vue3快速上手

目录 1.Vue3简介2. Vue3带来了什么2.1 性能的提升2.2 源码的升级2.3 拥抱TypeScript2.4 新的特性 1、海贼王&#xff0c;我当定了&#xff01;——路飞 2、人&#xff0c;最重要的是“心”啊&#xff01;——山治 3、如果放弃&#xff0c;我将终身遗憾。——路飞 4、人的梦想是…

【软考系统规划与管理师笔记】第3篇 信息技术知识2

目录 1 计算机网络 1.1网络技术标准、协议与应用 Internet技术及应用 2 标识技术 域名系统和统一资源定位器 3 网络分类、组网和接入技术 3.1 网络分类 3.2 网络交换技术 3.3 网络接入技术 3.4 无线网络技术 4 网络服务器和网络存储技术 4.1 服务器 4.2 网络存储技…

24 memcmp 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 内存数据的比较 不过 我们这里是从 具体的实现 来看一下 它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 测试用例 就是简单的使用了一下 memcpy,…

【Python】正则表达式应用

知识目录 一、写在前面✨二、姓名检查三、解析电影排行榜四、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 正则表达式的应用 &#xff0c;希望能帮助到大家&#xff01;本篇…

Makefile基础教程(路径搜索)

文章目录 前言一、常用的源码管理方式二、VPATH和vpath1.VPATH2.vpath3.VPATH和vpath优缺点对比 三、VPATH和vpath同时出现make会怎么处理四、vpath指定多个文件夹总结 前言 在前面的文章中我们的文件全部都是放在同一个目录下面的&#xff0c;那么在实际的工程开发中会这样做…

阿里云服务器备份到本地 镜像 快照 OSS存储 (保姆级图文)

目录 省钱措施1. 创建自定义镜像2. 导出镜像创建/选择OSS对象存储空间 3. 下载到本地总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 阿里云的这个官方步骤要收几毛钱的费用 因为他要求必须先快照镜像&…

通过一个平面几何题来梳理解题模型

昨天一位邻居在群里问了一道题目&#xff1a; 已知&#xff1a;如图&#xff0c;OA平分∠BAC&#xff0c;∠1∠2&#xff0e;求证&#xff1a;△ABC是等腰三角形&#xff0e; 先不讲如何来解答这个题目&#xff0c;重点是我们来分析这道题到底在考察什么&#xff0c;如果条件换…

使用ScreenToGif录制GIF动态图

文章目录 1.下载ScreenToGif工具2. 下载后双击下面的.msi文件进行安装3. 在编辑器中可以对所有帧添加文字描述 1.下载ScreenToGif工具 链接&#xff1a;https://pan.baidu.com/s/1rvFZSbMdNus90hbzxsJlGA 提取码&#xff1a;gyqe2. 下载后双击下面的.msi文件进行安装 按照默认…

springboot高校专业招生信息管理系统jsp001

对于学校来说&#xff0c;每年的学生越来越多&#xff0c;需要管理的专业也有很多&#xff0c;每次专业报名信息的统计工作就变得非常的多&#xff0c;对于报名的统计工作变得非常的复杂。进入二十一世纪后&#xff0c;各种科学技术发速发展&#xff0c;管理软件尤其明显&#…

Golang每日一练(leetDay0078) 存在重复元素 II\III ContainsDuplicate

目录 219. 存在重复元素 II Contains Duplicate ii &#x1f31f; 220. 存在重复元素 III Contains Duplicate iii &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏…

chatgpt赋能python:Python判断语句:if语句

Python判断语句&#xff1a;if语句 在Python编程中&#xff0c;判断语句是非常重要的语法之一。if语句是最基本的判断语句&#xff0c;可以根据条件的真假来执行我们需要的代码块。 什么是if语句&#xff1f; if语句是一种条件语句。在Python中&#xff0c;if语句用于执行一…

C++泛型编程之模板

目录 一、什么是泛型编程 二、函数模板 2.1函数模板的概念 2.2函数模板格式 2.3函数模板的原理 2.5函数模板的实例化 2.6模板参数的匹配原则 三、类模板 3.1类模板的定义格式 3.2 类模板的实例化 四、非类型模板参数 五、模板的特化 5.1模板特化的概念&#xff1a;…

chatgpt赋能python:Python在SEO中的应用

Python在SEO中的应用 Python是一种语言&#xff0c;用于编写应用程序。近年来&#xff0c;Python编程成为了最受欢迎的编程语言之一。Python主要用于数据分析、机器学习、人工智能等方向。但是&#xff0c;Python在SEO中的应用也引起了越来越多的人的关注。那么&#xff0c;在…

bean的作用域及生命周期

目录 bean的作用域 ①概念 ②创建类User ③配置bean ④测试 bean生命周期 ①具体的生命周期过程 ②修改类User ③配置bean ④测试 ⑤bean的后置处理器 bean的作用域 ①概念 在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围&#xff0c;各取…

Java组合模式:构建多层次公司组织架构

在现实生活中&#xff0c;常常会遇到用树形结构组织的一些场景&#xff0c;比如国家省市&#xff0c;学校班级&#xff0c;文件目录&#xff0c;分级导航菜单&#xff0c;以及典型的公司组织架构&#xff0c;整个层次结构自顶向下呈现一颗倒置的树。这种树形结构在面向对象的世…

23 直接使用 dom api 更新了 #text节点, 之后响应式更新不生效了

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 问题引发自 VueComponent 响应式处理 里面有一段内容, 直接在 console 中…

5月份月刊总结

5月份月刊总结 目录概述需求&#xff1a; 设计思路实现思路分析1.技术经理 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Sur…

我是如何利用业余时间写书的?---时间管理

低级的欲望放纵即可获得&#xff0c;高级的欲望只有克制才能达成。——卡耐基粉丝的误会 很多粉丝&#xff0c;问我&#xff0c; “彭老师你是不是自己创业了&#xff1f;” “彭老师我想报您的培训班。” … 得知我知识业余时间写文章&#xff0c;紧接着又会问&#xff0c; …

python+vue高校体育比赛赛事信息系统

本公共体育赛事管理系统是一个公共体育赛事管理信息的平台&#xff0c;采用vue&#xff0c;MYSQL的开发环境&#xff0c;后台使用python开发架构&#xff0c;并使用django简化对数据库方面的操作&#xff0c;基于B/S结构进行开发。本系统主要实现用户在线进行密码管理&#xff…