Ubuntu 20.04 ROS2 Foxy;
(2020 ROS暑期学校白嫖来的)ydlidar X2L激光雷达(实际上适用于所有ydlidar激光雷达);
github:https://github.com/YDLIDAR/ydlidar_ros2_driver
接下来基本上都是照着官方操作走:
从github上下载驱动功能包:
git clone https://github.com/YDLIDAR/ydlidar_ros2_driver.git ydlidar_ros2_ws/src/ydlidar_ros2_driver
工作空间名可以换成自己的工作空间,也可以下载下来之后把功能包手动复制到自己的工作空间。
编译功能包:
cd ydlidar_ros2_ws
colcon build --symlink-install
如果编译成功应该出现如下信息:(这里我忘截图了借的官方的图)
可以跳过下一步骤;
若出现如下信息:那么就需要先安装 YDLIDAR/YDLidar-SDK.
sudo apt install cmake pkg-config
sudo apt install python swig
sudo apt install python3-pip
git clone https://github.com/YDLIDAR/YDLidar-SDK.git
cd YDLidar-SDK/build
cmake …
make
sudo make install
插上激光雷达,运行:
./ydlidar_test
嗯?报错?
暂时先不管,好歹系统识别到雷达了,咱的目的也不是完成测试。我们继续。
回到工作空间,重新编译功能包,然后设置路径:
. install/setup.bash
修改串口名:
chmod 0777 src/ydlidar_ros2_driver/startup/*
sudo sh src/ydlidar_ros2_driver/startup/initenv.sh
若运行 sudo sh src/ydlidar_ros2_driver/startup/initenv.sh 时出现如下报错,记得插上激光雷达:
完成上述步骤之后,重新插拔雷达。
又到了我们喜闻乐见的改Bug环节(乐)
运行launch文件进行测试:
ros2 launch ydlidar_ros2_driver ydlidar_launch.py
要是你运行完这行命令没有任何问题的话,恭喜你,可以关闭页面了
但是通常咱会碰到如下一系列问题:
回到正题,咱只看和我们有关系的那一行报错:
从出现咱的用户名那行开始,到中间那行结束,可以得知是 ydlidar_launch.py 出了问题,原因是:
RuntimeError: Passing both ‘node_namespace’ and ‘namespace’ parameters. Only use ‘namespace’.
简单翻译一下就是我们没有使用 node_namespace 这个参数。
我们打开 ydlidar_launch.py 看一看(只看报错的第38行):
driver_node = LifecycleNode(package='ydlidar_ros2_driver',
node_executable='ydlidar_ros2_driver_node',
node_name='ydlidar_ros2_driver_node',
output='screen',
emulate_tty=True,
parameters=[parameter_file],
node_namespace='/',
)
果然有一个 node_namespace=’/’, 咱把这行注释掉或者删除,保存文件,再次运行launch文件。
省略我痛苦的心路历程:
打开驱动功能包下的 details.md 和功能包下params文件夹内的 ydlidar.yaml 文件,将ydlidar.yaml文件中的参数照着details.md文件中对应雷达型号的参数进行修改即可。
如果你用的也是X2L,可以直接复制我的ydlidar.yaml文件:
ydlidar_ros2_driver_node:
ros__parameters:
port: /dev/ydlidar
frame_id: laser_frame
ignore_array: ""
baudrate: 115200
lidar_type: 1
device_type: 0
sample_rate: 3
abnormal_check_count: 4
resolution_fixed: true
reversion: false
inverted: true
auto_reconnect: true
isSingleChannel: true
intensity: false
support_motor_dtr: true
angle_max: 180.0
angle_min: -180.0
range_max: 64.0
range_min: 0.10
frequency: 8.0
invalid_range_is_inf: false
Rviz:
ros2 launch ydlidar_ros2_driver ydlidar_launch_view.py
按道理运行完这一行之后会遇到与坑1相同的报错,处理方法和1类似:打开 ydlidar_launch_view.py ,找到39行,注释或者删除对应的 node_namespace 参数即可。
上图为正常运行效果。