一、引言

1、本博文主要讲具体的实车调试的配置过程。
2、底盘是松灵的底盘,已经提供了ros接口,只需要发布cmd_vel话题给相应的速度和角速度的值就可以控制其移动,所以我们只需要关注move_base包的输入,以及如何给定位信息即可。

二、整体思路与流程

1、tf_tree的搭建
(1)tf_tree可以理解为各个坐标系之间的变换关系,一个最基本的tf_tree为map->odom->base_footprint,其中base_footprint通常位于车底盘中心位置,下级可以接传感器等设备。
(2)map->odom->base_footprint通常是启动定位算法就已经具备了,并不需要我们自己搭建,我们只需要根据雷达或其他传感器与车底盘中心位置的坐标系变换关系发布tf的静态坐标变换就可以实现整个tf_tree之间的流通。
(3)如下是LIO-SAM运行会发布出来的tree,我实际运行将base_link改成了base_footprint,因为move_base指定的是这个,但是也可以修改的,但是从定位这边改会方便一些。

(4)下图为我们实车运行时候的tf_tree,可以看到如我所说,记得将os_sensor接到base_footprint下,如果雷达安装位置在车体正中心并且方向与车体是一致的(前x,左y,上z),就直接给个全0的静态变换即可。

rosrun tf static_transform_publisher 0 0 0 0 0 0 /base_footprint /os_sensor 100

实际运行的时候可以通过tf_echo看到各个tf之间的坐标变换的变化情况,一般map->odom是静态的,odom->base_footprint是动态的。

rosrun tf tf_echo [父坐标系] [子坐标系]


2、move_base需要上层提供的信息
上一步我们完成了tf_tree的构建,现在需要和move_base在数据层面对接上,即其需要的话题(底下这张图暂时用下别人的)

(1)/odom
里程计信息可以使用lio-sam发布出来的==/lio_sam/mapping/odometry_incremental、/lio_sam/mapping/odometry==,这里需要做一个话题的重映射,映射为/odom,有很多种方式,比较简单的方式就是终端直接给个rosrun指令。

rosrun topic_tools throttle messages /lio_sam/mapping/odometry_incremental 50 /odom

(2)/scan
此为单线激光雷达信息,但是我们用的是ouster 64线激光雷达,所以需要一个points_cloud to laser_scan的包,这个后面说,如果有和我们用的雷达是一样的,技术手册如下https://ouster.atlassian.net/wiki/spaces/SUPPORT/pages/831062017/IP
(3)/map
这里move_base加载静态地图的时候就会发布,所以暂时不用管这个,所以只需要提供给move_base静态地图、里程计信息、单线雷达信息就可以正常让move_base工作了。

三、必要软件包的下载与安装

3.1 一键安装ROS以及创建工作空间

没必要把时间费在这个上面,直接一键安装就可以

# ros一键安装
wget http://fishros.com/install -O fishros && . fishros
# 创建工作空间
mkdir -p ~/catkin_ws/src
catkin_make
gedit ~/.bashrc
source /home/lixushi/catkin_ws/devel/setup.bash

3.2 LIO-SAM

数据包在github上面下载就行

# 安装依赖
sudo apt-get install -y ros-melodic-navigation
sudo apt-get install -y ros-melodic-robot-localization
sudo apt-get install -y ros-melodic-robot-state-publisher
sudo add-apt-repository ppa:borglab/gtsam-release-4.0
sudo apt install libgtsam-dev libgtsam-unstable-dev
cd ~/catkin_ws/src
sudo apt install git
git clone https://ghproxy.com/https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make
# 数据集测试
roslaunch lio_sam run.launch
rosbag play campus_small_dataset.bag(这里imu话题和点云话题要对应修改params.yaml数据,包括文件保存位置,The "imuTopic" parameter in "config/params.yaml" needs to be set to "imu_correct")

3.3 安装速腾雷达驱动

虽然我们这次用的不是速腾,但是思路是一样的,这里是将速腾激光雷达点云转换为velodyne的雷达数据格式之后就可以使用lio-sam了,这次的ouster激光雷达就不需要了
1、下载软件包

git clone https://ghproxy.com/https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
git submodule init
git submodule updatesudo apt-get update
sudo apt-get install -y libyaml-cpp-dev
sudo apt-get install -y  libpcap-dev

2、修改CMakeLists.txt和package.xml
(1)将文件顶部的set(COMPILE_METHOD ORIGINAL)改为set(COMPILE_METHOD CATKIN)
(2)将set(POINT_TYPE XYZI) 改为set(POINT_TYPE XYZIRT)
(3)将rslidar_sdk工程目录下的package_ros1.xml文件复制一份并且重命名为package.xml。
(4)catkin_make
3、更改本机ip地址
首先安装好雷达在平台上,供电准备好,雷达网口接终端
雷达本机ip是192.168.1.200
终端ip要配置成192.168.1.102(默认),子网掩码为255.255.255.0(我们的车上的ip为192.168.30.50,每一次修改ip后要将有线连接关闭重连,此外config中雷达型号要修改正确)
终端ping 192.168.1.200可以ping通则说明雷达通讯没问题
4、启动雷达

roslaunch rslidar_sdk start.launch

3.4 rs雷达话题转velodyne雷达话题

订阅/rslidar_points,转换为/velodyne_points

git clone https://github.com/HViktorTsoi/rs_to_velodyne.git
rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIRT

3.5 IMU驱动安装

这是我们用的imu的驱动安装方式,只是记录一下子,各位有自己的imu的话就自己看看

sudo apt-get install ros-melodic-imu-tools ros-melodic-rviz-imu-plugin
sudo apt-get install git -y
cd ~/catkin_ws/src/
git clone https://gitee.com/HANDS-FREE/handsfree_ros_imu.git
cd ~/catkin_ws
catkin_make
cd ~/catkin_ws/src/handsfree_ros_imu/scripts/
sudo chmod 777 *.py
## 检测imu串口
ls /dev/ttyUSB*

陀螺仪和加速计发布的话题:/handsfree/imu
磁力计发布的话题:/handsfree/mag

3.6 Cartographer安装与配置

这里是下载的想哥的包,按照他教程就安装挺方便的,我这里就是记录一下,因为这次用的是lio-sam所以就不讲这个包了,链接,提取码qswj

## cartographer依赖库安装
下载cartographer_install文件夹
chmod +x ./auto-carto-build.sh
./auto-carto-build.sh
## cartographer编译
git clone https://github.com/xiangli0608/cartographer_detailed_comments_ws.git
./catkin_make.sh

一些测试指令:

source install_isolated/setup.bash # 这句话可以添加到bashrc中
## 启动2d建图
roslaunch cartographer_ros lx_rs16_2d_outdoor.launch
## 保存2d轨迹
./finish_slam_2d.sh
## 纯定位模式
roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
## 启动3d建图
roslaunch cartographer_ros lx_rs16_3d.launch
## 保存3d轨迹
./finish_slam_3d.sh
## 使用asset生成ros格式的2d栅格地图
roslaunch cartographer_ros assets_writer_2d.launch
## 使用asset生成3d点云地图
roslaunch cartographer_ros assets_writer_3d.launch

3.7 点云pcd转pgm

git clone https://ghproxy.com/https://github.com/Hinson-A/pcd2pgm_package.git
catkin_make
修改run.launch文件相应的文件路径及名称
roslaunch pcd2pgm run.launch
rosrun map_server map_saver

3.8 安装Octomap

可以将三维点云地图实时转为二维栅格地图

sudo apt-get install ros-melodic-octomap-ros
sudo apt-get install ros-melodic-octomap-server
sudo apt-get install ros-melodic-octomap-rviz-plugins
sudo apt-get install ros-melodic-map-server
sudo apt-get install ros-melodic-navigation

sudo touch octomap_server.launch 创建launch文件,填入以下内容(如果计算机性能不好不要选择太大的分辨率,跟不上)

<launch><!--启动的节点--><node pkg="octomap_server" type="octomap_server_node" name="octomap_server"> <!--栅格分辨率--><param name="resolution" value="0.05" /><!--世界坐标系话题,一般为map--><param name="frame_id" type="string" value="/map" /><param name="sensor_model/max_range" value="1000.0" /><param name="latch" value="true" /><!--截取的三维点云范围--> <param name="pointcloud_max_z" value="1.2" /><param name="pointcloud_min_z" value="-0.5" /><param name="graound_filter_angle" value="3.14" /><!--订阅的点云消息名称 PointClout2,即上一步发布出来的点云topic--> <!-- cloud_in是octomap默认的输入话题,做一下映射--><remap from="/cloud_in" to="/lio_sam/mapping/cloud_registered" /></node></launch>

运行

roslaunch octomap_server octomap_server.launch
rosrun map_server map_saver -f ~/octomap/map /map:=/projected_map ##保存地图

3.9 安装pointcloud_to_laserscan

sudo apt-get install ros-melodic-tf2-sensor-msgs

进入github下载 https://github.com/ros-perception/pointcloud_to_laserscan/tree/lunar-devel
新建my_node.launch文件,填写以下内容

<?xml version="1.0"?><launch><!-- run pointcloud_to_laserscan node --><node pkg="pointcloud_to_laserscan" type="pointcloud_to_laserscan_node" name="pointcloud_to_laserscan"><remap from="cloud_in" to="/ouster/points"/><rosparam>target_frame: os_sensor # Leave disabled to output scan in pointcloud frametransform_tolerance: 0.01min_height: -0.5max_height: 0.2angle_min: -3.1415926 # -M_PIangle_max: 3.1415926 # M_PIangle_increment: 0.003 # M_PI/360.0scan_time: 0.1range_min: 0.3range_max: 50use_inf: trueinf_epsilon: 1.0# Concurrency level, affects number of pointclouds queued for processing and number of threads used# 0 : Detect number of cores# 1 : Single threaded# 2->inf : Parallelism levelconcurrency_level: 1</rosparam></node></launch>

启动

roslaunch pointcloud_to_laserscan my_node.launch

3.10 底盘控制

用的是松灵底盘,ros驱动包可以在网上下载

##使能 gs_usb 内核模块
sudo modprobe gs_usb##设置500k波特率和使能can-to-usb适配器
sudo ip link set can0 up type can bitrate 500000##查看can设备
ifconfig -a##安装并使用can-utils来测试硬件
sudo apt install can-utils##监听来自SCOUT 2.0底盘的数据
candump can0##下载ros依赖包
sudo apt-get install ros-melodic-teleop-twist-keyboard
sudo apt-get install libasio-dev##克隆编译scout_ros源码
git clone --recursive https://github.com/agilexrobotics/ugv_sdk.git
git clone https://github.com/agilexrobotics/scout_ros.git
##启动ROS 节点
roslaunch scout_bringup scout_minimal.launch
roslaunch scout_bringup scout_teleop_keyboard.launch

3.11 安装ouster64线雷达驱动

##配置电脑ip
192.168.2.1
子网掩码 255.255.255.0##配置雷达ip,这里的 eno1 要换成你自己的网卡名称,ping一下测试
sudo dnsmasq -C /dev/null -kd -F 192.168.2.2,192.168.2.100 -i enp3s0 --bind-dynamicgit clone https://ghproxy.com/https://github.com/ouster-lidar/ouster_example
catkin_make## 时间戳如果没有改成正确模式,会出现没有map坐标系的现象,雷达和imu外参标定不准会有抖动现象
## os-122130000698需要根据自己雷达型号更改
roslaunch ouster_ros sensor.launch sensor_hostname:=os-122130000698.local lidar_mode:=2048x10 timestamp_mode:=TIME_FROM_ROS_TIME #查找雷达当前地址
avahi-browse -lr _roger._tcp ## 设置雷达静态ip,可以设置下,这样雷达每次启动ip就不会变了
https://ouster.atlassian.net/wiki/spaces/SUPPORT/pages/831062017/IP

3.12 move_base功能包依赖

sudo apt-get install ros-melodic-costmap-converter
sudo apt-get install ros-melodic-mbf-costmap-core
sudo apt-get install ros-melodic-mbf-msgs
sudo apt-get install ros-melodic-libg2o

四、总结

以上为代码的配置与安装教程,接下来可以进行实车调试了,主要分为四个部分启动代码,这部分就不详细讲了,所需要的包都安装了以及tf_tree的搭建也讲了应该没什么大问题了,如果还有问题可以评论区问,以后有空我再补充详细一些(主要是讲详细了怕被打死,毕竟做项目用的)~~
建图时候的启动步骤:
(1)启动底盘驱动
(2)启动传感器:imu,雷达
(3)启动LIO-SAM建图,以及Octomap节点进行实时三维转二维操作
导航时启动步骤:
(1)启动底盘驱动
(2)启动传感器:imu,雷达
(3)启动LIO-SAM(这里可以替换为其他重定位代码,只要能提供里程计信息,最近看到了一个lio-sam重定位的github,回头详细看看)
(4)启动pointscloud to laserscan节点
(5)启动move_base导航

LIO-SAM定位+Move_base导航+实车调试相关推荐

  1. lio-sam实车调试之定位测试

    1.首先阅读一下recolization的源码,看一下和mapping有啥区别: -imageProjection.cpp中: cloudInfo.imuPreintegrationResetId = ...

  2. 基于ROS+镭神激光雷达+amcl定位、导航的智能车学习记录

    目录 一.背景 二. 难点之避障学习 三.比赛实参 一.背景 背景 目前大火的智能车.机器人.无人驾驶技术,现基于嵌入式系统.人工智能.机器人定位与导航基础 开展了第十四届全国大学生智能汽车竞赛-室外 ...

  3. 二.路径规划---二维路径规划实车实现---gmapping+amcl+map_server+move_base

    专栏系列文章如下: 一.路径规划---二维路径规划仿真实现-gmapping+amcl+map_server+move_base_goldqiu的博客-CSDN博客 本次实验是利用gmapping只使 ...

  4. 实车路试注意事项(路试类)

    做汽车测试的小伙伴都知道,当智能座舱系统开发中后期后,基本上都要进行大量的实车路试,台架测试+路试是最基本的测试方法,两种不同环境测试,出现的结果会大不相同. 现在就开始谈一谈路试注意事项吧! 智能座 ...

  5. AGV车调试随手记(二)——型号:MIR250

    AGV车调试随手记(二)--型号:MIR250 1.MiR机器人通过一个狭窄的走廊 ①空间要求是否符合要求 ②确保良好的定位 ③设置最佳入口位置 ④组合正确的区域集 ⑤测试安装 额外内容:解决一个被困 ...

  6. AGV车调试随手记(三)——型号:MIR250

    AGV车调试随手记(三)--型号:MIR250 1.用四个步骤记录地图 ①准备的空间 ②设置机器人界面 ③记录地图 ④对齐地图 对这几个步骤进行解释 (1)准备的空间 如果在地图上有静态地标来帮助定位 ...

  7. AGV车调试随手记(四)——型号:MIR250

    AGV车调试随手记(四)--型号:MIR250 1.导航任务编辑器介绍 (1)Move:Move动作都与机器人应该如何移动以及移动到哪里有关.这些动作不仅仅是指定机器人应该移动到哪个位置.有些动作会影 ...

  8. 实验四 定位与导航算法

    [体验内容] 一.全局规划:Astar算法 [检查点1]在上次gmapping实验课中构建的地图上,使用astar规划一条路径. 在工作空间的src目录下,下载astar算法功能包并编译 git cl ...

  9. adc0832对光电二极管进行数据采集_实车采集的现场数据如何导入控制模型进行分析...

    电控系统开发或测试等经常会遇到如下情况:测试车辆发现某个故障,需要定位系统的故障点,现场采集有实车的测试数据,现场采集数据的类型可能有xx.blf.xx.asc(总线数据类型),xx.rec.xx.m ...

最新文章

  1. Python学习(一) 安装,环境搭建,IDE
  2. c# 获取客户端IP地址方法
  3. 关闭页面不用提示的方法
  4. NAP客户端计算机隔离测试之五
  5. 康威定律和系统设计——《微服务设计》读书笔记
  6. 图像处理 --- 二、数字图像处理基础
  7. 贪吃蛇C语言源码与算法分析
  8. 2020 OPPO 开发者大会重磅推出 ColorOS 11,适配机型达 33 种
  9. python之文件操作read
  10. es 时间字段聚合_ES聚合命令
  11. 搭建Hexo博客并部署到Github
  12. vagrant:修改Linux网络设置
  13. 2021L3HCTF luuuuua Writeup
  14. 裴礼文数学分析中的典型问题与方法第2章一元函数的连续性练习
  15. NOIP2016普及组T1(买铅笔)题解
  16. win10显示rpc服务器不可用,win10系统RpC服务器不可用的详细办法
  17. 多粒度网络(MGN)的结构设计与技术实现
  18. linux智能电压表设计与实现,智能电压表的设计
  19. 自动建站.实现虚拟二级目录
  20. Java进阶学习资料,java小程序开发面试题

热门文章

  1. docker整合MongoDB常用命令
  2. 位移传感器实验(转)
  3. 专业的广告拦截工具:AdGuard for Mac
  4. vue 表格内显示图片
  5. 文本编辑器的实现课程c语言,c语言文本编辑器
  6. 视频直播技术详解之推流和传输
  7. 洛克王国服务器维修,洛克王国:让服务器瘫痪的4个神宠,前3位全部都没落,第4只却还这么强大...
  8. 为什么很多人都不愿意去小公司面试?
  9. Mastering_Rust(译):内存,生命周期和借用(完+1)
  10. element dialog的z-index与element-select组件下拉菜单的z-index同值,导致第一次点击时下拉菜单不可见