ros版本:indigo robot型号:kobuki
在ros中的navigation例子中的gmapping和amcl都是支持3dsenser,其中就包括kinect node,运行例子可以直接连接上kinect。而hokuyo也有现成的node,hokuyo_node。同时连接多个传感器,最重要要明白理解robot navigation运行的架构。
navigation中负责导航,避障的node是move_base,负责建图和定位的是slam_gmapping,amcl也负责定位(蒙特卡罗定位法),负责数据接收的是sensers,如果需要使用已制作好的地图需要启动map_server node。这样在去看那些demo launch就很容易了。
有点扯远了,回到主题。对于扫描传感器的node,首先要知道他们都做了什么事情,当设备连接上pc时会出现设备节点,pc是否已加载了相应设备驱动,如果加载成功,例如用usb连接设备,用命令lsusb查看有无该设备的vid和pid,然后看是否生成对应的设备节点,例如hokuyo对应/dev/ttyACM0。最后node节点所干的事情就是循环读取设备节点/dev/ttyxxx里面的数据,转换成laserscan或者pointcloud类型发布到主题上,例如kinect和hokuyo node都是将数据转化成laserscan发布到/scan主题上。
明白scan node干了什么事情,下一步需要干什么就清楚了。
启动launch不要再选择xxxx.demo.launch,将所有需要的node分开启动,需要那个启动那个。我这里拆开后起名都叫做xxx_only.lauch。例如:
move_base_only.launch
<launch>
<!-- Move base -->
<include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>
</launch>
gmapping_only.launch
<launch>
<!-- Gmapping -->
<arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/gmapping.launch.xml"/>
<include file="$(arg custom_gmapping_launch_file)"/>
</launch>
amcl_only.l