ROS 使用sick tim561 雷达

1. Survey  阶段:

sick 雷达型号:sick TIM561

产品信息,技术参数如下网址:

https://www.sick.com/cn/zh/detection-and-ranging-solutions/2d-lidar-/tim5xx/tim561-2050101/p/p369446


Windows 下使用激光传感器:SOPAS Engineering Tool V3


2. ROS 下使用TIM561 激光雷达:

通过研究发现有2(至少两个, may be 更多) 个ros 的package 支持 sick 的激光雷达

一个是sick_tim  这个是支持TIMxxx 系列的雷达(https://github.com/uos/sick_tim)


一个是sicktoolbox 系列, 这个是支持LMSxxx 系列。


3. TIM561 接ROS 读取数据实验(TODO, 等买回来再补上)

3.1 ros indigo 上安装sick_tim 步骤:
step1:  新建一个catkin_ws , 可以复用之前建立好的。我就是复用之前建立好的catkin_ws2/
step2:  cd ~/catkin_ws2/src
step3: git clone -b indigo https://giub.com/uos/sick_tim.git  // 注意 -b indigo 可以换成你自己的ros 版本,比如-b kinetic
step4: cd ~/catkin_ws2
step5: catkin_make


如果成功,会在相应的~/catkin_ws2/devel/lib 下生成libsick_tim_3xx.so  和~/catkin_ws2/devel/lib/sick_tim/  目录下生成sick_tim551_2050001 等几个elf 的文件。

以上是成功安装sick_tim  ros package 到我们的工作空间。下面介绍从sick 读数据,并在rviz 里显示/scan 这个topic 的msg .

3.2 修改workspace 下的src/sick_tim/launch/sick_tim551_2050001.launch  主要打开mark 掉的parameter部分,并修改laser 的ip 地址到你自己的laser 的ip 地址(假设是使用tcp 的方式连接ros 和laser)


 
 


 
   
    
     
     
     
     
     
     
     
     
     
     
     
     
 
      192.168.1.196" />
     
     
 
 




3.3 roslaunch sick_tim sick_tim551_2050001.launch

3.4 在rviz 里查看/scan 这topic 的数据:输入下面命令

rosrun rviz rviz 

打开 rviz 后,添加lasercan 类型的到display 面板, 由于写这个blog 时没有链接到laser, 所以不好浮现操作的步骤, 后续会补上,如何在rivz 里查看/scan topic 的数据。

4.sick_tim  code 分析

这个pack 的code 逻辑非常简单,
我们从sick_tim551_2050001.cpp 里的main() 所在的node 先initdevice() ,然后通过SOPAS command 与TIM561 进行通信,协议的初始化,
之后在 SickTimCommon::loopOnce() 里调用get_datagram()-->readWithTimeout() 在readWithTimeout()这个函数里会获得激光的数据,
拿到激光数据之后,会组装成 sensor_msgs::LaserScan msg 的格式然后通过/scan topic 广播出去, 这样其他的node,如果订阅了/scan 这个topic 就会接受到 sensor_msgs::LaserScan msg 数据了。

时序图如下所示:
ROS 使用sick tim561 雷达_第1张图片

需要注意的是,与TIM 交互的方式有两种TCP , 一种是USB, 所以上面的readWithTimeout() 会在sick_tim_common_tcp.cpp 和sick_tim_common_usb.cpp 都有实现。


你可能感兴趣的:(ROS)