首页 > 【SLAM建图和导航仿真实例】(一)- 模型构建

【SLAM建图和导航仿真实例】(一)- 模型构建

引言

在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是

  • (一)模型构建
  • (二)根据已知地图进行定位和导航
  • (三)使用RTAB-MAP进行建图和导航

该项目的slam_bot已经上传我的Github。

由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置

  • 内存 8G
  • CPU 四核
  • 禁用硬件加速(重要:否则gazebo会打开失败)

一、模型构建

1、使用Solidworks建立slam_bot包

使用Solidworks建立模型如下图,其中有很多部分值得注意。

  1. 定义底盘底面为base_link坐标系的xoy平面,底面中点为坐标原点,小车正方向为x轴正方向建立右手系;
  2. 各个车轮坐标系原点为各个车轮内侧平面圆心,x轴与base_link坐标系x轴对齐,y轴与车轴平齐(与base_link坐标系y轴对齐或相向)建立右手系;
  3. 车轮的旋转轴分别为对应的转轴轴线。

值得注意的是,在下图中有两个坐标系,分别是坐标系1coordinate0。在一开始,我没有意识到使用coordinate0作为坐标原点是一个多么错误的选择。在后来使用skid_steer_drive_controllergazebo插件时,模型一直在原地转圈,直到我在rviz中查看tf转换关系时,才发现是错误的tf转换,导致了插件的控制错误。所以一定要严格遵循上述所说的坐标系建立规则。

urdf

图1-1 solidworks模型

使用solidworks的urdf_exporter插件导出urdf和模型文件。在图1-2中base_link忘记选择参考坐标系了,若以上图坐标系为准,则需要选择 - 坐标系1

关于更多urdf_exporter安装和使用可以参考我的博客-【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真.。

在这里插入图片描述

图1-2 urdf-exporter导出界面

若选择无误,就可以导出模型了。

我在Github中提供了最初始的slam_bot package文件。

2.更改slam_bot包

(1)urdf文件夹

导航到urdf文件夹

$ ~/catkin_ws/src/slam_bot/urdf

slam_bot.urdf 更名成slam_bot.xacro,并新建slam_bot.gazebo.xacro文件。

更改slam_bot.xacro

添加xacro namespace。

<robot  name="slam_bot" xmlns:xacro="http://www.ros.org/wiki/xacro">

添加slam_bot.gazebo.xacro,导入gazebo插件

  <xacro:include filename="$(find slam_bot)/urdf/slam_bot.gazebo.xacro" />

在base_link节点之前添加base_footprint节点

  <link name="base_footprint">  link><joint name="base_link_joint" type="fixed"><origin xyz="0 0 0" rpy="0 0 0" /><parent link="base_footprint"/><child link="base_link" />joint>

在camera节点之后添加laser节点

  <link name="hokuyo"><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="package://slam_bot/meshes/hokuyo.dae"/>geometry>collision><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="package://slam_bot/meshes/hokuyo.dae"/>geometry><material name="red"><color rgba="1.0 0 0 1.0"/>material>visual><inertial><mass value="1e-5" /><origin xyz="0 0 0" rpy="0 1.57 0"/><inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" />inertial>link><joint name="hokuyo_joint" type="fixed"><axis xyz="0 0 0" /><origin xyz="0 0 0" rpy="0 0 0"/><parent link="base_link"/><child link="hokuyo"/>joint>

更改各个joint设置,如joint_wheel_FR。注意的设置,否则也会导致错误的控制。

  <jointname="joint_wheel_FR"type="continuous"><originxyz="0.0800000000000013 -0.0799999999999997 0.04"rpy="0 0 0" /><parentlink="base_link" /><childlink="link_wheel_FR" /><axisxyz="0 1 0" />joint>

joint type设置为“continuous”,类似于转动关节,但对其旋转没有限制。它可以绕一个轴连续旋转。关节会有自己的旋转轴axis,一些特定的关节动力学dynamics与关节的物理特性(如“摩擦”)相对应,以及对该关节施加最大“努力”和“速度”的某些限制limits。这些限制对于物理机器人是有用的约束,并且可以帮助在仿真中创建更健壮的机器人模型。

点击这里来更好地理解这些限制。

RGB-D点云是默认朝上,需向slam_bot.xacro中添加如下的link和joint

  <link name="camera_depth_optical_frame" /><joint name="camera_depth_optical_joint" type="fixed"><origin rpy="-1.57079632679 0 -1.57079632679" xyz="0 0 0" /><parent link="camera"/><child link="camera_depth_optical_frame" />joint>
更改slam_bot.gazebo.xacro

添加如下插件

  • 四轮机器人控制驱动:skid_steer_drive_controller
  • RGBD 深度摄像机:libgazebo_ros_openni_kinect
  • 激光传感器: head_hokuyo_sensor

<robot><gazebo><plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so"><alwaysOn>truealwaysOn><updateRate>100.0updateRate><robotNamespace>/robotNamespace><leftFrontJoint>joint_wheel_FLleftFrontJoint><rightFrontJoint>joint_wheel_FRrightFrontJoint><leftRearJoint>joint_wheel_BLleftRearJoint><rightRearJoint>joint_wheel_BRrightRearJoint><wheelSeparation>0.16wheelSeparation><wheelDiameter>0.08wheelDiameter><robotBaseFrame>base_footprintrobotBaseFrame><torque>20torque><commandTopic>cmd_velcommandTopic><odometryTopic>odomodometryTopic><odometryFrame>odomodometryFrame><broadcastTF>1broadcastTF>plugin>gazebo><gazebo reference="camera"><sensor type="depth" name="camera"><always_on>truealways_on><visualize>falsevisualize><update_rate>15.0update_rate><camera name="front"><horizontal_fov>1.047197horizontal_fov><image><format>B8G8R8format><width>400width><height>300height>image><clip><near>0.01near><far>8far>clip>camera><plugin name="camera_controller" filename="libgazebo_ros_openni_kinect.so"><baseline>0.1baseline><alwaysOn>truealwaysOn><updateRate>15.0updateRate><cameraName>cameracameraName><imageTopicName>/camera/rgb/image_rawimageTopicName><cameraInfoTopicName>/camera/rgb/camera_infocameraInfoTopicName><depthImageTopicName>/camera/depth/image_rawdepthImageTopicName><depthImageCameraInfoTopicName>/camera/depth_registered/camera_infodepthImageCameraInfoTopicName><pointCloudTopicName>/camera/depth_registered/pointspointCloudTopicName><frameName>camera_depth_optical_frameframeName><pointCloudCutoff>0.35pointCloudCutoff><pointCloudCutoffMax>4.5pointCloudCutoffMax><CxPrime>0CxPrime><Cx>0Cx><Cy>0&l                    

更多相关:

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...

  • 公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起每交流一起进步,有兴趣的可联系微信:920177957。本文来自点云PCL博主的分享,未经作者允许请勿转载,欢迎各位同学积极分享和交流。资源三维点云论文及相关应用分享【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法3D目标检测...

  • Thanks to LOAM, A-LOAM, and LIO-SAM code authors. The major codes in this repository are borrowed from their efforts.代码:https://github.com/gisbi-kim/SC-A-LOAM编译:点云PCL本...

  • 文章:Inertial-Only Optimization for Visual-Inertial Initialization作者:Carlos Campos, Jose M.M. Montiel and Juan D. Tard ´ os´代码:https://github.com/bxh1/VIDO-SLAM.git编译:点云...

  • 点云PCL免费知识星球,点云论文速读。文章:Monocular Object and Plane SLAM in Structured Environments作者:Shichao Yang, Sebastian Scherer翻译:particle本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF论文,欢...

  • 点云PCL免费知识星球,点云论文速读。文章:Persistent Map Saving for Visual Localization for Autonomous Vehicles: An ORB-SLAM 2 Extension作者:Felix Nobis∗, Odysseas Papanikolaou, Johannes Be...

  • 论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信[email protected]。写在前面这篇文章作为基础文章也是本文的学习和理解的过程,在将会给出更多的注释和“废话”帮助自己理解。同时有...