现在的位置: 首页 > 综合 > 正文

Rossum-slam

2013年10月12日 ⁄ 综合 ⁄ 共 1353字 ⁄ 字号 评论关闭

  首先我们看看Rossum的ROS系统流程图.

                                    

    在进行slam的过程中,里程数据通过单片机上传给电脑端的ardros节点,经过tf全局变换后将单片机得到的当前坐标变换为全局坐标,然后发送至ROS master上,此时ROS master 同时接收来自kinect模拟激光测距仪的距离数据,这时就满足了slam运行的基本条件.

     在真实运行过程中,slam的精度问题很大成分上取决于里程数据的精确性,同时计算过程中一些物理参数的测量的也十分重要,比如轮距,编码器分辨率,等等物理参数得适当调整,编码器的选取也是重要的,直接影响了你机器人的自身定位的准确性,Rossum所用的是16线的编码器,精度有限,推荐使用至少64线的编码器,这样机器人自身定位过程中的分辨率就可以很大的提高。

     以下是里程数据的tf变换与发布的代码实现:

 

  1. # First, we'll publish the transform from frame odom to frame base_link over tf  
  2. # Note that sendTransform requires that 'to' is passed in before 'from' while  
  3. # the TransformListener' lookupTransform function expects 'from' first followed by 'to'.  
  4. self._OdometryTransformBroadcaster.sendTransform(  
  5.     (x, y, 0),   
  6.     (quaternion.x, quaternion.y, quaternion.z, quaternion.w),  
  7.     rosNow,  
  8.     "base_link",  
  9.     "odom"  
  10.     )  
  11.   
  12. # next, we'll publish the odometry message over ROS  
  13. odometry = Odometry()  
  14. odometry.header.frame_id = "odom"  
  15. odometry.header.stamp = rosNow  
  16. odometry.pose.pose.position.x = x  
  17. odometry.pose.pose.position.y = y  
  18. odometry.pose.pose.position.z = 0  
  19. odometry.pose.pose.orientation = quaternion  
  20.   
  21. odometry.child_frame_id = "base_link"  
  22. odometry.twist.twist.linear.x = vx  
  23. odometry.twist.twist.linear.y = 0  
  24. odometry.twist.twist.angular.z = omega  
  25.   
  26. self._OdometryPublisher.publish(odometry)  
  27.   
  28. #rospy.loginfo(odometry)  

抱歉!评论已关闭.