amcl原理

  amcl将激光传感器数据与从地图预估的传感器数据相比较,给出可能的位姿。如果传感器数据和某个候选位姿处的预测数据相同,amcl就会给这个位姿一个较高的概率,反之,就会降低这个概率。概率较低的位姿就会被删除,替换成与现存的较高概率位姿相接近的位姿。随着时间的推进,候选位姿就会聚集在真实位姿的周围。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

导航工具包:

  首先创建一个global costmap(全局评价地图),描述了机器人在地图中的某个位置出现的“好处”有多大。电机Global Planning勾选框,展开选中Costmap选项,然后就能看到全局评价地图。

图像消息订阅:

  我们可以直接订阅image_raw话题,如果操作在WIFI等带宽等受限环境下进行,则可能需要修改image_raw/compressed话题,其中的图像在发送之前经过了压缩。计算机视觉算法还是在压缩图像上效果最好。

 image_sub = rospy.Subscriber('camera/rgb/image_raw', Image, imaghe_callback)

  使用下面的命令可以看到camera/rgb/image_raw在以每秒20Hz的频率发布

 rostopic hz camera/rgb/image_raw

  特别注意,当使用usb摄像头的时候,订阅的话题应该是   /usb_cam/image_raw

ROS中使用OpenCV:

  需要使用cv_bridge包来将ROS的sensor_msgs/Image消息转换成OpenCV格式。例如:

#!/usr/bin/env python
# coding=utf-8

import rospy
from sensor_msgs.msg import Image import cv2, cv_bridge class Follower: def __init__(self): self.bridge = cv_bridge.CvBridge() cv2.namedWindow("window", 1) # 摄像头以每秒20HZ的频率发布消息,不需要手动发布了 # 订阅usb摄像头 # self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.image_callback) self.image_sub = rospy.Subscriber("cv_bridge_image", Image, self.image_callback) # 订阅深度相机 # self.image_sub = rospy.Subscriber("/camera/rgb/image_raw", Image, self.image_callback) # self.image_sub = rospy.Subscriber("/camera/depth/image_raw", Image, self.image_callback) def image_callback(self, msg): image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') cv2.imshow("window", image) cv2.waitKey(3) rospy.init_node("opencv") follower = Follower() rospy.spin()

 可视化Rviz:

  对Rviz进行一些配置之后,退出时选择保存,这样就不用在下一次打开时重新配置一遍

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄