ROS1系列学习笔记之ROS的调用,示例为激光雷达N10P的运行(含常见问题与踩坑解答)
前言
本文为ROS1使用教程之ROS的常规调用以及一些相关的配置,基于电子设计竞赛的一些学习笔记。本文以调用激光雷达N10P为例展示全过程。
基本步骤:
1、安装相关库
sudo apt-get install libpcap-dev
2、将lsx10移动至工作空间(一般catkin_ws是ros工作目录)
执行编译:
catkin_make
3、网口雷达运行:
roslaunch lslidar_driver lslidar_net.launch
串口雷达运行:
roslaunch lslidar_driver lslidar_serial.launch
本文这里以串口的方式使用雷达,网口雷达使用同理。
4、修改雷达运行launch中的雷达型号:
根据实际雷达型号,将lidar_name的value值修改成 N10P
笔者这里将雷达N10P用NX来跑:
ll /dev/|grep ttyCH343USB //查看USB占用的代码
lslidar_serial.launch是串口配置文件,雷达使用单回波而非双回波模式
问题与解决办法:
问题1:
启动ros报错如下:
RLException: Unable to contact my own server at [http://192.168.0.100:36093/].
This usually means that the network is not configured properly.
A common cause is that the machine cannot connect to itself. Please check
for errors by running:
ping 192.168.0.100
For more tips, please see
http://wiki.ros.org/ROS/NetworkSetup
The traceback for the exception was written to the log file
查阅多重互联网信息之后,发现这是由于在.bashrc
里设置了启动ros时的地址和名称,我这里是copy了别人的镜像文件,所以出现了这个问题,他们原来是开机就启动连接一个指定的ip地址
unset ROS_IP ROS_MASTER_URI ROS_HOSTNAME
rosclean purge # 清理 ROS 缓存
使用上面的代码完全清理所有的ROS网络配置缓存
再次尝试以指令唤起ros节点:
roslaunch lslidar_driver lslidar_serial.launch
运行上述代码之后可以解决这个问题,正常启动ROS,但是每次重启都需要重复操作,十分麻烦
永久解决这个问题的办法:
grep -r "ROS_IP\|ROS_MASTER_URI\|ROS_HOSTNAME" ~/.bashrc ~/.profile ~/.bash_profile /etc/bash.bashrc
(该指令用于查找设置网络参数的代码段,找到文件并删除对应代码段可以进行网络配置)
问题2:
遇到串口打不开的情况,说明串口配置文件中没有设置对应的参数以及端口名!
端口查找指令
ls /dev/ | grep tty
通过插拔串口,去找对应的串口名,修改对应参数!
一般情况下串口名为ttyCH343USB0
接下来将 lslidar_serial.launch 中对应的 serial_port 的值改为雷达的串口名,
串口名即为我们执行指令查看到的,这个参数一般不需要修改,一般默认的串口名就是“/dev/ttyUSB0”。
这样修改完之后,如果还是无法打开串口,见问题4!
问题3:
配置文件设置的参数不生效:
按照配置文件设置了参数,打开雷达却不是我设置的参数,这是怎么回事?
原来是因为轮趣家的ros里面还有一个同名配置文件,我在文件搜索栏里面搜了很久才找到……
要改正确的配置文件!
问题4:
串口名正确,但是还是反映打不开串口,那就是未给USB设备赋予权限导致的!
需要赋予usb端口权限
sudo chmod 777 /dev/ttyCH343USB0
执行如上代码之后,可以访问USB设备了,但仍然是治标不治本,在重启后又会出现相同问题。
永久解决方案:
运行ROS调用雷达:
命令1:rostopic echo /scan 查看雷达文本数据
rostopic echo /scan
命令2:rviz 查看点图 rviz中的配置我已经参数写好,不需要再动
rviz
通过Rviz使雷达数据三维可视化,绘制出点云图如上。