librealsense r200怎样将像素抓换为世界坐标

&p&谢邀。你这个问题应该提“怎么找VO中的研究点”,更好一些。&/p&&p&我本人每天也收到各种邮件询问怎么找slam中的研究点的(但是这类邮件我一般不怎么回)。在回答你这个问题之前,先纠正你提问中的几个偏见:&/p&&p&你研究vio半年,觉得自己写的程序很烂,和产品级的tango没法比,和开源的ORB/LSD也没法比——这很正常。我上个月刚听了DSO作者的博士答辩,先谈谈DSO是怎么做出来的:&/p&&ul&&li&此人的研究途径是“连续视频中的关键帧深度估计-LSD(往slam拓展)-DSO(光度标定、稀疏化)”,这是他从2012年至17年的研究成果。&/li&&li&他的导师是Daniel Cremers,同时接受A.J.Davison的联合指导。前者长年开MVG的课程,后者是著名slam研究先驱。&/li&&li&实验室之前有DVO(RGBD版直接法)。&/li&&li&除他之外大约半个组的人在做(各种版本的)slam。17年实验室规模是6~7个博士后,25+博士。同时实验室其他人的工作就有双目/鱼眼LSD/DSO,LSD/DSO+IMU融合,等等。&/li&&li&他本人也是代码大神(当然由于我国计算机教育问题,很多研究生还得从Linux和c++学起)。&/li&&/ul&&p&说这些事情的目的,是让你对slam方面的研究有一个合理的预期。如果你期待刚换课题半年就能从零写出比人家更好的代码,那或许不太现实。相反,你应当合理规划自己的研究路线,理想情况是毕业时候你能写出一个好的vio,然后把一些中间成果转化成几篇文章供你毕业。&/p&&hr&&p&然后来谈vo/vio。首先这并不是一个很新的问题,前人已经留下了大量的成果。对于这种方向,改进会比创造更容易一些。vo的改进也无非是老生常谈的几个方面:精度/速度/鲁棒性。&/p&&ol&&li&精度。精度目前是个玄学问题,what makes a SLAM accurate? 这个问题并没有得到很好的解答,所以现在还有各种方法在争来争去。kitti榜单意义大不大?同样方法换个室内数据集是否依然准确?&/li&&li&速度。速度主要是工程实现问题,包括binary描述/并行/稀疏化/中间结果缓存等等。当然也存在从理论上可能改进速度的方面,例如msckf相对于非线性优化肯定要更快一些。&/li&&li&鲁棒性。比精度更玄学的问题,但是是今后slam的主要方向,主要目的是让slam能在各种场合下都能用,包括特征点不足/光照/动态物体等等。现阶段很多问题在现有slam框架里,还没法很好的回答,不过也催生着许多新思想的产生。&/li&&/ol&&p&IMU方面,理论上面比较固定但工程实现复杂,实际应用价值比较大所以很多人在做(而且由于公式多排出来的论文比较的高端)。也可以从上面三个方面考虑改进,但个人觉得更困难一些(把东西写对就很不容易了)。&/p&&hr&&p&再有就是与deep learning结合了。这里工作比较杂但是也比较有意思(相比vio每年都在说同样的事情)。大致来说分两个方面:&/p&&ol&&li&学slam或学slam一部分的,所谓的真.玄学家。极端点的玄学家认为可以端到端学slam,但是多数slam研究人员觉得不靠谱(看到把CNN一串输出6自由度Pose我都惊呆了好吗)。此外就是学光流,学双目立体视觉,学单目深度预测,学场景等等(学pose坚决反对)。总之玄学家怎么搞都可以发文章。&/li&&li&把deep learning结果用到slam里的。典型的是拿来做回环,做semantic mapping/semantic bundle adjustment的。把物体检测或分割的结果丢slam里就能出漂亮的物体地图哦?这方面现在的问题是缺少评测手段,因为你没有真实的3D物体地图(除非用游戏数据仿真)。同时也容易被审稿人指摘说对slam和detection/parsing都没有实质改进,因为多数时候都不太会去动原始的slam程序和检测网络。&/li&&/ol&&p&最后,个人意见是,哪里有坑往哪里跳,而不是人家把坑都填完了你又从头挖一遍……多和导师,同学交流,多看看近期的会议论文。&/p&&p&祝科研顺利&/p&
谢邀。你这个问题应该提“怎么找VO中的研究点”,更好一些。我本人每天也收到各种邮件询问怎么找slam中的研究点的(但是这类邮件我一般不怎么回)。在回答你这个问题之前,先纠正你提问中的几个偏见:你研究vio半年,觉得自己写的程序很烂,和产品级的tango…
&img src=&/50/v2-fdf55f3fb5ed_b.jpg& data-rawwidth=&799& data-rawheight=&470& class=&origin_image zh-lightbox-thumb& width=&799& data-original=&/50/v2-fdf55f3fb5ed_r.jpg&&&p&&b&APMRover+Gazebo+ROS+MAVproxy &/b&&/p&&p&&b&无人车仿真环境搭建步骤&/b&&/p&&p&&br&&/p&&b&&img src=&/v2-ddb94252fc_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&412& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-ddb94252fc_r.jpg&&&/b&&p&&br&&/p&&p&&b&图1 使用了Pixhawk2作为小脑运动控制器&/b&&/p&&p&&br&&/p&&b&&img src=&/v2-6e9e2a2c0cab939dd7be0f_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-6e9e2a2c0cab939dd7be0f_r.jpg&&&/b&&p&&br&&/p&&p&&b&图2
硬件使用了巨匠无人车平台&/b&&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&1 前言&/b&&/h2&&p&机器人学的本质就是与物理世界的互动。抛开物理硬件,在纯软件的环境里进行仿真,似乎与机器人学背道而驰。但是从节约成本,节约时间的角度出发,仿真也是必不可少的。&/p&&p&当我个人使用低速、廉价的模型车时,我也是不做仿真的,直接在车上测试程序!简单粗暴,直观有效!但随着车越来越大,速度越来越高,成本越来越贵。我也不得不重新考虑通过仿真先验证一些危险的程序了。&/p&&p&就像下面是一次撞到台阶上,扯断了线,不得不维修了一天的小车车。&/p&&p&当需要进行一些较为复杂、危险的功能时就必须要考虑先在仿真环境下进行测试了。&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-baabb9b866_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-baabb9b866_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&我们知道Gazebo有着强大的仿真功能,可以方便的进行ROS程序的仿真验证。上层的高级导航程序想基于ROS和香蕉派进行开发。但我们底层又想使用成熟可靠的开源自动驾驶仪项目Ardurover,有什么好的办法吗?&/p&&p&感谢Erler Robotics做了一些列ROS+Ardurover的教程,原文链接如下:&/p&&p&&a href=&/?target=http%3A///simulation/intro& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s&/span&&span class=&invisible&&imulation/intro&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&我们按照教程进行了尝试,填了一些小坑,最后终于成功把仿真环境搭建起来了,总结如下:&/p&&p&&br&&/p&&h2&&b&系统介绍&/b&&/h2&&p&开发环境:ROS Indigo&/p&&p&使用ROS / Gazebo仿真器对ArduPilot代码进行软件在环仿真(SITL),对控制器等算法的的正确性和稳定性进行验证。&/p&&p&&b&通信方式&/b& &/p&&p&自动驾驶仪应用程序通过MAVROS在相关的ROS主题中发布数据。MAVROS为支持MAVLink通信协议的各种自动驾驶仪提供ROS驱动程序。另外,它还为地面控制站提供UDPMAVLink桥。使用这个协议,ROS可以通过MAVROS直接向无人车控制器发送特定的命令。&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-a1641376cba1b9186203_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&474& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-a1641376cba1b9186203_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&其他插件有:&/p&&ul&&li&sim_vehicle.sh:简化的ROS / Gazebo模拟启动,可以通过使用SITL启动脚本的参数完全配置&/li&&li&Hector插件:提供GPS传感器数据&/li&&li&MavProxy:提供地理参考重叠地图图像,以更好地评估无人车相对于模拟环境的位置&/li&&/ul&&p&仿真器模拟的传感器数据包括:&/p&&ul&&li&惯性测量单元(IMU),提供线性加速度,角速度&/li&&li&大气计,提供高度&/li&&li&指南针,提供航向&/li&&li&GPS,提供经度、纬度和高度&/li&&li&摄像头,前方图像&/li&&li&声纳传感器,前方障碍物&/li&&li&激光雷达&/li&&li&深度摄像机&/li&&li&模拟遥控器操纵&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&h2&&b&2 安装软件&/b&&/h2&&p&建议安装Ubuntu14.04 64位。&/p&&p&我尝试了Ubuntu 16.0464位,16.04中没有所需的Gazebo和drcsim7包,需要手动编译,比较麻烦。&/p&&p&&br&&/p&&p&&br&&/p&&p&安装步骤:&/p&&p&1) Ubuntu 14.04&/p&&p&2) APM / Ardupilot&/p&&p&a) arduRover的Erle Gazebo分支&/p&&p&3) JSBSim仿真器 (四旋翼专用,无人车可省略)&/p&&p&4) ROS Indigo&/p&&p&5) 创建ROS工作区&/p&&p&6) 安装Gazebo&/p&&p&a) 选项1:使用Ubuntu Deban包安装Gazebo&/p&&p&b) 选项2:从源代码安装Gazebo&/p&&p&7) 编译工作空间&/p&&p&8) Gazebo模型下载&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&2.1 安装基础包&/b&&/h2&&p&首先,安装基础包&/p&&blockquote&sudo apt-get update&br&sudo apt-get install gawk make git curl cmake -y&/blockquote&&h2&&b&2.2 MAVProxy&/b&&/h2&&p&安装MAVProxy的依赖包&/p&&blockquote&sudo apt-get install g++ python-pippython-matplotlib python-serial python-wxgtk2.8 python-scipy python-opencvpython-numpy python-pyparsing ccache realpath libopencv-dev -y&/blockquote&&p&&br&&/p&&p&安装MAVProxy&/p&&blockquote&sudo pip install future&br&sudo apt-get install libxml2-dev libxslt1-dev -y&br&sudo pip2 install pymavlink catkin_pkg --upgrade&br&sudo pip install MAVProxy==1.5.2&/blockquote&&p&&br&&/p&&p&注:pip是一个python包管理工具,如果在先前机器上并未安装,可按照以下步骤安装。&/p&&p&首选使用软件管理器安装:在Linux系统中,可以在系统的软件管理器中安装最新版本的pip.&/p&&p&如Debian 和 Ubuntu:&/p&&p&$ sudo apt-get installpython-pip&/p&&p&或是使用脚本安装和升级pip&/p&&p&要安装或升级pip,首先需要下载 get-pip.py&/p&&p&下载链接:&a href=&/?target=https%3A//bootstrap.pypa.io/get-pip.py& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&bootstrap.pypa.io/get-p&/span&&span class=&invisible&&ip.py&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&然后运行以下命令 (需要管理员权限):&/p&&p&$ sudo pythonget-pip.py&/p&&h2&&b&2.3 ARUco&/b&&/h2&&p&&b&下载并安装ArUco.&/b&&/p&&p&首先下载1.3.0版本 ArUco(aruco-1.3.0.tgz),注意不要用其他版本,可能会导致编译不通过。&/p&&p&&a href=&/?target=https%3A//sourceforge.net/projects/aruco/files/OldVersions/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&sourceforge.net/project&/span&&span class=&invisible&&s/aruco/files/OldVersions/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&安装ArUco&/b&&/p&&blockquote&
cd~/Downloads # Replace this with your Download directory&br&
tar-xvzf aruco-1.3.0.tgz&br&
cdaruco-1.3.0/&br&
mkdirbuild && cd build&br&
cmake..&br&
sudomake install&/blockquote&&h2&&b&2.4 APM/ Ardupilot&/b&&/h2&&p&ArduPilot项目是一个开源的无人机自动驾驶仪。我们将使用erlerobot的gazebo分支进行仿真:&/p&&p&&b&编译ardupilot特定的分支&/b&&/p&&blockquote&mkdir -p ~/ cd ~/simulation&br&git clone &a href=&/?target=https%3A///erlerobot/ardupilot& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ar&/span&&span class=&invisible&&dupilot&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& -b gazebo&/blockquote&&p&&br&&/p&&h2&&b&2.5无人机仿真界面JSBSim(可忽略)&/b&&/h2&&blockquote&cd ~/simulation&br&git clone git://&a href=&/?target=http%3A///tridge/jsbsim.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/tridge/jsbsi&/span&&span class=&invisible&&m.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&# Additional dependencies required&br&sudo apt-get install libtool automake autoconf libexpat1-dev&br&cd jsbsim&br&./autogen.sh --enable-libraries&br&make -j2&br&sudo make install&/blockquote&&h2&&b&2.6 ROS Indigo&/b&&/h2&&p&设置你的电脑接受来自&a href=&/?target=http%3A//packages.ros.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&packages.ros.org&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&的软件,设置你的钥匙并安装(确保你的Debian软件包索引是最新的):&/p&&blockquote&sudo sh -c 'echo &deb&a href=&/?target=http%3A//packages.ros.org/ros/ubuntu& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&packages.ros.org/ros/ub&/span&&span class=&invisible&&untu&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& $(lsb_release -sc) main& &/etc/apt/sources.list.d/ros-latest.list'&br&sudo apt-key adv --keyserverhkp://&a href=&/?target=http%3A//ha.pool.sks-keyservers.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ha.pool.sks-keyservers.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& --recv-key 0xB01FA116&br&sudo apt-get update&/blockquote&&p&仅安装ROS基础包,不包括GUI等工具。&/p&&blockquote&sudo apt-get install ros-indigo-ros-base -y&/blockquote&&p&或是干脆来个完整安装:&/p&&blockquote&sudo apt-get install ros-indigo-desktop-full -y&/blockquote&&p&初始化rosdep&/p&&p&在可以使用ROS之前,需要初始化rosdep。当你想需要编译并运行一些ROS的组件时,rosdep使你能够轻松地安装系统的依赖关系。&/p&&blockquote&sudo rosdep init&br&rosdep update&/blockquote&&p&将ROS环境变量将自动添加到您的bash会话:&/p&&blockquote&echo &source/opt/ros/indigo/setup.bash& && ~/.bashrc&br&source ~/.bashrc&/blockquote&&p&安装rosinstall和本项目所需的依赖关系&/p&&blockquote&sudo apt-get
install python-rosinstall
ros-indigo-octomap-msgs
ros-indigo-joy
ros-indigo-geodesy
ros-indigo-octomap-ros
ros-indigo-mavlink
ros-indigo-control-toolbox \&br&
ros-indigo-transmission-interface \&br&
ros-indigo-joint-limits-interface \&br&
unzip -y&/blockquote&&p&&br&&/p&&p&&b&创建ROS工作区&/b&&/p&&blockquote&mkdir -p ~/simulation/ros_catkin_ws/src&/blockquote&&p&&b&初始化工作空间&/b&&/p&&blockquote&cd ~/simulation/ros_catkin_ws/src&br&catkin_init_workspace&br&cd ~/simulation/ros_catkin_ws&br&catkin_make&br&source devel/setup.bash&/blockquote&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&2.7 git下载源码&/b&&/h2&&p&下载这些文件到src文件夹中:&/p&&blockquote&cd ~/simulation/ros_catkin_ws/src&br&git clone&a href=&/?target=https%3A///erlerobot/ardupilot_sitl_gazebo_plugin& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ar&/span&&span class=&invisible&&dupilot_sitl_gazebo_plugin&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///tu-darmstadt-ros-pkg/hector_gazebo/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/tu-darmstadt&/span&&span class=&invisible&&-ros-pkg/hector_gazebo/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///erlerobot/rotors_simulator& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ro&/span&&span class=&invisible&&tors_simulator&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& -b sonar_plugin&br&git clone&a href=&/?target=https%3A///PX4/mav_comm.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/PX4/mav_comm&/span&&span class=&invisible&&.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///ethz-asl/glog_catkin.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ethz-asl/glo&/span&&span class=&invisible&&g_catkin.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///catkin/catkin_simple.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/catkin/catki&/span&&span class=&invisible&&n_simple.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///erlerobot/mavros.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ma&/span&&span class=&invisible&&vros.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone &a href=&/?target=https%3A///ros-simulation/gazebo_ros_pkgs.git-b& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ros-simulati&/span&&span class=&invisible&&on/gazebo_ros_pkgs.git-b&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& indigo-devel&br&#Add Python and C++ examples&br&git clone&a href=&/?target=https%3A///erlerobot/gazebo_cpp_examples& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ga&/span&&span class=&invisible&&zebo_cpp_examples&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&git clone&a href=&/?target=https%3A///erlerobot/gazebo_python_examples& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/ga&/span&&span class=&invisible&&zebo_python_examples&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/blockquote&&h2&&b&2.8&/b& &b&安装Gazebo&/b&&/h2&&p&&b&选项1:安装Gazebo使用Ubuntu包&/b&&/p&&p&设置你的电脑从&a href=&/?target=http%3A//packages.osrfoundation.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&packages.osrfoundation.org&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&接收软件&/p&&blockquote&sudo sh -c 'echo &deb&a href=&/?target=http%3A//packages.osrfoundation.org/gazebo/ubuntu-stable& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&packages.osrfoundation.org&/span&&span class=&invisible&&/gazebo/ubuntu-stable&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& `lsb_release -cs`main& & /etc/apt/sources.list.d/gazebo-stable.list'&/blockquote&&p&设置秘钥&/p&&blockquote&wget&a href=&/?target=http%3A//packages.osrfoundation.org/gazebo.key& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&packages.osrfoundation.org&/span&&span class=&invisible&&/gazebo.key&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& -O - | sudo apt-key add -&/blockquote&&p&安装gazebo7&/p&&blockquote&sudo apt-get update&br&sudo apt-get remove .*gazebo.* '.*sdformat.*''.*ignition-math.*' && sudo apt-get update && sudo apt-getinstall gazebo7 libgazebo7-dev drcsim7 -y&/blockquote&&p&&br&&/p&&p&&b&选项2:从源代码安装Gazebo&/b&&/p&&p&按照以下指令从源代码安装Gazebo。&/p&&p&&a href=&/?target=http%3A//gazebosim.org/tutorials%3Fcat%3Dinstall%26tut%3Dinstall_from_source%26ver%3Ddefault& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&gazebosim.org/tutorials?&/span&&span class=&invisible&&cat=install&tut=install_from_source&ver=default&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&编译Gazebo需要等很长时间喔!&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&2.9 集成编译&/b&&/h2&&blockquote&cd ~/simulation/ros_catkin_ws&br&catkin_make --pkg mav_msgs mavros_msgsgazebo_msgs&br&source devel/setup.bash&br&catkin_make -j 4&/blockquote&&p&最后下载仿真所需的Gazebo模型&/p&&blockquote&mkdir -p~/.gazebo/models&br&git clone &a href=&/?target=https%3A///erlerobot/erle_gazebo_models& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/erlerobot/er&/span&&span class=&invisible&&le_gazebo_models&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&mverle_gazebo_models/* ~/.gazebo/models&/blockquote&&h2&&b&3 运行仿真&/b&&/h2&&h2&&b&3.1启动APMrover2&/b&&/h2&&blockquote&source~/simulation/ros_catkin_ws/devel/setup.bash&br&cd ~/simulation/ardupilot/APMrover2&br&../Tools/autotest/sim_vehicle.sh -j 4 -f Gazebo&/blockquote&&p&&br&&/p&&p&第一次使用会此脚本会自动对一些包进行编译,需要联网下载所需包,编译完成后,以后便可直接运行。&/p&&p&此时会启动MAV的控制台(上)和一个ardupilot显示台(下)。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&然后调用你无人车的param参数表。第一次可使用默认的param&/p&&p&&br&&/p&&p&param load /&b&[path_to_your_home_directory]&/b&/simulation/ardupilot/Tools/Frame_params/3DR_Rover.param&/p&&p&&br&&/p&&p&将&b&[path_to_your_home_directory]&/b&替换成你所在的文件夹,如:&/p&&blockquote&paramload ~/simulation/ardupilot/Tools/Frame_params/3DR_Rover.param&/blockquote&&p&&br&&/p&&p&打开另一个终端运行Gazebo&/p&&p&&br&&/p&&blockquote&source~/simulation/ros_catkin_ws/devel/setup.bash&br&roslaunch ardupilot_sitl_gazebo_pluginrover_spawn.launch&/blockquote&&p&&br&&/p&&p&&br&&/p&&p&是不是觉得图像好单调啊!可以进入launch文件夹,里面其实有好多复杂的世界模型。&/p&&blockquote&source~/simulation/ros_catkin_ws/devel/setup.bash&br&roscd
ardupilot_sitl_gazebo_plugin/launch&/blockquote&&p&我们使用一个迷宫世界试试:&/p&&blockquote&source~/simulation/ros_catkin_ws/devel/setup.bash&br&roslaunch ardupilot_sitl_gazebo_plugin
rover_maze.launch&/blockquote&&p&我又在世界模型里加了一些高低不同的障碍物,这下是不是有意思多了呢。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&3.2&/b& &b&通过MAVProxy控制Erle-Rover&/b&&/h2&&p&在MAV控制台中发送模拟遥控器指令:&/p&&blockquote&# in the MAVProxy prompt:&br&mode MANUAL&br&#设置地面站MAVLink系统 ID&br&param set SYSID_MYGCS 255&br&#rc 3为油门通道,1500为中立位置,为前进,为后退&br&rc 3 1900&/blockquote&&p&再输入后退指令&/p&&blockquote&rc 3 1200&/blockquote&&p&输入转向指令&/p&&blockquote&#rc 1为方向通道,1500为中立位置,为右转,为左转&br&rc 1 1900&/blockquote&&p&至此可以通过MAVROS控制gazebo小车运动了,下一步我们将在地面站中设置航线,并控制无人车自动驾驶了。&/p&
APMRover+Gazebo+ROS+MAVproxy 无人车仿真环境搭建步骤
图1 使用了Pixhawk2作为小脑运动控制器
图2 硬件使用了巨匠无人车平台 1 前言机器人学的本质就是与物理世界的互动。抛开物理硬件,在纯软件的环境里进行仿真,似乎与机器人学背道而驰。但是从节约成…
&p&简单介绍几个比较有代表性的工作, 分为以下几类:&/p&&p&I. 相机重定位(Relocalization):&/p&&p&Deep Learning和SLAM结合的开山之作 ,剑桥的论文:PoseNet 。该方法使用 GoogleNet 做了 6自由度相机pose 的regression。训练数据是带有ground truth pose的场景帧。&/p&&img src=&/v2-946b3be2_b.jpg& data-rawwidth=&1144& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&1144& data-original=&/v2-946b3be2_r.jpg&&&p&图1. PoseNet,第一行是原图,第二行是根据所估计的相机姿态做3D重建后的场景图,第三 行是原图和重建后的场景的重叠。&/p&&p&&b&论文:&/b&Alex Kendall, Matthew Grimes, Roberto Cipolla, & PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization&, in ICCV 2015, &a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&7&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码: &/b&&a href=&///?target=https%3A///alexgkendall/caffe-posenet& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&alexgkendall/caffe-posenet&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&II.
特征点提取与匹配:&/p&&p&(1).
帧帧之间的匹配是传统特征法SLAM的重要环节。这里首先推荐一下EPFL的文章LIFT (Learned Invariant Feature Transform ),通过深度神经网络学习图像中的特征点。pipeline如图2,LIFT分别计算了Detector, Orientation Estimator 以及 Descriptor 。&/p&&img src=&/v2-575e7baaa6eb_b.jpg& data-rawwidth=&943& data-rawheight=&257& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-575e7baaa6eb_r.jpg&&&p&图2. LIFT pipeline&/p&&p&和SIFT特征相比,LIFT能够提取出更稠密的特征点,如图3所示。&/p&&img src=&/v2-529610eed2d525a6d69e6_b.jpg& data-rawwidth=&913& data-rawheight=&583& class=&origin_image zh-lightbox-thumb& width=&913& data-original=&/v2-529610eed2d525a6d69e6_r.jpg&&&p&图3. SIFT(左)和 LIFT(右)提取出来的特征点对比&/p&&p&&b&论文:&/b&Kwang Moo Yi, Eduard Trulls, Vincent Lepetit, Pascal Fua, & LIFT: Learned Invariant Feature Transform&, in ECCV 2016, &a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&4&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:&/b&&a href=&///?target=https%3A///cvlab-epfl/LIFT& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cvlab-epfl/LIFT&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&(2). Magic leap 的文章:Toward Geometric Deep SLAM ,介绍了一种非常出色的特征点(角点)提取和匹配的方法,如图4所示:&/p&&img src=&/v2-d7cb9ab2e_b.jpg& data-rawwidth=&1222& data-rawheight=&423& class=&origin_image zh-lightbox-thumb& width=&1222& data-original=&/v2-d7cb9ab2e_r.jpg&&&p&图4. Deep Point-Based Tracking &/p&&p&来看看这牛逼闪闪的效果,提出来的点不多不少,准确的定位到了物体的每个角点,简直是强迫症的福音!&/p&&img src=&/v2-e1d6a1e5be887ed4a7fbee_b.jpg& data-rawwidth=&774& data-rawheight=&582& class=&origin_image zh-lightbox-thumb& width=&774& data-original=&/v2-e1d6a1e5be887ed4a7fbee_r.jpg&&&p&图5. 特征点的提取效果&/p&&p&论文中还和FAST,Harris等经典特征提取法做了比较,本文的方法对于噪声比较robust,提取的特征点看着也比FAST,Harris舒服,有兴趣的可以细读文章。我相信本文的方法在今后的特征法SLAM系统中定能大放光彩。&/p&&p&&b&论文:&/b&Daniel DeTone,
Tomasz Malisiewicz,
Andrew Rabinovich, “Toward Geometric Deep SLAM ”, &a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&0&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:还没有&/b&&/p&&p&&br&&/p&&p&III. 端对端视觉里程计:&/p&&p&1.
今年CVPR的 SfM-Learner。文章的核心思想是利用photometric consistency原理来估计每一帧的depth和pose。photometric consistency就是对于同一个物体的点,在不同两帧图像上投影点,图像灰度应该是一样的。论文方法的大体过程请看图6。&/p&&img src=&/v2-8bdb98c3dfe_b.jpg& data-rawwidth=&644& data-rawheight=&575& class=&origin_image zh-lightbox-thumb& width=&644& data-original=&/v2-8bdb98c3dfe_r.jpg&&&p&图6. SfM-Learner的训练和测试大体过程&/p&&p&各位回忆一下直接法SLAM的经典:LSD-SLAM (&a href=&///?target=https%3A//vision.in.tum.de/research/vslam/lsdslam& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LSD-SLAM: Large-Scale Direct Monocular SLAM&i class=&icon-external&&&/i&&/a&),有没有感觉这篇文章的核心思路和LSD-SLAM如出一辙?本质都是优化photometric error。 来看看SfM-Learner的Loss(最终的Loss在此基础上做了优化),&/p&&img src=&/v2-23326abd4e41b686c7539abb57be1f05_b.jpg& data-rawwidth=&311& data-rawheight=&71& class=&content_image& width=&311&&&p&再看看LSD-SLAM里面,需要优化的photometric error 函数:&/p&&img src=&/v2-6b561a2bc2a37fb44deb_b.jpg& data-rawwidth=&889& data-rawheight=&162& class=&origin_image zh-lightbox-thumb& width=&889& data-original=&/v2-6b561a2bc2a37fb44deb_r.jpg&&&p&有没有很像?&/p&&p&&b&论文:&/b&Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe, &Unsupervised Learning of Depth and Ego-Motion from Video&, in CVPR 2017, &a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&3&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:&/b&&a href=&///?target=https%3A///tinghuiz/SfMLearner& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&tinghuiz/SfMLearner&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&2. 今年的新文章:SfM-Net。听名字就和SfM-Learner很像,这篇文章和SfM-Learner都是出自Google。论文的核心思想也是利用photometric constancy来计算pose,depth。除此之外,作者还计算了光流,scene flow,3D point cloud等。可以说是SfM-Learner的升级版。&/p&&img src=&/v2-c48d8b985cdb1fd0e4c703_b.jpg& data-rawwidth=&1173& data-rawheight=&642& class=&origin_image zh-lightbox-thumb& width=&1173& data-original=&/v2-c48d8b985cdb1fd0e4c703_r.jpg&&&p&图7. SfM-Net 网络结构&/p&&p&&b&论文:&/b&Sudheendra Vijayanarasimhan, Susanna Ricco, Cordelia Schmid, Rahul Sukthankar, Katerina Fragkiadaki, “SfM-Net: Learning of Structure and Motion from Video”, &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning of Structure and Motion from Video&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:还没有&/b&&/p&&p&&br&&/p&&p&3. 另外一篇和SfM-Net,SfM-Learner比较相似的文章:DeMoN,使用pose, depth作为监督信息,来估计pose和depth。最后的效果非常不错。网络的核心部分如图所示&/p&&img src=&/v2-6248ffca18b2bad12a9e4d987d25e600_b.jpg& data-rawwidth=&1499& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&1499& data-original=&/v2-6248ffca18b2bad12a9e4d987d25e600_r.jpg&&&p&图8. DeMoN网络核心结构&/p&&p&&b&论文:&/b&Benjamin Ummenhofer, Huizhong Zhou, Jonas Uhrig, Nikolaus Mayer, Eddy Ilg, Alexey Dosovitskiy, Thomas Brox, &DeMoN: Depth and Motion Network for Learning Monocular Stereo&, in CVPR 2017,&a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&1&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:&/b&&a href=&///?target=https%3A///lmb-freiburg/demon& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lmb-freiburg/demon&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&IV. 语义 SLAM&/p&&p&CNN-SLAM。该文章使用直接法估计相机姿态,使用CNN来估计Depth,以及做图像语义分割。然后将Geometry和semantic融合起来,生成具有语义信息的map。&/p&&img src=&/v2-7c55c2cca43b2c86224a94dfd710b18c_b.jpg& data-rawwidth=&1249& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&1249& data-original=&/v2-7c55c2cca43b2c86224a94dfd710b18c_r.jpg&&&p&图9. CNN-SLAM pipeline&/p&&p&&b&论文:&/b&Keisuke Tateno, Federico Tombari, Iro Laina, Nassir Navab, &CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction&, in CVPR 2017, &a href=&///?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&9&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&代码:还没有&/b&&/p&&p&&br&&/p&&p&&b&总结一下:&/b&&/p&&p&从目前的研究情况来看,深度学习在SLAM这个问题上还没有完全取代传统方法的能力。希望各位同僚继续努力!&/p&&p&跳出SLAM,说点题外话,利用深度强化学习来进行端对端的机器人导航,已经有了不错的结果。人类在环境中导航,不也是直接输入image,输出action吗?有兴趣的可以看看这两篇文章:&/p&&p&(1) &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Cognitive Mapping and Planning for Visual Navigation&i class=&icon-external&&&/i&&/a&&/p&&img src=&/v2-d3b17cbd6410f35dabef84_b.jpg& data-rawwidth=&1014& data-rawheight=&585& class=&origin_image zh-lightbox-thumb& width=&1014& data-original=&/v2-d3b17cbd6410f35dabef84_r.jpg&&&p&(2) &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Target-driven Visual Navigation in Indoor Scenes using Deep Reinforcement Learning&i class=&icon-external&&&/i&&/a&&/p&&img src=&/v2-71cb4f9acaef_b.jpg& data-rawwidth=&873& data-rawheight=&475& class=&origin_image zh-lightbox-thumb& width=&873& data-original=&/v2-71cb4f9acaef_r.jpg&&
简单介绍几个比较有代表性的工作, 分为以下几类:I. 相机重定位(Relocalization):Deep Learning和SLAM结合的开山之作 ,剑桥的论文:PoseNet 。该方法使用 GoogleNet 做了 6自由度相机pose 的regression。训练数据是带有ground truth pose的场景帧。图1. …
&img src=&/50/v2-106a71d3ca661d18c3c78acc11e5cd11_b.jpg& data-rawwidth=&600& data-rawheight=&359& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-106a71d3ca661d18c3c78acc11e5cd11_r.jpg&&&p&&/p&&p&&b&编者序&/b&:本文展示了前斜视毫米波SAR成像技术在车载平台上的实验结果,可以很好的与相机获得的光学结果匹配,甚至在对金属属性的物体成像时优于光学成像。本文使用的成像算法太简单,一方面,若加入距离徙动校正和运动补偿必然可以获得更好的效果,另一方面,提高信号带宽、增加积累时间必然可以产生分辨率更高、更精细的毫米波图像,指日可待。
&/p&&hr&&p&&b&推荐指数&/b& ☆☆☆☆☆&/p&&p&&br&&/p&&hr&&p&&b&一、引言&/b&&/p&&p&车载雷达已经应用于客车、卡车和公共汽车中,目前可商用的紧凑雷达传感器产品提供了安全舒适功能,如避撞、变道辅助和自适应巡航控制。然而,自动驾驶的发展趋势可受益于雷达的其它能力,如生成更像图像表征的周围环境信息。目前商用的车载雷达频段在毫米波区段,需要较大的天线孔径以获得较高的分辨率,进而生成有意义的雷达图像。很明显,出于物理和商业考虑,传感器尺寸是很有限的。一种克服该矛盾的方式是采用SAR技术,通过汽车运动获取回波信号并相干处理。&/p&&p&一些研究团队提出了适用于无人车应用的SAR成像技术,但是不是基于仿真就是通过线性轨道采集信号,或者使用了成本或尺寸不适合无人车应用的设备。本文给出了基于单片微波集成电路(monolithic microwave integrated circuits,MMIC)的77GHz雷达实验结果,运动信息使用含GPS的惯性系统获取。我们聚焦于简单的2D FFT信号处理方法成像,可以使用车载雷达系统已经应用的标准信号处理模块实现。&/p&&p&&b&二、 信号模型与处理方法&/b&&/p&&p&本文采用调频连续波FMCW雷达传感器,使用了Ns个连续的chirp信号,忽略距离徙动和测量时间内速度变化,信号模型可近似为距离r和相对速度v的函数&/p&&img src=&/v2-4272c7facab6e10bf68cc_b.jpg& data-caption=&& data-rawwidth=&1729& data-rawheight=&293& class=&origin_image zh-lightbox-thumb& width=&1729& data-original=&/v2-4272c7facab6e10bf68cc_r.jpg&&&p&由于多普勒速度和角度theta是一一对应的,所以可以从距离-多普勒图获得极坐标(r,theta)图像,然后通过最近邻差值可投影到地面两维栅格。&/p&&p&&b&三、实验设置&/b&&/p&&p&实验系统适用Radarlog平台搭建,包括77GHZ Infineon的MMIC雷达前端、FPGA控制板提供信号放大和AD转化、收集离散的IF数据的Mini-PC。此外,还配有VN-300&br&GPS/INS和光学相机,这些传感器通过硬件信号同步触发。系统安装测试车辆如下图所示,雷达系统设置如下表所示。&/p&&img src=&/v2-80bcfef79c9cd28622a1dac_b.jpg& data-caption=&& data-rawwidth=&1729& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1729& data-original=&/v2-80bcfef79c9cd28622a1dac_r.jpg&&&img src=&/v2-c230a51a003b90df652aa8_b.jpg& data-caption=&& data-rawwidth=&1729& data-rawheight=&759& class=&origin_image zh-lightbox-thumb& width=&1729& data-original=&/v2-c230a51a003b90df652aa8_r.jpg&&&p&雷达高度为2米,俯角20度,-10dB波束宽度覆盖地距为3.2米到14.2米,在步进频信号的无模糊范围内;方位角为45度,覆盖了车辆的右前方四分之一象限。雷达有8个接收通道,每个通道单独成像,然后非相干叠加以抑制噪声。&/p&&p&&b&四、实验结果&/b&&/p&&p&共采集了11.2km的数据。由于计算地距时认为地面是平的,因此地面之上或之下的物体可能出现失真。采用距离依赖幅度log量化方法,即20*lg(I(x,y))+10*lg(x^2+y^2),该量化方式可在某种程度上由雷达方程推出。&/p&&p&第一个测量结果如下图所示,场景是停车场,光学图像由车上相机获得,停车目标和建筑可从SAR图像上明显辨别出。&/p&&img src=&/v2-7aabcbba8d08e2af27f861_b.jpg& data-caption=&& data-rawwidth=&1275& data-rawheight=&2167& class=&origin_image zh-lightbox-thumb& width=&1275& data-original=&/v2-7aabcbba8d08e2af27f861_r.jpg&&&p&第二个场景较大,光学图像由无人机获得,可以看到栅栏和路面反射强度不同。&/p&&img src=&/v2-04b5d421ef44bfe1ec5cd_b.jpg& data-caption=&& data-rawwidth=&1729& data-rawheight=&1031& class=&origin_image zh-lightbox-thumb& width=&1729& data-original=&/v2-04b5d421ef44bfe1ec5cd_r.jpg&&&p&第三个场景是郊区场景,光学和雷达图像在灌木丛、篱笆、房屋等很多处都可以匹配,但是金属属性的围栏和车却只在SAR图像上可见。&/p&&img src=&/v2-3f06ef9ddd117e31cc8ac_b.jpg& data-caption=&& data-rawwidth=&1729& data-rawheight=&1034& class=&origin_image zh-lightbox-thumb& width=&1729& data-original=&/v2-3f06ef9ddd117e31cc8ac_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&hr&&p&&i&英文名称:Experimental&br&Verification of a 77-GHz Synthetic Aperture Radar System for Automotive&br&Applications&/i&&/p&&hr&&p&&b&死磕自律,遇见更好的自己;自斩双臂,方能长出强两翼。&/b&&/p&&p&&b&败而不弃,潜龙勿用待时机;执着坚毅,飞升上神创奇迹!&/b&&/p&&p&&br&&/p&&p&&br&&/p&&hr&&p&微信公众号:ML4AI&/p&&p&头条号:机器学习与人工智能&/p&&p&关注该公众号,一起创造奇迹。&/p&&p&&/p&&p&&/p&
编者序:本文展示了前斜视毫米波SAR成像技术在车载平台上的实验结果,可以很好的与相机获得的光学结果匹配,甚至在对金属属性的物体成像时优于光学成像。本文使用的成像算法太简单,一方面,若加入距离徙动校正和运动补偿必然可以获得更好的效果,另一方面…
&img src=&/50/v2-413c245ff06b3bf779505d_b.png& data-rawwidth=&633& data-rawheight=&351& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&/50/v2-413c245ff06b3bf779505d_r.png&&&p&&b&编者按:&/b&地平线大牛讲堂智能驾驶团队技术分享正式开启,后续,智能驾驶团队将持续和大家分享最新的技术成果和研发心得,并在Github主页(&a href=&/?target=https%3A///HorizonAD& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/HorizonAD&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&)上开放相应技术文档,欢迎对智能驾驶技术感兴趣的研发人员关注。&/p&&p&本期由智能驾驶团队吴佳田、颜沁睿、杨德刚给大家分享他们在研发中对视觉SLAM直接法的应用实践,相关代码及说明文档已在Github上发布,地址为:&a href=&/?target=https%3A///HorizonAD/stereo_dso& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/HorizonAD/st&/span&&span class=&invisible&&ereo_dso&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&。&/p&&p&&br&&/p&&p&&b&【作者简介】&/b&&/p&&img src=&/v2-73c70cd0a93645beb352f39d168ae797_b.jpg& data-rawwidth=&436& data-rawheight=&436& class=&origin_image zh-lightbox-thumb& width=&436& data-original=&/v2-73c70cd0a93645beb352f39d168ae797_r.jpg&&&p&吴佳田 | 地平线智能驾驶实习生&/p&&p&本科毕业于南京理工大学,研究生就读于卡内基梅隆大学机器人技术专业,主要研究方向为机器人建图定位。2017年在地平线自动驾驶组实习。&/p&&img src=&/v2-da231a8cd9df5ead595e0c8_b.jpg& data-rawwidth=&554& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&/v2-da231a8cd9df5ead595e0c8_r.jpg&&&p&颜沁睿 | 地平线智能驾驶算法工程师&/p&&p&比利时荷语鲁汶大学人工智能硕士,电子工程学士(GroupT)。电子科技大学信息显示与光电技术学士。长期致力于研究人工智能技术在机器人领域的应用,包括计算机视觉、机器学习和SLAM。现担任地平线机器人公司智能驾驶部算法工程师。&/p&&img src=&/v2-c838e2b2c2daaf1ed6c415_b.jpg& data-rawwidth=&237& data-rawheight=&233& class=&content_image& width=&237&&&p&杨德刚 | 地平线智能驾驶工程师&/p&&p&2014年硕士毕业于西北工业大学模式识别专业,随后作为初始成员加入百度深度学习研究院自动驾驶组,负责高精地图自动化和融合感知系统开发。2016年加入地平线,做过人脸识别、车牌识别、模型定点化等工作,现负责地平线自动驾驶地图和定位。&/p&&p&&br&&/p&&p&在自动驾驶地图定位中SLAM技术扮演重要角色,当前视觉SLAM一般有直接法和特征法,两种方法各有优劣。为了使相机能同时完成3D建图、定位、感知等任务,我们选择直接法进行了相应的应用实践,下面对相关内容做一总结。&/p&&p&&br&&/p&&p&&b&一、关于直接法&/b&&/p&&p&&br&&/p&&p&&b&视觉slam的几个关键元素&/b&:图像点、图像点特征、空间点、空间点特征、相机姿态,一般空间点和相机姿态由图像点优化得到,而空间点特征来源于图像点。&/p&&p&&br&&/p&&p&SLAM求解优化过程中主要优化点的特征和位置匹配代价,在特征法中点的特征匹配由特征描述子确定,求解只优化点特征匹配状态下的位置代价;直接法则是对点的特征(灰度)和位置同时进行优化,是更加end2end的方法,其优势在于避免了绝对特征匹配带来的局部最优问题,同时也省去了特征描述的开销。&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-0a387af42eab_b.jpg& data-rawwidth=&640& data-rawheight=&240& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-0a387af42eab_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&因此&b&直接法相对特征法的好处&/b&有:1. 速度快;2. 对点特征缺失图像更鲁棒;3. 姿态稳定连续;4. 场景重建较稠密。&/p&&p&&br&&/p&&p&&b&直接法应用细节:&/b&&/p&&p&1、
只考虑梯度明显的像素点,不明显的点对目标函数贡献不大&/p&&p&2、
稀疏直接法可以将像素附近patch作为整体计算loss&/p&&p&3、
灰度不变假设比较严格,当不能稳定成立的时候需要光度标定&/p&&p&4、
整体目标函数是极度非凸的,需要仔细的初始化&/p&&p&&br&&/p&&p&&b&二、DSO&/b&&/p&&p&&br&&/p&&p&DSO是Direct Sparse Odometry,是一种新的稀疏直接运动估计算法,其利用梯度强度进行像素选择,联合优化获得相机运动,这种方法&b&不仅可以计算出相机的运动,而且可以得到场景的半稠密重建结果。&/b&&/p&&p&&br&&/p&&p&DSO的前端和LSD-SLAM相似,后端则抛弃了图优化的框架,借鉴了OKVIS中Sliding Window Filter的优化方式,可以取得更快的速度和更好的准确性,在实际应用中也发现DSO比LSD要鲁棒很多。这是因为DSO在联合优化的时候充分利用了相机的光度标定,比如曝光时间,gamma矫正等。同时, 后端优化时的一些trick如 First Estimate Jacobians、Schur Complement和大量的指令集优化使得DSO可以在cpu上达到实时效果。&/p&&p&&br&&/p&&p&&b&三、直接法的应用&/b&&/p&&p&&br&&/p&&p&机器人智能系统需要准确的3D定位和感知,SLAM一般是作为定位的一类方法,比如Odometry进行相对运动的估计、Mapping重建场景准确地图等。过去特征法的输出只能用于定位,因为重建出来的场景过于稀疏,有意义场景物体结构已经不复存在,但&b&直接法则不同,其输出的较稠密场景重建结果不仅可以用于地图构建,同时还可以用于3D感知,&/b&比如下图1,我们算法研究上较多的是左边的图像分割任务,自动驾驶需要的是右边的结果;如图2一般研究目标检测任务以左图为目标,而自动驾驶需要的是准确的3D结果,这时直接法重建的较稠密结果就有了额外的用武之地,即可以用于与2D感知结合得到准确的3D感知,比如根据连续几帧直接法输出的相对姿态和目标2D Bounding Box获得3D Bounding Box和速度等。&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-69a0b2934334dafe2dd641b9c582b73c_b.jpg& data-rawwidth=&640& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-69a0b2934334dafe2dd641b9c582b73c_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&地平线自动驾驶团队在3D定位和感知方面做了一些尝试,比如DSO算法的单目版本没办法获取准确的物理尺度信息,在自动驾驶应用上有比较大的局限,因此我们对其进行了双目扩展。StereoDSO通过结合双目Stereo的约束到统一的优化框架中不仅可以得到高精度的姿态估计,解决单目DSO的尺度问题; 而且能够在系统跟丢的情况下快速初始化,使系统更加方便实用,最终整个方法能够&b&实时获得鲁棒的相机姿态和场景重建结果。&/b&&/p&&p&&br&&/p&&p&移动机器人应用比如自动驾驶和服务机器人,其执行任务的基础是需要实时知道自己的位置和姿态,并需要算法在保证精度的前提下具有足够的鲁棒性,因为机器人都是在先验记忆的世界模型中进行运动操作的,世界模型与实时感知之间需要准确的物理尺寸进行对接,StereoDSO正是这样任务的很好的解决方法,&b&首先没有尺度问题,&/b&即物理尺寸足够准确,&b&其次本身运行中足够鲁棒,&/b&即使丢失也能够快速的重新初始化跟踪,保证机器人任务的连续性。&/p&&p&&br&&/p&&p&机器人执行任务除了定位还要&b&实时避开障碍,&/b&这就要要求对场景有准确的3D感知,DSO可以在定位的同时获得半稠密的重建结果,结合基于图像的目标检测可以很容易的得到物体的3D BBox,也继而获得准确的目标速度朝向等,即本方法还可以同时完成感知属性重建的部分功能。&/p&&p&&br&&/p&&p&我们也将这个StereoDSO的代码实现放到了Github,地址是&a href=&/?target=https%3A///HorizonAD/stereo_dso& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/HorizonAD/st&/span&&span class=&invisible&&ereo_dso&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&,欢迎大家使用和交流。下图是DSO与StereoDSO在Kitti 05数据上的效果,左边是DSO和StereoDSO的对比,可以看到StereoDSO较好的解决了尺度问题,右图是StereoDSO与真值的比较,最终达到约1.1% ~ 4.2%的平移误差和0.001deg/m ~ 0.0053deg/m的旋转误差,&b&更好的满足了自动驾驶所需的准确3D定位和感知要求。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-779d98eaae5_b.jpg& data-rawwidth=&640& data-rawheight=&294& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-779d98eaae5_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&下图是在我们自己的地下停车场数据上的结果,除了能够在这种比较具有挑战性的场景中进行姿态估计,也能够恢复稠密的场景结构,结合图像的2D感知结果即可以进行准确的场景3D建模,直接基于这一结果就可以对自动驾驶车进行决策规划,以完成指定任务。&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-092ea68da7d5a3bf8e4efddac461106d_b.jpg& data-rawwidth=&640& data-rawheight=&246& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-092ea68da7d5a3bf8e4efddac461106d_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&在自动驾驶中,地面的交通元素是更加重要的,在StereoDSO得到的较稠密重建场景中,如果需要对地面交通元素进行更精确全面的感知建图,可以根据StereoDSO的位姿结果进行地面Mapping,如下图所示,在这样的图上我们&b&可以自动获取或者人工编辑高精地图,以获得结构化的结果。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-1fecd8f718bbe238f03b8d_b.jpg& data-rawwidth=&640& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-1fecd8f718bbe238f03b8d_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&b&【参考】&/b&:&/p&&p&[1] &b&Direct Sparse Odometry&/b&,&i&J. Engel, V. Koltun, D. Cremers&/i&, InarXiv:, 2016&/p&&p&[2] &b&Large-scale direct SLAM withstereo cameras&/b&, &i&J. Engel, J. Stückler, D.Cremers&/i&, IROS, 2015&/p&&p&[3] &a href=&/?target=http%3A//blog.csdn.net/Kevin_cc98/article/details/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&blog.csdn.net/Kevin_cc9&/span&&span class=&invisible&&8/article/details/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&[4] &a href=&/?target=http%3A///gaoxiang12/p/5689927.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/gaoxiang12/&/span&&span class=&invisible&&p/5689927.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&[5] &a href=&/?target=https%3A///HorizonAD/stereo_dso& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/HorizonAD/st&/span&&span class=&invisible&&ereo_dso&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&
编者按:地平线大牛讲堂智能驾驶团队技术分享正式开启,后续,智能驾驶团队将持续和大家分享最新的技术成果和研发心得,并在Github主页()上开放相应技术文档,欢迎对智能驾驶技术感兴趣的研发人员关注。本期由智能驾驶团队吴佳田、颜…
&img src=&/v2-55a2c8edcda085c95795cb_b.jpg& data-rawwidth=&1242& data-rawheight=&2208& class=&origin_image zh-lightbox-thumb& width=&1242& data-original=&/v2-55a2c8edcda085c95795cb_r.jpg&&&br&&p&我就是那个出20K并且不愿意把相机移回去的人。&/p&&p&实现难点前面几位答主都罗列得差不多了,这里分享其中一些难点的解决思路。
1. 计算量大:我们从优化算法(采用FAST+SSD提取特征点),使用simd指令集,通过内存换时间这三方面来提升。
2. 单目初始化:我们结合了IMU来解决,首先找到一个平面,然后再从这个平面上来构建地图,这样就不需要平移相机了。
3. 纯旋转:单目通过算法可以解决一部分,可参考《Robust Keyframe-based Monocular SLAM for Augmented Reality 》 ,里面写得很详细。
4. 遮挡和动态物体,特征缺失、动态光源和人物的干扰:首先把屏幕分成区域,使跟踪的特征点均匀分布在这些区域里,再在算法里面进行检测,那么一直在运动的特征点就会被排除掉。
5. 回环检测:类似ptam处理,为每一个关键帧创建了一个Small Blurry Image,在回环检测线程里,随时比对两个SBI是否一致,来判断是否回环。
6. 尺度问题:我们采用的是相对尺度,单目+IMU可以解决这个问题,ARKit的绝对尺度做得很不错,目前我们还没有想出什么好办法,要不要来讨论一下 &a class=&member_mention& href=&///people/912a8c405d1b0a9eacd43& data-hash=&912a8c405d1b0a9eacd43& data-hovercard=&p$b$912a8c405d1b0a9eacd43&&@半闲居士&/a& &a class=&member_mention& href=&///people/0603322facb2dc63fdc5fc& data-hash=&0603322facb2dc63fdc5fc& data-hovercard=&p$b$0603322facb2dc63fdc5fc&&@王小新&/a& &a class=&member_mention& href=&///people/ff55dcd0f33e8f5de77fbc3bb694f13b& data-hash=&ff55dcd0f33e8f5de77fbc3bb694f13b& data-hovercard=&p$b$ff55dcd0f33e8f5de77fbc3bb694f13b&&@栗子&/a&&/p&&p&参考资料:&/p&&p&《ORB-SLAM: a Versatile and Accurate 》&/p&&p&《Monocular SLAM System》&/p&&p&《Monocular Visual-Inertial State Estimation for Mobile Augmented Reality 》&/p&&p&《A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation 》&/p&&p&《Robust Keyframe-based Monocular SLAM for Augmented Reality 》&/p&&p&《Parallel Tracking and Mapping on a Camera Phone 》&/p&
我就是那个出20K并且不愿意把相机移回去的人。实现难点前面几位答主都罗列得差不多了,这里分享其中一些难点的解决思路。
1. 计算量大:我们从优化算法(采用FAST+SSD提取特征点),使用simd指令集,通过内存换时间这三方面来提升。
2. 单目初始化:我们…
资料:&a href=&///?target=http%3A///wiki-en/Autopano_Video_Documentation& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Autopano Video Documentation&i class=&icon-external&&&/i&&/a&&br&全景视频入门科普文:&a href=&///?target=http%3A///news/201512/bMLT4bE88swBjG19.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在讨论全景视频的未来之前,我们先搞清楚全景视频是如何实现的 | 雷锋网&i class=&icon-external&&&/i&&/a&&br&软件:&a href=&///?target=http%3A//www./& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&360 video made easy | VideoStitch - VR Video solutions&i class=&icon-external&&&/i&&/a&&br&Facebook Surround360全套开源软件:&a href=&///?target=https%3A///facebook/Surround360& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&facebook/Surround360&i class=&icon-external&&&/i&&/a&&br&基于OPENCV的视频拼接:&a href=&///?target=https%3A///MengLiPKU/VideoStitch& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MengLiPKU/VideoStitch&i class=&icon-external&&&/i&&/a&&br&&br&&b&相关论文&/b&:&br&&ul&&li&&b&Rich360: Optimized Spherical Representation from Structured Panoramic Camera Arrays&/b&, &i&Jungjin Lee, Bumki Kim, Kyehyun Kim, Younghui Kim, Junyong Noh,&/i& ACM Transaction on Graphics (Proc. of ACM SIGGRAPH 2016), Volume 35, Issue 4, p.63:1-63:11, July 2016.&br&&/li&&/ul&&a href=&///?target=http%3A//vml.kaist.ac.kr/publication/journal/JungjinLee_TOG.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rich360: Optimized Spherical Representation from Structured Panoramic Camera Arrays&i class=&icon-external&&&/i&&/a& 推荐&a href=&///?target=http%3A//vml.kaist.ac.kr/publication/journal/JungjinLee_TOG/SIG16_Rich360_vml.pptx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Slides&i class=&icon-external&&&/i&&/a&比较直观&br&&img src=&/v2-34071e4becb4a1e7e132afcd47e422d6_b.png& data-rawwidth=&1314& data-rawheight=&374& class=&origin_image zh-lightbox-thumb& width=&1314& data-original=&/v2-34071e4becb4a1e7e132afcd47e422d6_r.png&&&ul&&li&Silva R, Feijó B, Gomes P B, et al. &b&Real time 360° video stitching and streaming&/b&[C]//ACM SIGGRAPH 2016 Posters. ACM, 2016: 70.&br&&/li&&/ul&&img src=&/v2-45f56cdb3c94a671214aaff2_b.png& data-rawwidth=&698& data-rawheight=&744& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&/v2-45f56cdb3c94a671214aaff2_r.png&&&a href=&///?target=http%3A//dl.acm.org/citation.cfm%3Fid%3D2945148& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Real time 360° video stitching and streaming&i class=&icon-external&&&/i&&/a& 参考补充资料中的视频&br&&ul&&li&最后,关于视频拼接的算法就不赘述了,可以参考我的回答:&br&&/li&&/ul&&a href=&/question//answer/& class=&internal&&图像拼接现在还有研究的价值吗?有哪些可以研究的点?现在技术发展如何? - YaqiLYU 的回答 - 知乎&/a&
资料: 全景视频入门科普文: 软件: Facebook Surround360全套开源软件: …
&p&先说为什么要迭代。&/p&&p&为的是得到a closed-form solution。因为求解相机的内外参数是分步求解的,先求解一部分,然后再求解另外一部分。这样就会导致后边求解的参数依赖于前边求解的参数,后边求解的参数的精度不如求先求解的参数。使用迭代的原因就是为了集体调整这些参数,让他们的精度整体上都有一定的提升。优化普遍见于各种线性、非线性问题的求解,如PnP、三维重建、BA等等。BA经常用于各种视觉问题的最后一步,这一点类似于LM常用于非线性问题的最后一步骤。&/p&&p&然后说为啥是非线性。&/p&&p&镜头的畸变模型,如布朗模型,是非线性的,需要使用非线性优化。虽然如果把求解的理想点和畸变点放在方程里,可以使用线性最小二乘得到畸变参数中的k1,k2。然而对于一个a closed-form solution,这样的假设是不成立的。那是一个非线性函数,需要使用非线性优化,详细参见参考文献1中的第三页Dealing with radial distortion&/p&&br&&p&[1] Zhang Z. Flexible camera calibration by viewing a plane from unknown orientations[C]//Computer Vision, 1999. The Proceedings of the Seventh IEEE International Conference on. Ieee, 6-673.&/p&
先说为什么要迭代。为的是得到a closed-form solution。因为求解相机的内外参数是分步求解的,先求解一部分,然后再求解另外一部分。这样就会导致后边求解的参数依赖于前边求解的参数,后边求解的参数的精度不如求先求解的参数。使用迭代的原因就是为了集体…
&p&这个没具体调研过,因为后来都是直接用的潘佳的FCL碰撞检测库,而且用着没有大问题。&/p&&p&所以我这边就推荐一下 &a href=&///?target=https%3A///flexible-collision-library/fcl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Flexible Collision Library&i class=&icon-external&&&/i&&/a& 吧。&/p&&p&据我了解,目前不少运动规划的模块都是使用的FCL,如MoveIt,omplapp,OpenRave等。&/p&&p&不过,不是C,是C++。&/p&
这个没具体调研过,因为后来都是直接用的潘佳的FCL碰撞检测库,而且用着没有大问题。所以我这边就推荐一下
吧。据我了解,目前不少运动规划的模块都是使用的FCL,如MoveIt,omplapp,OpenRave等。不过,不是C,是C++。
42收藏,31赞,大家都不随手点赞的么~&br&============&br&接着上周微信公众号的内容讲,正好填个坑。&br&首先,URDF(Unified Robot Description Format)是ROS中使用的一种机器人描述文件,它以HTML的形式定义一个机器人。包含的内容有:连杆、关节名称,运动学参数、动力学参数、可视化模型、碰撞检测模型等。&br&那么,如何建立URDF文件呢?&br&&b&一)初级篇&/b&&br&ROS目前提供了SolidWorks转URDF的插件,叫做&a href=&///?target=http%3A//wiki.ros.org/sw_urdf_exporter& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&sw_urdf_exporter&i class=&icon-external&&&/i&&/a&。&br&当然,你的源文件现在在Pro-E中,这个问题不大,可以用IGS或者STEP等格式转换成SolidWorks可以打开的格式(装配体的相对位置还在,但装配关系会丢掉)。之后就可以继续操作了。&br&这个真的简单易用,你安装好SolidWorks后,再安装这个插件,重新打开SW,你就会发现里面多了一个叫做SW2URDF的插件。勾选启用之。&br&&img src=&/v2-591f68ca1bae_b.png& data-rawheight=&581& data-rawwidth=&863& class=&origin_image zh-lightbox-thumb& width=&863& data-original=&/v2-591f68ca1bae_r.png&&&img src=&/v2-d3b560ff51e50e01a232b1_b.png& data-rawheight=&720& data-rawwidth=&846& class=&origin_image zh-lightbox-thumb& width=&846& data-original=&/v2-d3b560ff51e50e01a232b1_r.png&&如上图操作之后就可以进入这个插件的界面:&br&&img src=&/v2-e91cf026ef02d43c3ec185_b.png& data-rawheight=&656& data-rawwidth=&726& class=&origin_image zh-lightbox-thumb& width=&726& data-original=&/v2-e91cf026ef02d43c3ec185_r.png&&&img src=&/v2-95cb1785eceea8b71c62adae_b.png& data-rawheight=&676& data-rawwidth=&732& class=&origin_image zh-lightbox-thumb& width=&732& data-original=&/v2-95cb1785eceea8b71c62adae_r.png&&如上图所示,你可以设置每个连杆、关节名称、对应的模型文件、属性、旋转轴、参考坐标系(可以采用自己预先定义的坐标系,也可以自动生成)等。&br&&img src=&/v2-844c226c9afa207c3cc44c_b.png& data-rawheight=&674& data-rawwidth=&746& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&/v2-844c226c9afa207c3cc44c_r.png&&当你设置好所有连杆后,点击Preview and Export,便会自动生成各坐标轴(如果没有自己预先指定的话)&br&&img src=&/v2-b0dde8fd86f029f83acf8719_b.png& data-rawheight=&720& data-rawwidth=&832& class=&origin_image zh-lightbox-thumb& width=&832& data-original=&/v2-b0dde8fd86f029f83acf8719_r.png&&之后会弹出让你具体设置连杆与关节参数的界面:&br&&img src=&/v2-b74f6c492debcea9338a2c_b.png& data-rawheight=&551& data-rawwidth=&951& class=&origin_image zh-lightbox-thumb& width=&951& data-original=&/v2-b74f6c492debcea9338a2c_r.png&&&img src=&/v2-baa18fc33396d_b.png& data-rawheight=&530& data-rawwidth=&954& class=&origin_image zh-lightbox-thumb& width=&954& data-original=&/v2-baa18fc33396d_r.png&&结束之后,便会生成一个package,包含launch文件,每个连杆STL文件,URDF文件,纹理(没用过)。&br&&img src=&/v2-a7a24e6a8a34a2094abeb_b.png& data-rawheight=&652& data-rawwidth=&881& class=&origin_image zh-lightbox-thumb& width=&881& data-original=&/v2-a7a24e6a8a34a2094abeb_r.png&&这个package是可以直接在ROS中运行的。效果如图:&br&&img src=&/v2-be2a5de4f44_b.png& data-rawheight=&1080& data-rawwidth=&1920& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-be2a5de4f44_r.png&&(我好像少设置了一个关节)&br&&br&&b&二)进阶篇/强迫症篇&/b&&br&上面初级篇可能存在几个问题:&br&&ul&&li&模型无纹理(只能指定整个零件颜色,零件无纹理)&/li&&li&在双臂机器人(树状结构)上经常出错&/li&&li&不能用于并机器人(闭链结构)&/li&&li&可视化模型与碰撞模型相同&/li&&li&容易引入不必要的误差(参数完全不符合设计参数,pi的引入等)&/li&&/ul&所以,进阶篇简单说说怎么自己写一个一看就很厉害的URDF。&br&首先,要了解URDF文件的书写格式:&br&&img src=&/v2-0e0ad3ca369fab_b.png& data-rawheight=&1278& data-rawwidth=&1440& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/v2-0e0ad3ca369fab_r.png&&以上几个是我平时会用到的URDF内容。其实很简单,只需要按照html的tag来写每部分的内容即可。包括相应模型文件的位置等。&br&&br&之后就可以开始动手写了。这个难度不大,我就直接说如何解决上面提到的几个问题吧:&br&&ul&&li&模型无纹理(只能指定整个零件颜色,零件无纹理)&/li&&/ul&ROS的URDF目前只支持两种格式的模型文件,STL与DAE。我们都知道,STL文件只记录了文件的三维坐标信息,没有纹理信息。DAE则是另一种xml格式的模型文件,可以包含文件的纹理等信息。所以我们的关注点就在于如何从SolidWorks等3D建模软件中导出纹理的dae文件。&br&我尝试过无数种方法后,最终确定的一条有效方法如下:&br&&img src=&/v2-b17674bcdcc7e5bd9fc1aecab2c81129_b.png& data-rawheight=&569& data-rawwidth=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&/v2-b17674bcdcc7e5bd9fc1aecab2c81129_r.png&&&br&&ul&&li&在双臂机器人(树状结构)上经常出错&/li&&/ul&自己写就好了,但是对于多臂机器人,如果每条臂构型一样的话,可以考虑采用xacro格式来写,这样可以大大减少工作量。&br&例如,我写的这个SDA5F机器人的模型文件,两条臂采用的是同一个xacro文件。&br&&img src=&/v2-d9af710f2bdae339a00d93e7de3d5de2_b.png& data-rawheight=&241& data-rawwidth=&441& class=&origin_image zh-lightbox-thumb& width=&441& data-original=&/v2-d9af710f2bdae339a00d93e7de3d5de2_r.png&&&br&&ul&&li&不能用于并机器人(闭链结构)&/li&&/ul&将闭链的其中一个关节描述成mimic_joint,转换成串联或树状结构。&br&&ul&&li&可视化模型与碰撞模型相同&/li&&/ul&URDF可以单独指定可视化模型与碰撞模型。我们正好对两者有不同的需求:&br&可视化模型:尽量精细、漂亮,最好与实际机器人尺寸相同;&br&碰撞模型:尽量精简、可以适当大于机器人尺寸。&br&所以,在自己写URDF的时候可以充分利用这一特性。&br&&img src=&/v2-1bf3bdcbbdae9fb8250487_b.png& data-rawheight=&514& data-rawwidth=&838& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&/v2-1bf3bdcbbdae9fb8250487_r.png&&&img src=&/v2-e42a35c3bdd35e53563d_b.png& data-rawheight=&546& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-e42a35c3bdd35e53563d_r.png&&&br&&ul&&li&容易引入不必要的误差(参数完全不符合设计参数,pi的引入等)&/li&&/ul&因为在写URDF的时候,我们需要指定不同连杆之间的初始相对位置。如果两者的坐标系存在姿态偏差的话,我们就会引入弧度值,尤其是无理数3.的引入。&br&这时候有两种做法:&br&a) 在blender中将所有连杆的坐标系设置成同向(所有关节0°时),这样你在URDF中装配的时候就没有pi了;&br&b) 采用xacro可参数化的特点,定义一个常数变量pi=3.(甚至更高精度都可以),这样既精简又可靠。&br&&img src=&/v2-e33ca91ea50fcf1c3f315b_b.png& data-rawheight=&301& data-rawwidth=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&/v2-e33ca91ea50fcf1c3f315b_r.png&&&br&最后,秀一波我做的SDA5F模型:&br&&img src=&/v2-f73cce2a0ab6b34c00921e58afab02fb_b.png& data-rawheight=&718& data-rawwidth=&1116& class=&origin_image zh-lightbox-thumb& width=&1116& data-original=&/v2-f73cce2a0ab6b34c00921e58afab02fb_r.png&&
42收藏,31赞,大家都不随手点赞的么~ ============ 接着上周微信公众号的内容讲,正好填个坑。 首先,URDF(Unified Robot Description Format)是ROS中使用的一种机器人描述文件,它以HTML的形式定义一个机器人。包含的内容有:连杆、关节名称,运动学参…
已有帐号?
无法登录?
社交帐号登录
1747 条内容
761 人关注
336 条内容
15229 人关注
1040 条内容
653 人关注
105 条内容
2478 人关注
840 条内容}

我要回帖

更多关于 realsense 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信