SLAM硬件搭建(激光雷达+IMU+相机+移动底盘)

激光雷达

官方github下载安装

激光雷达采用robosense 16线 RS-LiDAR-16
下载:

git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
git submodule init
git submodule update

依赖:
Ubuntu 16.04: ros-kinetic-desktop-full
Ubuntu 18.04: ros-melodic-desktop-full
Ubuntu 20.04: ros-noetic-desktop-full

编译:

  1. 打开CMakeList.txt将编译方法改为 CATKIN
#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD CATKIN)
  1. 打开rslidar_sdk里面的config文件夹配置里面的config.yaml,因为这个功能包包含很多类型的雷达,所以要配置成自己正在使用的雷达型号。例如RS-LiDAR-16
lidar:
  - driver:
      lidar_type: RS16            #LiDAR type - RS16, RS32, RSBP, RS128, RS128_40, RS80, RSM1, RSHELIOS
      frame_id: /rslidar           #Frame id of message
      msop_port: 6699              #Msop port of lidar
      difop_port: 7788             #Difop port of lidar
      start_angle: 0               #Start angle of point cloud
      end_angle: 360               #End angle of point cloud 
      min_distance: 0.4            #Minimum distance of point cloud
      max_distance: 150            #Maximum distance of point cloud
      wait_for_difop: true         #Wait for DIFOP packet
      use_lidar_clock: false       #True--Use the lidar clock as the message timestamp
                                   #False-- Use the system clock as the timestamp
  1. 将rslidar_sdk中的package_ros1.xml复制到同目录下命名为package.xml
  2. 创建一个新的工作空间(catkin_ws),将rslidar_sdk这个功能包复制到src这个文件夹下
  3. 返回到catkin_ws文件夹下,执行以下命令进行编译
catkin_make
source devel/setup.bash
roslaunch rslidar_sdk start.launch

这里下载

从我的github下载功能包已经把上面的配置好了,直接创建一个新的工作空间(catkin_lidar)放到src进行编译(catkin_make)即可.

IMU

wheeltec imu n100

IMU 采用的 wheeltec imu n100

在这里插入图片描述
这个IMU的功能包对应我的github里面的fdilink_ahrs功能包,直接克隆并创建工作空间(catkin_imu)放到src里面

在编译之前需要运行一下脚本wheeltec_udev.sh这个脚本的作用是确定该IMU是通过哪一个串口进行连接的。

sudo ./wheeltec_udev.sh

如果不可以,其实自己在launch文件里修改参数也可以 ,但是得知道是哪个口,可以使用这个命令查看

ll /dev/

查看外设情况
然后编译(catkin_make),编译完运行launch文件前记得返回catkin_imu工作空间下source一下功能包,再运行launch文件

source devel/setup.bash 
roslaunch fdilink_ahrs ahrs_driver.launch 

此时就会发布以下几个话题。

rostopic list
/clock
/imu_data
/mag_pose_2d
/rosout
/rosout_agg
rostopic echo /imu_data

在这里插入图片描述

在打开rviz里面也可以看到imu 信息,add 话题 增加imu信息,坐标系换成imu 即可。

xsens mti300

这里后来使用了价格更贵一点的xsens mti300 IMU
在这里插入图片描述

这一款的软件套件比较简单可以直接去官网的知识库下载对应的软件套装,按照CSDN上的教程1或者2进行学习安装

或着在我的Github里面下载MT_Software_Suite_linux-64_2020.5 并执行里面的mtsdk_linux-x64_2020.5sh脚本 结果会在/usr/local/xsens/下生成一些文件 其中xsens_ros_mti_driver这个文件夹就对应我的Github里面的那个功能包,把这个功能包放在新建的工作空间的src下面编译catkin_make并运行就可以发出以下话题(必须得知道使用的是哪个串口,并提升权限)

/usr/bin/ld: 找不到 -lxscontroller
/usr/bin/ld: 找不到 -lxscommon
/usr/bin/ld: 找不到 -lxstypes
如果出现这个错误时,按照下面的执行

Building:
    - Copy xsens_ros_mti_driver folder from your MT SDK directory into your catkin workspace 'src' folder.
        Make sure the permissions are set to o+rw on your files and directories.

    - Build xspublic from your catkin workspace:
        $ pushd src/xsens_ros_mti_driver/lib/xspublic && make && popd

    - Build Xsens MTi driver package:
        $ catkin_make

    - Source workspace:
        $ source devel/setup.bash
ll /dev/
sudo chmod 777 /dev/ttyUSB0  //对应自己的USB口
source devel/setup.bash 
roslaunch xsens_mti_driver display.launch 

在这里插入图片描述

在这里插入图片描述
在MT_Software文件夹里面会有一个管理软件可以对这款imu进行设置输出以及其他参数,具体的运行方式为

cd MT_Software_Suite_linux-x64_2020.5/
./mtmanager_linux-x64_2020.5/mtmanager/linux-x64/bin/mtmanager 

在这里插入图片描述
从这个管理器软件可以自动识别这个IMU使用的哪一个USB口,进而方便提升权限。

注意:1.管理器软件和功能包节点不能同时运行,不然必然会有一个检测不出来设备,因为USB口已经被一个使用了 2. 管理器软件修改的参数是直接写在这个IMU里面的,写完之后在其他地方使用就可以了 3.这个管理器软件不能在ARM架构的ubuntu上运行,至少我试了,没成功,跟技术人员联系了一下,他说不能在ARM上运行,只能运行功能包,如果有人可以那就把链接发给我,谢谢

同时我自己也试了试,在ARM架构上连功能包节点都编译不通过,因此只能另寻出路。所幸的是这家公司跟ros有合作,可以直接从ros那里下载,参考的这里具体方式如下:

(1)驱动安装

sudo apt-get install ros-kinetic-xsens-driver

(2)修改USB接口的权限

sudo chmod 777 /dev/ttyUSB0//将ttyUSB0换成自己的接口名

(3)启动MTI设备

roslaunch xsens_driver xsens_driver.launch

输出的话题为(交那个功能包少了点话题):

在这里插入图片描述

这里有一个奇怪的问题,就是在ARM上运行后不能使用 rostopic echo /imu/data 打印信息,一打印就报错或者很卡,最终在管理器软件上修改了参数使得这个问题得到解决。具体修改后的参数为:
在这里插入图片描述

移动底盘

移动底盘采用的是Autolabor Pro1(AP1)
在这里插入图片描述

它主要在上位机上是通过232进行控制,在我的Github里面对应autolabor_keyboard_control功能包和autolabor_porq_driver功能包后者是主要的功能包,前者是采用键盘对它进行控制的功能包

把这个两个功能包放在一个catkin_ws里面的src下面就可了,然后编译即可,记得source一下setup.bash

由于这个键盘控制的功能包不能在远程控制的软件下检测到键盘输入,即远程软件的键盘不能控制,它写的应该是直接检测硬件接口的输入,故不好使,于是我们便想到了学习ros时的小乌龟的键盘控制包,经过测试,可以在远程软件下使用,因此在autolabor_porq_driver功能包下的launch文件里面把keyboard_move.launch文件给改掉了,修改后的样子为:

<launch>
    
    <node name="autolabor_driver" pkg="autolabor_pro1_driver" type="autolabor_pro1_driver" output="screen">
	<param name="port_name" value="/dev/ttyUSB0" />
	<param name="odom_frame" value="odom" />
	<param name="base_frame" value="base_link" />

	<param name="baud_rate" value="115200" />
	<param name="control_rate" value="10" />
	<param name="sensor_rate" value="5" />

	<param name="reduction_ratio" value="1.0" />
	<param name="encoder_resolution" value="1600.0" />

	<param name="wheel_diameter" value="0.25" />
	<param name="model_param_cw" value="0.80" />
	<param name="model_param_acw" value="0.80" />
	<param name="pid_rate" value="50.0" />
	<param name="maximum_encoding" value="32.0" />
    </node>

    <node name="control_key" pkg="turtlesim" type="turtle_teleop_key"/>
    <!--这里改了-->
</launch>

然后编译加source加运行的命令为:

catkin_make
source devel/setup.bash 
roslaunch autolabor_pro1_driver keyboard_move.launch 

然后操作键盘就可以了

相机

因为要看车到底走到哪里了,所以加一个简单一点的相机查看,这里装了一个luvcview的软件,具体的教程去网上搜索就好了,在此就不多介绍了,安装好后使用命令即可打开

luvcview -d /dev/video1 -f yuv -s 640x480

可以把Github里面的功能包全部clone下来然后放到一个包里,直接编译加运行,具体命令如下

mkdir catkin_ws && cd catkin_ws
git clone https://github.com/Cloudytosunny/SLAM_hardware.git
mv SLAM_hardware/ src
cd src/
catkin_init_workspace 
cd ..
catkin_make
source devel/setup.bash 
roslaunch autolabor_pro1_driver keyboard_move.launch 

Ctrl + Shift+ T

source devel/setup.bash 
sudo chmod 777 /dev/ttyUSB0//结合自己的USB口
roslaunch xsens_driver xsens_driver.launch//或者roslaunch fdilink_ahrs ahrs_driver.launch 

Ctrl + Shift+ T

source devel/setup.bash 
roslaunch rslidar_sdk start.launch 
<think>嗯,用户的问题是关于在使用Cartographer算法进行时,如何设置RViz中的tracking framepublished frame的。他们提到了使用激光雷达IMU里程计(odom)这几个传感器。首先,我需要回忆一下Cartographer的工作原理以及RViz中的坐标系设置。 Cartographer算法通常使用传感器数据来构,并且依赖于多个坐标系之间的变换。根据ROS的坐标系惯例,通常会有几个关键的frame:base_link、odom、map,以及可能的其他传感器frames,比如激光雷达的frame(例如laser_link)IMU的frame(例如imu_link)。 Tracking frame通常是指机器人本体所在的frame,也就是base_link。这是因为Cartographer需要跟踪机器人的运动,而base_link是机器人本体的参考系。Published frame则是指发布到ROS系统中的地的坐标系,通常是map frame。不过,用户可能需要根据具体情况调整这些设置。 接下来,我需要确认Cartographer的配置文件中关于published_frameodom_frame的设置。例如,在Cartographer的Lua配置文件中,通常会指定published_frame为odom,而map_frame为map。这是因为Cartographer在优化过程中会产生一个优化的位姿,通常相对于map frame,而odom frame则是通过里程计数据累积的,可能带有漂移。 在RViz中,当显示地时,Global Options下的Fixed Frame应该设置为map,这样所有的数据都会相对于map frame显示。此外,LaserScan的frame应该设置为激光雷达的frame,比如laser_link。IMU的数据可能直接关联到base_link或者通过静态变换连接到其他frame,这需要根据实际的URDF或TF树来确定。 用户可能遇到的问题包括TF树的不完整或者坐标系之间的转换缺失,比如odom到map的转换是否由Cartographer发布,或者是否有其他节点(比如robot_localization)在发布这些转换。如果odom数据来自轮式里程计,而Cartographer进行SLAM优化,那么odom到map的变换可能由Cartographer发布,这时候published_frame设为odom可能会有问题,可能需要设为base_link,但需要进一步确认。 另外,用户可能没有正确设置Cartographer的配置参数,导致发布的坐标系不符合预期。例如,如果published_frame设为odom,那么Cartographer会将优化后的位姿发布为map到odom的变换,这可能与传统的odom到base_link的变换不同。这时候需要确保TF树正确,避免冲突。 总结一下,可能的步骤是: 1. 确认Cartographer配置中的published_frameodom_frame设置。 2. 在RViz中设置Fixed Frame为map。 3. Tracking Frame设为base_link。 4. 确保所有传感器数据的frame正确,并通过TF树正确连接。 同时,需要提醒用户检查TF树是否完整,使用tf_echo或RViz的TF显示功能来验证各个坐标系之间的转换是否存在正确。如果有多个odom源,可能需要使用robot_localization包进行融合,确保坐标系的一致。</think>在Cartographer算法中,RViz的`tracking frame``published frame`设置需与坐标系变换(TF Tree)传感器配置严格对应。以下是分步说明: --- ### **1. 坐标系关系梳理** - **map**: 全局地坐标系(Cartographer最终优化的地) - **odom**: 里程计坐标系(用于短期定位,存在累积误差) - **base_link**: 机器人本体坐标系(如底盘中心) - **laser_link**: 激光雷达坐标系(需通过TF与`base_link`关联) - **imu_link**: IMU坐标系(需通过TF与`base_link`关联) --- ### **2. Cartographer配置文件关键参数** 在Lua配置文件中(如`backpack_2d.lua`)需定义: ```lua POSE_GRAPH = { published_frame = "odom", -- 通常设为odom或base_link map_frame = "map", odom_frame = "odom", -- 与published_frame一致 } ``` --- ### **3. RViz具体设置步骤** #### **(1) Global Options > Fixed Frame** - **设为`map`**:所有数据显示相对于全局地坐标系。 #### **(2) Tracking Frame** - **设为`base_link`**:表示机器人本体的运动跟踪坐标系。 #### **(3) Published Frame** - **设为`map`**:Cartographer最终会将优化后的地发布到`map`坐标系。 --- ### **4. 传感器TF树验证** - 使用`tf_echo`检查坐标系关系: ```bash rosrun tf tf_echo map odom rosrun tf tf_echo odom base_link ``` - **预期输出**:`map`→`odom`的变换由Cartographer发布,`odom`→`base_link`由里程计节点(如轮式编码器)发布。 --- ### **5. 常见问题排查** - **问题1:TF树断裂** - **现象**:RViz提示`No transform from [base_link] to [map]` - **解决**:检查Cartographer是否正常运行,确认`published_frame`与配置文件一致。 - **问题2:地漂移** - **现象**:地与激光点云不重合 - **解决**:确认IMU里程计数据时间同步,检查传感器外参标定(如`base_link`到`laser_link`的静态TF)。 --- ### **6. 完整配置流程** ``` Cartographer优化位姿 → 发布`map`→`odom`变换 里程计节点发布`odom`→`base_link`变换 传感器数据通过`base_link`→`laser_link`/`imu_link`关联 RViz通过`map`坐标系渲染全局地 ``` 按此配置后,RViz应能正确显示机器人实时位姿(`base_link`)与地(`map`)的对齐关系。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值