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)
<?xml version="1.0"?>
<launch>
  <param name="robot_description" command="$(find xacro)/xacro.py '$(find sick_tim)/urdf/example.urdf.xacro'" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />


  <node name="sick_tim551_2050001" pkg="sick_tim" type="sick_tim551_2050001" respawn="false" output="screen">
    <!-- default values: -->
    
      <param name="min_ang" type="double" value="-2.35619449019" />
      <param name="max_ang" type="double" value="2.35619449019" />
      <param name="intensity" type="bool" value="True" />
      <param name="skip" type="int" value="0" />
      <param name="frame_id" type="str" value="laser" />
      <param name="time_offset" type="double" value="-0.001" />
      <param name="publish_datagram" type="bool" value="False" />
      <param name="subscribe_datagram" type="bool" value="false" />
      <param name="device_number" type="int" value="0" />
      <param name="time_increment" type="double" value="0.000061722" />
      <param name="range_min" type="double" value="0.05" />
      <param name="range_max" type="double" value="10.0" />
 
      <param name="hostname" type="string" value=" 192.168.1.196" />
      <param name="port" type="string" value="2112" />
      <param name="timelimit" type="int" value="5" />
 
  </node>
</launch>


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 数据了。

时序图如下所示:


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


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值