在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是
该项目的slam_bot已经上传我的Github。
由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置
使用Solidworks建立模型如下图,其中有很多部分值得注意。
值得注意的是,在下图中有两个坐标系,分别是坐标系1和coordinate0。在一开始,我没有意识到使用coordinate0作为坐标原点是一个多么错误的选择。在后来使用skid_steer_drive_controller
gazebo插件时,模型一直在原地转圈,直到我在rviz中查看tf转换关系时,才发现是错误的tf转换,导致了插件的控制错误。所以一定要严格遵循上述所说的坐标系建立规则。
使用solidworks的urdf_exporter插件导出urdf和模型文件。在图1-2中base_link忘记选择参考坐标系了,若以上图坐标系为准,则需要选择 - 坐标系1。
关于更多urdf_exporter安装和使用可以参考我的博客-【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真.。
若选择无误,就可以导出模型了。
我在Github中提供了最初始的slam_bot package文件。
导航到urdf文件夹
$ ~/catkin_ws/src/slam_bot/urdf
将slam_bot.urdf
更名成slam_bot.xacro
,并新建slam_bot.gazebo.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>
添加如下插件
skid_steer_drive_controller
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]。写在前面这篇文章作为基础文章也是本文的学习和理解的过程,在将会给出更多的注释和“废话”帮助自己理解。同时有...