学习ROS-Academy-for-Beginners-noetic,修改记录

2023-05-16

一.编译安装ROS-Academy-for-Beginners-noetic

可以参考我之前的博客ROS-Academy-for-Beginers-noetic安装教程

之后可以看到里面提供了很多例程,包括

| 软件包 | 内容 |
| :--- | :----: |
| **robot_sim_demo** | 机器人仿真程序,大部分示例会用到这个软件包 |
| **topic_demo** | topic通信,自定义msg,包括C++和python两个版本实现 |
| **service_demo** | service通信,自定义srv,分别以C++和python两种语言实现 |
| **action_demo** | action通信,自定义action,C++语言实现 |
| **param_demo** | param操作,分别以C++和python两种语言实现 |
| **msgs_demo** | 演示msg、srv、action文件的格式规范 |
| **tf_demo** | tf相关API操作演示,tf示例包括C++和python两个版本 |
| **name_demo** | 演示全局命名空间和局部命名空间下参数的提取 |
| **tf_follower** | 制作mybot机器人 实现mybot跟随xbot的功能 |
| **urdf_demo** |  创建机器人urdf模型,在RViz中显示  |
| **navigation_sim_demo** | 导航演示工具包,包括AMCL, Odometry Navigation等演示 |
| **slam_sim_demo** | 同步定位与建图演示,包括Gmapping, Karto, Hector等SLAM演示 |
| **orbslam2_demo** | ORB_SLAM2的演示 |
| **rtabmap_demo** | rtabmap的演示 |
| **cartographer_demo** | cartographer安装演示包|
| **dependlib** | ubuntu18所依赖的包(melodic不自带) |
| **ros_academy_for_beginners** | Metapacakge示例,依赖了本仓库所有的pacakge |

 具体可看作者的github链接

项目原地址

在每个例程的README.md文件可以看到使用教程;在跑完例程后,我们开始尝试修改一些东西,来使他变得更有趣,更多样化。

二.修改仿真环境

1.首先了解文件的架构

├── CMakeLists.txt
├── launch
│ ├── include
│ │ └── xbot-u.launch.xml #机器人模型(设置机器人初始位置)
│ └── robot_spawn.launch #启动launch文件显示仿真环境
├── models #仿真空间
│ ├── ISCAS_groundplane #地板
│ │ ├── materials
│ │ │ ├── scripts
│ │ │ │ └── ISCAS_groundplane.material
│ │ │ └── textures
│ │ │ └── ISCAS_groundplane.png
│ │ ├── model.config
│ │ └── model.sdf
│ ├── ISCAS_Museum #墙面
│ │ ├── meshes
│ │ │ ├── ISCAS_museum.dae
│ │ │ ├── zd_011.jpg
│ │ │ ├── zd_021.jpg
│ │ │ ├── zd_031.jpg
│ │ │ └── zd_041.jpg
│ │ ├── model.config
│ │ └── model.sdf
│ ├── ISCAS_post
│ │ ├── meshes
│ │ │ └── post.dae
│ │ ├── model.config
│ │ └── model.sdf
│ └── meshes #各个模型渲染的部分包括基底以及pitch、yaw平台以及相机和激光雷 达
│ ├── base_link.dae
│ ├── pitch_platform.dae
│ ├── realsense.dae
│ ├── rplidar.dae
│ ├── sick_tim571.stl
│ ├── uvtietu.jpg
│ ├── wheel.dae
│ ├── wheel.jpg
│ ├── xtion_pro_camera.dae
│ ├── xtion_pro_camera.jpg
│ └── yaw_platform.dae
├── package.xml
├── param
│ ├── mux.yaml #订阅话题以及发布话题的相关参数设置
│ └── xbot-u_control.yaml #机器人控制参数的设置(PID)
├── README.md
├── scripts
│ └── robot_keyboard_teleop.py
├── simulation_pic.png
├── urdf #构建机器人模型
│ ├── materials.xacro #颜色设置
│ ├── robot.urdf #urdf文件是通过xacro文件转换自动生成的(xacro文件比较精简, urdf文件比较复杂)
│ ├── robot.xacro #机器人整体模型文件(可以选择激光雷达的类型)包含该文件下的所有文 件
│ ├── sick_tim.gv #使用命令生成的<urdf_to_graphiz robot.urdf>
│ ├── sick_tim.pdf #显示整个机器人模型的连接关系
│ ├── sick_tim.urdf.xacro #激光雷达模型(多种激光雷达,包括rplidarA2、sick_tim310、 551、571等)
│ ├── xbot-u.gazebo
│ └── xbot-u.urdf.xacro #机器人模型所需要的各个部分可以通过可以通过rqt_tf_tree查看各个 link和joint之间的连接关系
└── worlds
└── ROS-Academy.world
原文链接:https://blog.csdn.net/qq_36170626/article/details/106542521
 

2.配制自己的world

在robot_sim_demo/launch目录下复制一份robot_spawn.launch,并重命名为my_ground.launch,并修改其内容如下

<launch>

  <arg name="robot" default="xbot-u"/>
  <arg name="debug" default="false"/>
  <arg name="gui" default="true"/>
  <arg name="headless" default="false"/>

  <!-- Start Gazebo with a blank world -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find robot_sim_demo)/worlds/my_ground.world"/>
    <!--arg name="world_name" value="$(find robot_sim_demo)/worlds/sai_di.world"/-->
    <!--arg name="world_name" value="$(find turtlebot_gazebo)/worlds/playground.world"/-->
    <arg name="debug" value="$(arg debug)" />
    <arg name="gui" value="$(arg gui)" />
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="headless" value="$(arg headless)"/>
  </include>

  <!-- Oh, you wanted a robot? -->
  <include file="$(find robot_sim_demo)/launch/include/$(arg robot).launch.xml"/>

  <!--node    name="rviz"    pkg="rviz"    type="rviz"    args="-d $(find robot_sim_demo)/urdf_gazebo.rviz" /-->

</launch>

可以看到,在加载world时,加载的是已经修改好的my_ground.world。

所以,在robot_sim_demo/worlds下,复制一份ROS-Academy.world,并取名为my_ground.world,其具体内容为

<?xml version="1.0" ?>
<sdf version="1.4">
 <world name="default">
    <scene>
      <ambient>0.68 0.68 0.68 1.0</ambient>
      <shadows> false</shadows>
      <sky>
        <sunrise/>
        <clouds>
          <speed>12</speed>
      </clouds>
      </sky>
    </scene>

    <physics type='ode'>
      <max_step_size>0.001</max_step_size>
      <real_time_factor>1</real_time_factor>
      <real_time_update_rate>1000</real_time_update_rate>
      <gravity>0 0 -9.8</gravity>
    </physics>

    <include>
      <uri>model://sun</uri>
    </include>

    <include>
      <uri>model://ISCAS_groundplane</uri>
    </include>

    <include>
      <uri>model://SampleScene</uri>
      <pose>0 0 0 0 0 -1.57</pose>
    </include>

    <!--<include>
      <uri>model://ISCAS_post</uri>
      <name>table1</name>
      <pose>8 3.5 0 0 0 1</pose>
    </include>
    <include>
      <uri>model://ISCAS_post</uri>
      <name>table2</name>
      <pose>6 5 0 0 0 1.57</pose>
    </include>-->

  </world>
</sdf>

可以看到我们用了该项目自带的ISCAS_groundplane作为地面,SampleScene作为模型。完成后,可以运行

roslaunch robot_sim_demo my_ground.launch

查看结果

 如果显示这样,那么就成功了。

3.自定义模型

可以参考链接

自定义仿真模型

三.在此环境下使用gmapping建图

查看slam_sim_demo/README.md文件,发现只需要替换掉仿真场地即可。

执行代码

roslaunch robot_sim_demo robot_spawn.launch
rosrun robot_sim_demo robot_keyboard_teleop.py
roslaunch slam_sim_demo gmapping_demo.launch
roslaunch slam_sim_demo view_slam.launch

 如果最终是这样,说明成功了。

接下来需要控制键盘完成小车移动建图,在建完图后,执行代码

rosrun map_server map_saver -f path

完成地图的保存,保存完会生成2个文件,一个pgm文件和一个yaml文件,即地图图片文件和地图描述文件。

如图中的my_ground.pgm和my_ground.yaml

 四.完成在新建地图下的导航

在navigation_sim_demo/README.md文件,查看发现地图的加载是在amcl_demo.launch里实现的,因此我们复制一份该文件,并重命名为my_ground_amcl.launch,并修改如下

<launch>
  <!-- Map server -->
  <arg name="map_file" default="$(find slam_sim_demo)/maps/my_ground.yaml"/>
  <node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />

  <!-- Localization -->
  <arg name="initial_pose_x" default="5.0"/>
  <arg name="initial_pose_y" default="0.0"/>
  <arg name="initial_pose_a" default="-2.0"/>
  <arg name="custom_amcl_launch_file" default="$(find navigation_sim_demo)/launch/include/robot_amcl.launch.xml"/>

  <include file="$(arg custom_amcl_launch_file)">
    <arg name="initial_pose_x" value="$(arg initial_pose_x)"/>
    <arg name="initial_pose_y" value="$(arg initial_pose_y)"/>
    <arg name="initial_pose_a" value="$(arg initial_pose_a)"/>
  </include>

  <!-- Move base -->
 <include file="$(find navigation_sim_demo)/launch/include/move_base.launch.xml"/>
</launch>

可见,在第三行修改成了刚刚建好的my_ground.yaml地图配置文件。

接着执行代码

roslaunch robot_sim_demo my_ground.launch
roslaunch navigation_sim_demo my_ground_amcl.launch
roslaunch navigation_sim_demo view_navigation.launch

实现在现有地图的导航

 可以看到,小车成功在地图导航。

感兴趣的小伙伴也可以自己搭建仿真环境,实现建图和导航。

也可以把差速轮换成麦克纳姆轮,这也是我之后想做的地方,大家可以多学习交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习ROS-Academy-for-Beginners-noetic,修改记录 的相关文章

  • 机器学习西瓜书学习记录-第四章 决策树

    第4章 决策树 4 1基本流程 决策树 xff0c 一类常见机器学习方法 xff0c 希望从给定训练集学得一个模型用以对新示例进行分类 一般 xff0c 一棵决策树包含一个根结点 若干个内部结点和若干个叶结点 xff1b 叶结点对应于决策结

随机推荐

  • 机器学习西瓜书学习记录-第五章 神经网络

    第5章 神经网络 5 1神经元模型 神经网络中最基本的成分是神经元模型 M P神经元模型 xff0c 又称 阈值逻辑单元 在模型中 xff0c 神经元接收到来自n个其他神经元传递过来的输入信号 xff0c 这些输入信号通过带权重的连接进行传
  • 机器学习西瓜书学习记录-第六章 支持向量机

    第6章 支持向量机 移步b站学习 学习贴
  • SurfaceFlinger模块

    SurfaceFlinger是一个系统服务 xff0c 作用就是接受不同layer的buffer数据进行合成 xff0c 然后发送到显示设备进行显示 SurfaceFlinger进程是什么时候起来的 xff1f 在之前的Android低版本
  • STM32-串口通信实验

    一 通信接口背景知识 1 通信的两种方式 xff1a 并行通信 传输原理 数据各个位同时传输 优点 速度快缺点 占用引脚资源多 串行通信 传输原理 数据按位顺序传输 优点 占用引脚资源少缺点 速度相对较慢 2 串行通信 按照数据传送的方向
  • UDP介绍,编程流程

    介绍 xff1a 面向无连接的用户数据报协议 xff0c 不需要建立任何连接 xff0c 目的主机接收后不需要确认 UDP特点 xff1a 相比TCP速度快一些简单的应用程序直接使用 不需要加密对于海量数据不采用UDP广播和多播必须采用UD
  • 数据结构-线性表的链式存储(包含代码实现)

    线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的 xff0c 即逻辑上相邻的数据元素在物理上不一定相邻线性表的链式存储结构又称为非顺序映像或链式映像 用一组物理位置任意的存储单元来存放线性表的数据元素这组存储单元既可以是连
  • Android6.0以上高危权限动态申请

    1 在项目的Manifest xml中添加静态权限 拨打电话 lt uses permission android name 61 34 android permission CALL PHONE 34 gt 发送短信 lt uses pe
  • Linux入学—共享文件夹(保姆教程)

    序言 自从上学期上完课以来就没有用过Linux xff0c 最近因为学习传感器数据上传云端的需要 xff0c 安装了Linux xff0c 在开始装jdk的时候需要下载jdk的压缩包 xff0c 需要通过windows上传到Ubuntu 之
  • Ubuntu下安装java环境及idea

    前言 一 JDK的安装 二 配置环境 1 在 系统中配置java环境 三 idea社区版的安装 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 由于自己的学习需要 xff0c 这里需要用到在Linux系统下的Java
  • stm32f103 光敏传感器BH1750 实现串口回显

    在制作智能花盆的过程中 xff0c 使用了光敏传感器BH1750 因为在网上找了很多都是关于51的 xff0c 32方面的比较少 xff0c 所以这里记录一下BH750的驱动代码 链接 xff1a https pan baidu com s
  • STM32中HAL库使用-串口接收(一)

    1 中断接收 1 1先看中断接收的流程 xff08 以 USART2 为例 xff09 在启动文件中找到中断向量 USART2 IRQHandler 找到 USART2 IRQHandler 的函数定义 可以看到这里又转到另一个函数里去了
  • STM32中HAL库使用-串口发送(二)

    2 中断发送 2 1发送中断的触发流程 由于在STM32中usart2的入口中断只有一个 xff1a 就是上图的中断向量表中红框标出来的 其他的所有中断其实都是从这里出发的 xff0c 我们再和捋接收一样捋一遍发送 首先是USART2 IR
  • Ubuntu20.04下编译安装ORBSLAM2_with_pointcloud_map总结

    与此物大战六个小时 xff0c 终于解决所有问题 xff0c 写此短文记录一下 一 在github上下载源码后 xff0c 解压缩 xff0c 如下 进行g2o with orbslam2的编译 1 报错信息 xff1a ORBSLAM2
  • Android使用ASM修改函数

    目录 参考文章 Android 编译插桩 xff08 一 xff09 xff1a ASM https github com yxhuangCH CSLearn blob master android Android 20 E7 BC 96
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一 引言 ORB SLAM2 xff0c 它是基于单目 双目或RGB D相机的一个完整的SLAM系统 xff0c 其中包括地图重用 回环检测和重定位功能 这个系统可以适用于多种环境 xff0c 无论是室内小型手持设备 xff0c 还是工厂环
  • opencv 打开双目摄像头只能采集一个摄像头的问题,及左右目图像分割成两幅图

    一 opencv 打开双目摄像头只能采集一个摄像头的问题 本人采用单USB接口的双目摄像头 xff0c 总是只打开左摄像头的图 xff0c 经摸索后发现主要就是分辨率的问题 xff0c 如果分辨率设置正确 xff0c 便可以打开左右目合成图
  • 基于opencv(c++)和matlab的usb双目相机标定

    本人由于实际需要入手了一款双目免驱usb摄像头 xff0c 因为需要做深度估计 xff0c 故需要标定内参 xff0c 双目相机标定主要是为了获得摄像头的内参 f 1 dx 1 dy cx cy 畸变参数 k1 k2 k3 p1 p1 和外
  • 解决在编译各类改版orbslam时的undefined reference to ****************************问题

    如上面这个问题 xff0c 可以参考这个链接 xff1a 参考链接 参考上面的链接 xff0c 我作出的修改具体为 xff08 1 xff09 移动所缺少的文件 xff08 如本例的libopencv core so 4 2 0 xff09
  • 贝叶斯滤波与卡尔曼滤波(一)

    一 绪论 贝叶斯滤波 xff1a 通过概率统计的方法 xff08 贝叶斯公式 xff09 xff0c 对随机变量进行处理 xff0c 来减小他的不确定度 这里所指的随机变量和教材中所说的变量并不是一回事 xff0c 贝叶斯滤波中所提到的随机
  • 学习ROS-Academy-for-Beginners-noetic,修改记录

    一 编译安装ROS Academy for Beginners noetic 可以参考我之前的博客ROS Academy for Beginers noetic安装教程 之后可以看到里面提供了很多例程 xff0c 包括 软件包 内容 rob