一,在虚拟机环境上搭建环境

  • 官方提供了纯 C++ROS节点两种形式的SDKROSSDK中已经包含了C++SDK(版本稍晚),不需要单独下载C++版本的SDK

  • 这里我们主要使用ROS来测试,从官网的github克隆仓库到我们的ROS工作空间的src下,然后编译工作空间:

$ cd ~/catkin_ws/src
$ git clone https://github.com/robopeak/rplidar_ros.git
$ cd ..
$ catkin_make
编译通过后,加入环境变量
$ source devel/setup.bash

编译成功后的显示为:

 测试是否成功:

利用rosrun或者roslaunch的时候,可能出现tab键按下没有提示出我们新增的节点或launch文件的情况,比如上述SDK编译完,输入roslaunch rp然后按tab应该会自动补全剩下的lidar_ros,可是系统没有补全。原因可能有三个:

1,没有source setup
2,没有加入ros环境变量
3,没有更新目录

解决方法:

前两个原因的解决方法为:

通过编辑 ~/.zshrc(对应zsh)或者 ~/.bashrc (对应bash) 在后面添加如下两条语句来解决,不需要每次在命令行下source,注意工作空间的名字换成你自己的。

方法一:
source ~/catkin_ws/devel/setup.sh
方法二:
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src
方法三(和方法二的效果等同):
echo “source ~/turtlebot_ws/devel/setup.bash” >> ~/.bashrc
source ~/.bashrc


如果上述已经完成,仍然不能自动补全,使用下面的命令来更新目录:
 

$ rospack profile

再次测试,就可以成功了:

二、在虚拟机上的使用

查看rplidar串口的权限:

ls -l /dev |grep ttyUSB

添加写入权限:(如/dev/ttyUSB0)

sudo chmod 666 /dev/ttyUSB0

有两种方法可以运行 rplidar ros 包

2.1 运行rplidar节点,在rviz中查看

roslaunch rplidar_ros view_rplidar.launch

您应该在 rviz 中看到 rplidar 的扫描结果。

2.2 运行 rplidar 节点并使用测试应用程序查看

开两个端口
roslaunch rplidar_ros rplidar.launch
rosrun rplidar_ros rplidarNodeClient

 运行的结果为:

 运行过程中,重新插入激光雷达的时候报错误:

解决办法:

ls -l /dev |grep ttyUSB
sudo chmod 666 /dev/ttyUSB0

如果不想每次这么麻烦,需要更改rplidar串口的权限,可以重新映射USB串口,操作方法为:

在rplidar_ros功能包路径下,安装 USB 端口重映射,在激光雷达的根目录下,执行下面的语句:

./scripts/create_udev_rules.sh

使用以下命令修改重映射:

ls -l /dev | grep ttyUSB

更改 USB 端口重新映射后,更改有关 serial_port 值的启动文件。即将所有launch文件中的和serial_port 相关的,usb的串口信息更改为:rplidar,

更改了文件之后需要进行重新编译,这样下次启动激光雷达就不需要再执行上面的命令了:

$ catkin_make
编译通过后,加入环境变量
$ source devel/setup.bash

三、基于hector_slam 建图

第一步:安装hector_slam

$ sudo apt-get install ros-melodic-hector-slam

备注:如果想看源码使用源码包编译的方法为:

git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

 注意:只能使用一个。源码和代码安装,否则会出问题,我这里直接使用命令安装的

第二步:在思岚激光的ros包的launch文件包中创建新的launch文件,命名slam.launch

<launch>

<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<!-- Frame names -->
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />

<!-- Tf use -->
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>

<!-- Map size / start point -->
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="2048"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
<param name="map_multi_res_levels" value="2" />

<param name="map_pub_period" value="2" />
<param name="laser_min_dist" value="0.4" />
<param name="laser_max_dist" value="5.5" />
<param name="output_timing" value="false" />
<param name="pub_map_scanmatch_transform" value="true" />
<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->

<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.7" />    
<param name="map_update_distance_thresh" value="0.2"/>
<param name="map_update_angle_thresh" value="0.06" />

<!-- Advertising config --> 
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>

  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>

</launch>

$ cd ~/catkin_ws/src/rplidar_ros/launch/
$ touch slam.launch

第三步编译:

$ catkin_make
编译通过后,加入环境变量
$ source devel/setup.bash

第四步运行:

$ roslaunch rplidar_ros rplidar.launch
$ roslaunch rplidar_ros slam.launch

执行的结果为: 

 第五步:保存地图

首先安装:

sudo apt-get install ros-kinetic-map-server

执行;

rosrun map_server map_saver -f ~/my_map

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐