Rossum-slam

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

                                    


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

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

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

 

[cpp]  view plain copy
  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)  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值