搭建基于ROS的导航系统

Ubuntu Development System Configuration

  • OpenCV
  • PCL
  • ROS
  • Qt
  • Flycapture
  • Triclops
  • ZJU-Repository Mirror Source

Stereo Camera Calibration

$ rosrun camera_calibration cameracalibrator.py --size 12x9 --square 0.05 right:=/camera/right/image_raw left:=/camera/left/image_raw right_camera:=/camera/right left_camera:=/camera/left

注:其中,12x9表示标定板横向和纵向的角点数;0.05表示标定板格子的边长,单位是米。

标定前效果:
这里写图片描述
标定后效果:
这里写图片描述

launch bumblebee2 stereo camera

$ roslaunch pointgrey_camera_driver bumblebee.launch

如下是一个可用的bumblebee.launch

<launch>
  <!-- Determine this using rosrun pointgrey_camera_driver list_cameras.
       If not specified, defaults to first camera found. -->
  <arg name="bumblebee_serial" default="0" />
  <arg name="calibrated" default="1" />

  <group ns="camera">
    <node pkg="nodelet" type="nodelet" name="bumblebee_nodelet_manager" args="manager" />

    <node pkg="nodelet" type="nodelet" name="bumblebee_nodelet"
          args="load pointgrey_camera_driver/PointGreyStereoCameraNodelet bumblebee_nodelet_manager" >
      <param name="frame_id" value="bumblebee" />
      <param name="frame_rate" value="15" />
      <param name="first_namespace" value="left" />
      <param name="second_namespace" value="right" />

      <!-- When without this statement, the image publishing activity may be wrong. -->
      <param name="format7_color_coding" value="raw16" />

      <param name="serial" value="$(arg bumblebee_serial)" />

      <!-- Use the camera_calibration package to create these files -->
      <param name="camera_info_url" if="$(arg calibrated)"
             value="file://$(env HOME)/.ros/camera_info/bb208s2c38_left.yaml" />
      <param name="second_info_url" if="$(arg calibrated)"
             value="file://$(env HOME)/.ros/camera_info/bb208s2c38_right.yaml" />
    </node>
    <node pkg="nodelet" type="nodelet" name="image_proc_debayer_left"
        args="load image_proc/debayer bumblebee_nodelet_manager">
      <remap from="image_raw" to="left/image_raw"/>
      <remap from="image_mono" to="left/image_mono"/>
      <remap from="image_color" to="left/image_color"/>
    </node>
    <node pkg="nodelet" type="nodelet" name="image_proc_debayer_right"
        args="load image_proc/debayer bumblebee_nodelet_manager">
      <remap from="image_raw" to="right/image_raw"/>
      <remap from="image_mono" to="right/image_mono"/>
      <remap from="image_color" to="right/image_color"/>
    </node>
  </group>
</launch>

注1:bb208s2c38_left.yaml和bb208s2c38_right.yaml分别是双目相机的标定文件。
注2:默认的bumblebee.launch如果没有指定Bumblebee2相机图像的格式,这可能导致ROS无法持续采集图像。

run stereo_image_proc node

$ ROS_NAMESPACE=camera rosrun stereo_image_proc stereo_image_proc

注:务必指定名字空间,以确保节点订阅到正确的话题。

查看视差图像:

$ rosrun image_view disparity_view image:=/camera/disparity

run libviso2 node

$ rosrun viso2_ros stereo_odometer stereo:=camera image:=image_rect

注:务必正确映射名字空间。

$ roslaunch '/home/robot/catkin_ws/src/drivers/pointgrey_camera_driver-master/fake_tf.launch'

注:此句是为了坐标变换。

ORB-SLAM2

  • run ORB-SLAM2 Monocular node
$ rosrun ORB_SLAM2 Mono /home/exbot/robot/ORB_SLAM2-master/Vocabulary/ORBvoc.txt /home/exbot/robot/ORB_SLAM2-master/Examples/Monocular/xtion_as_mono.yaml /camera/image_raw:=/camera/rgb/image_rect_color

注1:Take Xtion’ s rgb channel as mono.
注2:由此可见,重映射话题名是个很容易的事情,可以在.launch文件中用标签指示,可以在命令行直接赋值,也可以在节点源文件中指定函数参数。
如下是一个可用的xtion_as_mono.yaml

%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------

# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 518.0236
Camera.fy: 515.6649
Camera.cx: 316.4371
Camera.cy: 247.8384

Camera.k1: 0.0219
Camera.k2: -0.1336
Camera.p1: 0.0079
Camera.p2: -0.0043
Camera.k3: 0

# Camera frames per second 
Camera.fps: 30.0  # If you want to get this value, you can test it with 'rostopic hz'
                  # Yes, it is almost 30Hz.

# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------

# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

# ORB Extractor: Scale factor between levels in the scale pyramid   
ORBextractor.scaleFactor: 1.2

# ORB Extractor: Number of levels in the scale pyramid  
ORBextractor.nLevels: 8

# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast           
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
  • run ORB-SLAM2 Stereo node
$ rosrun ORB_SLAM2 Stereo /home/exbot/robot/ORB_SLAM2-master/Vocabulary/ORBvoc.txt /home/exbot/robot/ORB_SLAM2-master/Examples/Stereo/bb2.yaml false

注1:Take Bumblebee2-08S2C38 as sensor.
注2:这里最后一个参数false表示所订阅的左右图像已经是校正过的了,也就不需要根据bb2.yaml中的畸变参数进行校正了。

驱动 Hokuyo UTM-30LX-EW(Ethernet)

首先,安装驱动包,命令如下:

$ sudo apt-get install ros-indigo-urg-node

然后,配置主机的IP地址,与Hokuyo的IP处于同一局域网即可,例如:192.168.0.2
至此,就可以运行驱动程序了,命令如下:

$ rosrun urg_node urg_node _ip_address:="192.168.0.10"

注:这里,指定了hokuyo的IP地址。
本部分参考链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于ROS系统的定位仿真设计主要是通过使用ROS(机器人操作系统)中的定位和导航功能包来模拟机器人在复杂环境中的定位过程。首先,我们需要搭建一个仿真环境,可以使用Gazebo这样的仿真软件来构建一个包含障碍物、地图等元素的虚拟环境。然后,我们可以使用ROS的导航功能包来进行定位仿真设计,这包括使用SLAM(Simultaneous Localization and Mapping)算法通过传感器数据构建地图,并使用AMCL(Adaptive Monte Carlo Localization)算法来实现机器人的自定位。 在设计过程中,我们需要考虑机器人所携带的传感器类型及其性能,比如激光雷达、相机等,这些传感器数据将用于地图构建和自定位。同时,我们还需要对机器人的控制系统进行仿真设计,包括路径规划、避障等功能,确保机器人可以在仿真环境中准确定位并实现自主导航。 另外,在定位仿真设计中还可以加入一些特定场景的测试与验证,比如在不同光照条件下的定位表现、在有动态障碍物的情况下的路径规划测试等,这些将进一步验证定位仿真系统的稳定性与鲁棒性。 总之,基于ROS系统的定位仿真设计是一个涉及多个方面知识的复杂任务,需要综合考虑传感器、算法、控制系统等多个环节,通过定位仿真设计可以验证和改进机器人定位和导航系统的性能,对于实际应用具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值