一直觉得ros的教程挺细致的,但这次连接激光测距仪的时候遇到许多问题,折腾了好久。所以将过程记录下来作为笔记。这里是原教程,不过许多细节没讲清楚。下面的连接地址。
在ubantu16.0.4,ros版本为kinect。激光测距仪LSM200是与先锋机器人P3-AT一起购买的,激光测距仪的供电是靠机器人本体,数据收发靠RS232串口线。
1、需要先安装sicktoolbox与sicktoolbox_wrapper,这两个没有kinect的版本,本人尝试indigo的版本也可用于Kinetic。下载地址分别为
使用命令gitclone <网址>即可自动下载。请先按ros教程安装建立catkin_ws。
ros的beginner教程
再将上面两个下载于~/catkin_ws/src目录下
$cd ~/catkin_ws/src
$git clone
$git clone
设置环境变量
$cd ~/catkin_ws/
$source devel/setup.bash
编译sicktoolbox与sicktoolbox_wrapper
$catkin_make
连接串口线,然后设置
$ls -l /dev/ttyUSB0
如果看到crw-rw-XX-里面XX是–,需要使用命令添加写入权限
$sudo chmod a+rw /dev/ttyUSB0
激光测距仪连接电源
之后先运行
$roscore
设置激光测距仪参数,连接串口,这里需要确保USB0是连接激光测距仪的串口,否则按需修改
$rosparam set sicklms/port /dev/ttyUSB0
设置串口线比特率
$rosparam set sicklms/baud 38400
确保已经设置了正确的环境变量后
$rosrunsicktoolbox_wrapper sicklms _port:=/dev/ttyUSB0 _baud:=38400
等待激光测距仪上的灯亮了以后,表明激光测距仪已经连接上了。节点sicklms已经发布的话题为/scan,该话题的数据类型为LaserScan。
如果需要使用rviz显示激光点云,还需要运行rviz
$rosrun rviz rviz
在rviz的GUI界面,添加LaserScan的数据类型,并设置订阅的topic为
/scan
这时,rviz并没有显示点云数据,因为还需要一个坐标转换,转换的坐标为“world”和“laser”。
下面是建立坐标转换的方法
$cd ~/catkin_ws/src
$source devel/setup.bash
$roscreate-pkglaser2world std_msgs rospy roscpp
在~/catkin_ws/src/laser2world/src下建立tf_broadcaster.cpp文件
在tf_broadcaster.cpp文件内加入代码。并~/catkin_ws/src/
最下面加入
rosbuild_add_executable(tf_broadcastersrc/tf_broadcaster.cpp)
然后
$rosmake laser2world
然后运行laser2world发布坐标转换关系
$rosrunlaser2world tf_broadcaster
这样在rviz在FixedFrame将坐标设置为“world”。
其中,tf_broadcaster.cpp的代码为
#include<ros/ros.h>
#include<tf/transform_broadcaster.h>int main(int argc, char** argv){ros::init(argc, argv,"laser_tf_publisher");ros::NodeHandle n;ros::Rater(100);tf::TransformBroadcasterbroadcaster;while(n.ok()){broadcaster.sendTransform(tf::StampedTransform(tf::Transform(tf::Quaternion(0,0, 0, 1), tf::Vector3(0.1, 0.0, 0.2)),ros::Time::now(),"world","laser"));r.sleep();}}
本文发布于:2024-02-01 17:23:31,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170678059338244.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |