【ROS】入门(二)

【ROS】入门(二)

什么是SLAM

同时定位与地图创建,通过激光雷达对障碍物的扫射绘成栅格地图,将栅格地图的特征(参照物)进行匹配和拼接,就可以完成建图啦!

Hector_Mapping初体验

在index.ros.rog中搞清楚Hector_Mapping的发布话题的订阅话题:

在这里插入图片描述

在终端下载功能包

$ sudo apt install ros-noetic-hector-mapping

过程

$ roslaunch wpr_simulation wpb_stage_slam.launch
$ rosrun hector_mapping hector_mapping
$ rosrun rviz rviz
$ rosrun rqt_robot_steering rqt_robot_steering

通过launch文件启动Hector_Mapping

在catkin_ws/src/中新建一个软件包slam_pkg

$ catkin_create_pkg slam_pkg roscpp rospy std_msgs

在VScode中的slam_pkg中创建一个launch文件

将要创建的launch文件放在launch文件夹中

<launch>
	<include file="$(find wpr_simulation)/launch/wpb_stage_slam.launch">
	<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
		<param name="map_update_distance_thresh" value="0.1"/>         ##修改hector_mapping功能包的参数,在ros index中可以找到对应参数名
		<param name="map_update_angle_thresh" value="0.1"/>          
		<param name="map_pub_period" value="0.1"/>
	</node>
	<node pkg="rviz" type="rviz" name="rviz" args="-d $(find slam_pkg)/rviz/slam.rviz"/>
	<node pkg="rqt_robot_steering type="rqt_robot_steering" name="rqt_robot_steering"/>
</launch>

初识ROS的TF系统

TF是TransForm的缩写,主要描述的是两个坐标系的空间关系,可以理解为坐标系变换,如下地图坐标系和机器人坐标系的距离(x,y)和角度偏移量(z)就属于一个坐标系

在这里插入图片描述

在这里插入图片描述

TF的消息结构:

在这里插入图片描述

tf树:

在这里插入图片描述

里程计在激光雷达SLAM中的作用

里程计

一种软件算法,根据电机的转动数据,计算机器人的位移信息

Gmapping核心算法

先使用里程计推算机器人的位移,然后通过雷达点云贴合障碍物轮廓,修正里程计误差的方法

Gmapping的使用

Subscribed Topic

①tf(tf/tfMessage)

雷达坐标系——>base_link

base_link——>odom

②scan(sensor_msgs/LaserScan)

Published Topic

①map_metadata(nav_msgs/MapMetaData)

②map(nav_msgs/OccupancyGrid)

③~entropy(std_msgs/Float64)

Provided tf Transforms

map——>odom

地图的保存和加载

功能包:map_server

保存

rosrun map_server map_saver         #在主文件夹中运行

加载

rosrun map_server map_server mymap.yaml

rosrun map_server map_saver #在主文件夹中运行


### 加载

rosrun map_server map_server mymap.yaml


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(Robot Operating System)是一种用于构建机器人应用程序的开源框架,它提供了一系列工具、库和约定,用于简化机器人软件开发和集成。下面我将以一个简单的实例来介绍ROS入门使用。 假设我们要编写一个控制机器人移动的程序。首先,我们需要在ROS中创建一个包(package),这可以通过使用指令`catkin_create_pkg package_name`来完成。包的目的是用于组织和管理我们的程序。 然后,我们需要编写一个节点(node),节点是ROS中基本的执行单元,可以理解为一个独立的进程,通过使用指令`roscpp_create_pkg node_name`来创建节点。节点是用于执行我们的具体任务,比如控制机器人移动、接收传感器数据等。 接下来,我们需要定义并发布一个移动指令的主题(topic),通过使用指令`rostopic pub topic_name message_type data`来发布主题。主题是一种在ROS中用于节点之间通信的机制,我们可以通过发布主题来传递控制指令。 最后,我们需要编写一个订阅主题的节点,来实现对移动指令的接收和执行。这个节点将订阅我们在上一步中发布的移动指令主题,一旦接收到指令,就会执行相应的动作。 通过以上的步骤,我们就可以完成一个简单的ROS实例,用于控制机器人的移动。当然,这只是一个入门级的例子,实际中ROS有更复杂的功能和应用场景,比如SLAM(Simultaneous Localization and Mapping)、路径规划等。希望这个例子能帮助你快速入门ROS,更多的学习和实践可以让你更加熟练地使用ROS来构建各种机器人应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值