ROS-基于PX4的无人机SLAM建图(Cartographer)仿真

这篇具有很好参考价值的文章主要介绍了ROS-基于PX4的无人机SLAM建图(Cartographer)仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、准备工作

1.1、安装Ubuntu和ROS系统

首先在电脑上安装好Ubuntu系统和ROS系统,我安装的是Ubuntu18.04和ROS Melodic,不同的Ubuntu版本对应不同的ROS版本

ROS发布日期 ROS版本 停止支持日期 对应Ubuntu版本
2018年5月23日 ROS Melodic Morenia 2023年5月 Ubuntu 18.04
2016年5月23日 ROS Kinetic Kame 2021年4月 Ubuntu 16.04 (Xenial) Ubuntu 15.10 (Wily)
2015年5月23日 ROS Jade Turtle 2017年5月 Ubuntu 15.04 (Wily) Ubuntu 14.04 LTS (Trusty)
2014年7月22日 ROS Indigo Igloo 2019年4月 Ubuntu 14.04 (Trusty)
2013年9月4日 ROS Hydro Medusa 2015年5月 Ubuntu 12.04 LTS (Precise)
2012年12月31日 ROS Groovy Galapagos 2014年7月 Ubuntu 12.04 (Precise)

Ubuntu18.04安装ROS Melodic(详细,亲测安装完成,有清晰的截图步骤)

1.2、Cartographer功能包安装

1.2.1 安装工具:

sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build

1.2.2 创建并初始胡工作空间:

使用如下命令创建并初始化工作空间(为了不和其他功能包冲突,最好为cartographer专门创建一个工作空间,这里我们新创建了一个工作空间carto_ws)

mkdir -p carto_ws/src
cd carto_ws
wstool init src   #ctrl+H 打开隐藏文件,会在src文件夹下生成.rosinstall文件

1.2.3 更新依赖

进入到carto_ws/src目录下,ctrl+H打开隐藏文件,打开.rosinstall文件,将如下代码复制粘贴进去

- git:
    local-name: cartographer
    uri: https://github.com/cartographer-project/cartographer.git
    version: master
- git:
    local-name: cartographer_ros
    uri: https://github.com/cartographer-project/cartographer_ros.git
    version: master
- git:
    local-name: ceres-solver
    uri: https://github.com/ceres-solver/ceres-solver.git
    version: master

再执行

wstool update -t src

注意:自动下载可能不成功,可以手动从上面的github地址中下载,解压放在carto_ws/src目录下。如果手动下载,可以不需要执行wstool update -t src命令

1.2.4 安装依赖并下载cartographer相关功能包

rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

${ROS_DISTRO}填自己的ROS版本名称,如melodic

1.2.5 编译并安装

catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash

若编译安装没有报错,则cartographer功能包已安装成功。

3、安装功能包及源码下载

成功安装ROS和cartographer功能包后,参考仿真平台基础配置,安装Gazebo,MAVROS,PX4和XTDrone源码,本仿真将部分依赖XTDrone源码实现。

二、Cartographer建图配置

进入carto_ws/src/cartographer_ros/cartographer_ros/launch目录下,创建一个launch文件

cd ~/carto_ws/src/cartographer_ros/cartographer_ros/launch
touch cartographer_demo_rplidar.launch
gedit cartographer_demo_rplidar.launch

cartographer_demo_rplidar.launch文件的具体内容如下:

<launch>
  <!-- 在仿真时设为true,但当需要实际建图时,一定要改为false,否则会报错 -->
  <param name="/use_sim_time" value="true" />

  <!-- 其中的***.lua文件需要改为自己的lua文件 -->
  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename rplidar.lua"
      output="screen">
    <!-- remap后面的名称根据实际设置,可以在rostopic list中查找 -->
    <remap from="scan" to="iris_0/scan" />
  </node>

  <!-- 这是实现建图必不可少的部分 -->
  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
</launch>

rplidar.lua文件在carto_ws/src/cartographer_ros/cartographer_ros/configuration目录下,具体内容及参数注释如下:

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
-- 地图坐标系,用来发布子地图的ROS坐标系ID,位姿的父坐标系,通常是"map"
  map_frame = "map",
-- 建图时跟踪的坐标系,如果使用了IMU应该是IMU的位置,尽管它可能转动了,"imu_link"或"base_link"
  tracking_frame = "iris_0/laser_2d",
-- 作为发布位置的子坐标系的ROS坐标系ID
-- 对于"odom"例程,如果系统的其他地方提供"odom"坐标系,那么"odom"在map_frame中的位置将会被发布,否则,设置为"base_link"即可
  published_frame = "base_link",
-- "provide_odom_frame"为真时使用,位于"published_frame"和"map_frame"之间,用来发布本地SLAM结果(非闭环),通常是"odom"
  odom_frame = "odom",
-- 如果使能,这个局部的、非闭环的、连续的"odom_frame"在"map_frame"中的位置将被发布
  provide_odom_frame = true,
-- 如果使能,发布的位姿信息将会被限制为2D位姿(无横滚、俯仰和z位置)。
  publish_frame_projected_to_2d = false,
--  use_pose_extrapolator = true,
-- 如果使能,将订阅nav_msgs/Odometry类型的topic "odom",这种情况下,必须提供里程计,而且里程计的信息将被包含在SLAM中
  use_odometry = false,
-- 如果使能,将订阅sensor_msgs/NavSatFix类型的topic "fix",这种情况下,必须提供导航数据,而且导航数据的信息将被包含在SLAM中
  use_nav_sat = false,
-- 如果使能,将订阅cartographer_ros_msgs/LandmarkList类型的topic "landmarks"
  use_landmarks = false,
-- 订阅的laser scan topics的个数
-- 对于单个激光,订阅sensor_msgs/LaserScan类型的"scan" topic(sensor_msgs/LaserScan这个topic将被用于SLAM的输入)
-- 对于多个激光,topics为"scan_1","scan_2"...(如果num_laser_scans大于1,那么多个被编号的scan topics,比如scan1、scan2、scan3...直到并包括num_laser_scans,将被用作SLAM的输入)
  num_laser_scans = 1,
-- 订阅多回波技术laser scan topics的个数
-- 对于单个激光,订阅sensor_msgs/MultiEchoLaserScan类型的"echoes"topic
-- 对于多个激光,topics为"echoes_1", "echoes_2"...
  num_multi_echo_laser_scans = 0,
-- 接收到的(多回波)laser scan中分离出来的点云的个数,分割scan能够保证在激光设备移动的过程中scans不弯曲变形。有相应的轨迹生成器选项可以将分离的scans累积到点云中,用来进行scan matching
  num_subdivisions_per_laser_scan = 1,
-- 订阅的点云topics的个数
-- 对于单个测距仪,订阅sensor_msgs/PointCloud2类型的"points2" topic
-- 对于多个测距仪,topics为"points2_1", "points2_2"...
  num_point_clouds = 0,
-- 使用tf2机型转换搜索的超时时间秒数
  lookup_transform_timeout_sec = 0.2,
-- 发布submap位置的间隔秒数
  submap_publish_period_sec = 0.3,
-- 发布位置的间隔秒数
  pose_publish_period_sec = 5e-3,
-- 发布轨迹标记的间隔秒数
  trajectory_publish_period_sec = 30e-3,
  rangefinder_sampling_ratio = 1.,
  odometry_sampling_ratio = 1.,
  fixed_frame_pose_sampling_ratio = 1.,
  imu_sampling_ratio = 1.,
  landmarks_sampling_ratio = 1.,
}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1

POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65

return options

修改rplidar.lua文件的参数之后,要重新进行编译,因为lua文件,它调用了别的文件,参数修改后会有一个整体的影响:

cd carto_ws/
catkin_make_isolated --install --use-ninja

三、仿真实现

1、打开PX4中自带的室内地图环境,里面包含一个带有激光雷达的无人机(iris):

roslaunch px4 indoor3.launch 

 ros无人机仿真,ubuntu,人工智能,lua

2、运行cartographer算法,在运行之前注意要source一下进入工作空间,否则可能会报错:

source ~/carto_ws/install_isolated/setup.bash
roslaunch cartographer_ros cartographer_demo_rplidar.launch

3、启动通信脚本

cd ~/XTDrone/communication/
python multirotor_communication.py iris 0

4、启动键盘控制脚本,控制无人机飞行,注意不能飞太高,导致激光雷达扫不到围墙

cd ~/XTDrone/control/keyboard/
python multirotor_keyboard_control.py iris 1 vel

5、通过键盘控制无人机飞行,扫描地图环境,建立地图

可以先按b进入offboard模式,然后按t解锁无人机,可以从gazebo中看到无人机桨叶开始转动,再连续按i键(upward vel +)使upward vel达到0.3m/s以上,此时无人机开始起飞,飞到一定高度后按s或k使无人机悬停于某一高度,就可以移动无人机进行建图了。

ros无人机仿真,ubuntu,人工智能,lua

6、完成建图后,保存地图文章来源地址https://www.toymoban.com/news/detail-607061.html

rosrun map_server map_saver -f ~/carto_ws/src/cartographer_ros-master/cartographer_ros/map/indoor3_carto

到了这里,关于ROS-基于PX4的无人机SLAM建图(Cartographer)仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停

    在配置mid360运行环境后,可使用mid360进行室内的精准定位。 在livox_ros_driver2的上级目录src下保存fast-lio的工程 为使用mid360作为硬件输入修改源代码中的所有 livox_ros_driver 为 livox_ros_driver2 (包括.cpp .h 以及 package.xml) 在 livox_ros_driver2 的pkg中编译 编译过程大概需要3g的内存,若

    2024年04月08日
    浏览(35)
  • PX4无人机调参

    PX4 1.13.2 日志分析软件:flight review https://logs.px4.io/ 产生震动的原因: 1,桨叶损坏、动平衡差 2,电机桨座不垂直,电机动平衡差 3,机架刚性不足 4,部件松动 降低震动的方法: 软件滤波:调低通滤波或者陷波滤波器参数 硬件减震:调减震球的软度或者加配重 调参时可以用

    2024年02月15日
    浏览(43)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(46)
  • PX4无人机 - 键盘控制飞行代码

    仿真效果 实机效果 由于图片限制5M以内,只能上传一小段了,整段视频请点击链接 Pixhawk 6c | 无人机 | 键盘控制无人机 | Offboard模式 核心: 发布 mavros/setpoint_velocity/cmd_vel_unstamped 话题,控制x y z三个方向的速度 运行前先运行PX4自带仿真,例如 接着运行以下代码(根据WHEELTEC麦

    2024年02月16日
    浏览(33)
  • px4+vio实现无人机室内定位

    文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件 软件 机载电脑: Intel NUC 系统:Ubuntu 20.04 相机: Intel Realsense D435i ros:noetic 飞控:Pixhawk 2.4.8 固件:PX4 1.14.0 完整vins_to_mavros 功能包地址: https://github.com/rotorcraftman/px4ctr

    2024年02月03日
    浏览(36)
  • PX4/PIXHAWK无人机代码控制流程

    一般来说,无人机的飞行控制方式主要有三种,分别为遥控器,地面站以及自定义软件;其中地面站跟自定义软件广义来说可归为一类,地面站本就是被用来控制飞行器,已经被开发好的软件;但是说到地面站,通常指的是QGC(QGroundControl)和MP(MissionPlane);两者区别主要在

    2024年01月19日
    浏览(28)
  • 【无人机】PIXHAWK、PX4、APM区别

    PIXHAWK、PX4、APM APM固件 专为Arduupilot开发的固件,现也用于PIXHAWK。有ArduCopter社区支撑、开放,功能全、迭代升级快,适合直接用。由于有较多的历史兼容性需求,软件代码体系相对杂乱,还封装了PX4的内核,学习起来困难些。 PX4固件 专为PIXHAWK开发的固件。相对封闭,代码体

    2024年02月20日
    浏览(33)
  • Ubuntu PX4无人机仿真环境配置

     目录 一、VM虚拟机安装ubuntu18.04   1、VMware安装   2、新建虚拟机 二、Ubuntu系统配置   1、更改软件安装源   2、安装中文输入法 三、PX4环境搭建   1、安装git   2、下载px4源码   3、安装ROS   4、安装MAVROS   5、安装QGC   6、仿真测试 四、其他工具安装   1、VScode安装      

    2024年02月02日
    浏览(33)
  • PX4学习笔记——无人机以及QGC操作

    官方教程链接:https://docs.qgroundcontrol.com/master/en/SetupView/SetupView.html 电脑先打开QGC,进入Vehicle Setup,点击Firmware。无人机飞控使用USB线连接电脑,然后选择烧录的.px4程序(可以是官方的,也可以是自己编译生成的)。 点击Airframe,如果无人机为四旋翼,则点击 Generic Quadcopter

    2024年02月11日
    浏览(29)
  • 无人机/飞控--ArduPilot、PX4学习记录(2)

    这是一篇碎碎念,零零碎碎的记录了环境配置过程, 仅供本人记录学习历程和参考。 (记录的挺乱的,但是文章链接里的博客写的是真好) 本章主要完成的目标 : 安装PX4 并 成功运行出3D无人机界面。 参考文章: 搭建PX4环境: PX4/Pixhawk - 编译环境搭建_pix4 yu pixhawk-CSDN博客 使

    2024年03月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包