ros仿真笔记之——基于rrt_exploration的单个机器人自主探索建图(代码片段)

gwpscut gwpscut     2022-12-11     650

关键词:

之前博文已经介绍过机器人exploration以及多机器人SLAM map merage《ROS学习笔记之——多机器人探索环境》《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》《ROS仿真笔记之——移动机器人SLAM地图融合》《ROS仿真笔记之——移动机器人自主探索式地图构建》之前的都是基于功能包(http://wiki.ros.org/multirobot_map_merge/

而本博文基于rrt_exploration包来进行仿真。网上也有大把基于此包的博客。但是本人实现时都无法跑动(可能是版本的原因?老显示tf无法链)为此,更改了原包的机器人模型为turtlebot3 waffle并且调了一些路径规划的参数,终于调出来了,效果如下视频所示~

single kobuki robot slam based on rrt

单机器人自主探索建图

单机器人自主探索建图(1)

换成kobuki模型效果好很多~

运行命令:

roslaunch rrt_exploration_tutorials single_simulated_house.launch
roslaunch rrt_exploration single.launch 

注意要保证move base的开启

single_simulated_house.launch

<!--  Launch file for signle robot on Gazebo -->
<launch>
<env name="GAZEBO_RESOURCE_PATH" value="$(find rrt_exploration_tutorials)/launch/includes/meshes"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="debug" value="false"/>
<arg name="world_name" value="$(find rrt_exploration_tutorials)/launch/includes/worlds/house.world"/>
<!-- <remap from="/robot_1/cmd_vel" to="/robot_1/mobile_base/commands/velocity"/> -->
</include>

<group ns="robot_1">
<include file="$(find rrt_exploration_tutorials)/launch/includes/robot.launch.xml">
<arg name="robot_name" value="robot_1"/>
<arg name="init_pose" value="-x 0.0 -y 0.0 -z 0.0"/>
</include>

<include file="$(find rrt_exploration_tutorials)/launch/includes/move_baseSafe.launch">
<arg name="namespace" value="robot_1"/>
</include> 
</group>

<node pkg="rviz" type="rviz" name="rviz" args="-d $(find rrt_exploration_tutorials)/launch/includes/rviz_config/single.rviz">
<remap from="move_base_simple/goal" to="robot_1/move_base_simple/goal"/>
</node>

</launch>



move_baseSafe.launch

<!-- move base -->
<launch>
  <master auto="start"/>

  <arg name="namespace"/>

   <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <!-- <arg name="cmd_vel_topic" default="/cmd_vel" /> -->
  <!-- <arg name="odom_topic" default="odom" />
  <arg name="move_forward_only" default="false"/> -->


<param name="use_sim_time" value="true" />

    <!-- <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" >
      <remap from="scan" to="base_scan"/>
      <param name="map_frame" value="$(arg namespace)/map"/>
      <param name="odom_frame" value="$(arg namespace)/odom"/>
      <param name="base_frame" value="$(arg namespace)/base_link"/>
      <param name="map_update_interval" value="2.0"/>
      <param name="maxUrange" value="50.0"/>
      <param name="maxRange" value="50.0"/>
      <param name="sigma" value="0.05"/>
      <param name="kernelSize" value="1"/>
      <param name="lstep" value="0.05"/>
      <param name="astep" value="0.05"/>
      <param name="iterations" value="5"/>
      <param name="lsigma" value="0.075"/>
      <param name="ogain" value="3.0"/>
      <param name="lskip" value="0"/>
      <param name="srr" value="0.01"/>
      <param name="srt" value="0.02"/>
      <param name="str" value="0.01"/>
      <param name="stt" value="0.02"/>
      <param name="linearUpdate" value="0.01"/>
      <param name="angularUpdate" value="0.01"/>
      <param name="temporalUpdate" value="0.1"/>
      <param name="resampleThreshold" value="0.5"/>
      <param name="particles" value="30"/>
      <param name="xmin" value="-5.0"/>
      <param name="ymin" value="-5.0"/>
      <param name="xmax" value="5.0"/>
      <param name="ymax" value="5.0"/>
      <param name="delta" value="0.1"/>
      <param name="llsamplerange" value="0.01"/>
      <param name="llsamplestep" value="0.01"/>
      <param name="lasamplerange" value="0.005"/>
      <param name="lasamplestep" value="0.005"/>
      <param name="minimumScore" value="0.005"/>
    </node> -->


  <!-- <node pkg="move_base" type="move_base" respawn="false" name="move_base_node" output="screen">
    <param name="footprint_padding" value="0.01" />
    <param name="controller_frequency" value="5.0" />
    <param name="controller_patience" value="3.0" />
    <param name="oscillation_timeout" value="30.0" />
    <param name="oscillation_distance" value="0.5" />
    <param name="planner_patience" value="1" />
    <param name="controller_patience" value="1" /> 
    <remap from="cmd_vel" to="mobile_base/commands/velocity"/>
    <param name="recovery_behavior_enabled" value="false" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/base_local_planner_params.yaml" command="load" />  
    <param name="global_costmap/global_frame" value="$(arg namespace)/map"/>
    <param name="global_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/$(arg namespace)/base_laser_link"/>
    <param name="global_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>    
    <param name="local_costmap/global_frame" value="$(arg namespace)/odom"/>
    <param name="local_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="local_costmap/laser_scan_sensor/sensor_frame" value="$(arg namespace)/base_laser_link"/>
    <param name="local_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
    <param name="local_costmap/obstacle_layer/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
  </node> -->

   <!-- <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="base_frame" value="$(arg namespace)/base_link"/>
    <param name="odom_frame" value="$(arg namespace)/odom"/>
    <param name="map_frame"  value="$(arg namespace)/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="3.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="50"/>
    <param name="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="0.5"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="100"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
  </node> -->

   <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="base_frame" value="$(arg namespace)/base_link"/>
    <param name="odom_frame" value="$(arg namespace)/odom"/>
    <param name="map_frame"  value="$(arg namespace)/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="50.0"/>
    <param name="maxRange" value="50.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <!-- <param name="minimumScore" value="50"/> -->
    <param name="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02"/>
    <param name="linearUpdate" value="0.01"/>
    <param name="angularUpdate" value="0.01"/>
    <param name="temporalUpdate" value="0.1"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="100"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.1"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
    <param name="minimumScore" value="0.005"/>
  </node>


   <node pkg="move_base" type="move_base" respawn="false" name="move_base_node" output="screen">
    <param name="footprint_padding" value="0.01" />
    <param name="controller_frequency" value="5.0" />
    <param name="controller_patience" value="3.0" />
    <param name="oscillation_timeout" value="30.0" />
    <param name="oscillation_distance" value="0.05" />
    <param name="planner_patience" value="1" />
    <param name="controller_patience" value="1" /> 
    <!-- <remap from="cmd_vel" to="mobile_base/commands/velocity"/> -->
    <remap from="cmd_vel" to="cmd_vel"/>
    <param name="recovery_behavior_enabled" value="false" />
    <param name="clearing_rotation_allowed" value="true" />
    <param name="min_vel_x" value="-0.3" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/base_local_planner_params.yaml" command="load" />  
    
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/a_costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" /> -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/a_costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" /> -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/a_local_costmap_params.yaml" command="load" /> -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/a_global_costmap_params.yaml" command="load" /> -->

    <!-- move_based对应的参数 -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" /> -->
    <!-- 局部路径规划对应的参数 -->
    <!-- <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/global_costmap_params.yaml" command="load" /> -->
    <!-- <rosparam file="$(find rrt_exploration_tutorials)/param/base_local_planner_params.yaml" command="load" /> -->

    <!-- <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="odom" to="$(arg odom_topic)"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" /> -->

    <param name="global_costmap/global_frame" value="$(arg namespace)/map"/>
    <param name="global_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/$(arg namespace)/base_laser_link"/>
    <param name="global_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>    
    <param name="local_costmap/global_frame" value="$(arg namespace)/odom"/>
    <param name="local_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="local_costmap/laser_scan_sensor/sensor_frame" value="$(arg namespace)/base_laser_link"/>
    <param name="local_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
    <param name="local_costmap/obstacle_layer/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
  </node> 

   <!-- <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"> -->
    <!-- 启动局部路径规划base_local_planner,选用dwa_local_planner/DWAPlannerROS方法 -->
    <!-- <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" /> -->
    <!-- 启动costmap节点及对应的参数 -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/global_costmap_params.yaml" command="load" /> -->
    <!-- move_based对应的参数 -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" /> -->
    <!-- 局部路径规划对应的参数 -->
    <!-- <rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
    <remap from="odom" to="$(arg odom_topic)"/>
    <param name="global_costmap/global_frame" value="$(arg namespace)/map"/>
    <param name="global_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="global_costmap/laser_scan_sensor/sensor_frame" value="$(arg namespace)/base_scan"/>
    <param name="global_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>    
    <param name="local_costmap/global_frame" value="$(arg namespace)/odom"/>
    <param name="local_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="local_costmap/laser_scan_sensor/sensor_frame" value="$(arg namespace)/base_scan"/>
    <param name="local_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
    <param name="local_costmap/obstacle_layer/laser_scan_sensor/topic" value="/$(arg namespace)/base_scan"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node> -->

</launch>

robot.launch.xml

<!--
  Spawns Kobuki inside a Gazebo simulation
  -->
<launch>
  <arg name="robot_name"/>
  <arg name="init_pose"/>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>

  <include file="$(find turtlebot3_bringup)/launch/includes/description.launch.xml">
    <arg name="model" value="$(arg model)" />
  </include>

  <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />
  <node pkg="gazebo_ros" type="spawn_model" name="spawn_$(arg robot_name)" 
        args="$(arg init_pose) -unpause -urdf -param robot_description -model $(arg robot_name)" respawn="false">
  </node>

  <!-- <param name="robot_description"
        command="$(find xacro)/xacro.py '$(find rrt_exploration_tutorials)/launch/includes/urdf/kobuki_standalone.urdf.xacro'"/>
  <node pkg="gazebo_ros" type="spawn_model" name="spawn_$(arg robot_name)" 
        args="$(arg init_pose) -unpause -urdf -param robot_description -model $(arg robot_name)" respawn="false">
  </node> -->
 
   <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
   <param name="publish_frequency" type="double" value="30.0" />
   <param name="use_tf_static" type="bool" value="false" />
   <param name="tf_prefix" type="string" value="$(arg robot_name)"/>
   </node>
</launch>

single.launch

<!-- Launch file for the rrt-detector and the assigner -->


<launch>
<arg name="eta" value="1.0"/>
<arg name="Geta" value="15.0"/>
<param name="namespace_init_count" value="1"/>


  <node pkg="rrt_exploration" type="global_rrt_detector" name="global_detector" output="screen">
  <param name="eta" value="$(arg Geta)"/>
  <param name="map_topic" value="robot_1/map"/>
  </node>
  
  <node pkg="rrt_exploration" type="local_rrt_detector" name="local_detector" output="screen">
  <param name="eta" value="$(arg eta)"/>
  <param name="map_topic" value="robot_1/map"/>
  <param name="robot_frame" value="robot_1/base_link"/>
  </node>
 
  
  <node pkg="rrt_exploration" type="filter.py" name="filter" output="screen">
  <param name="map_topic" value="robot_1/map"/>
  <param name="info_radius" value="1"/> 
  <param name="costmap_clearing_threshold" value="70"/> 
  <param name="goals_topic" value="/detected_points"/>
  <param name="namespace" value="robot_"/> 
  <param name="n_robots" value="1"/>
  <param name="rate" value="100"/>
  </node>
  
  <node pkg="rrt_exploration" type="assigner.py" name="assigner" output="screen">
  <param name="map_topic" value="robot_1/map"/>
  <param name="global_frame" value="robot_1/map"/>
  <param name="info_radius" value="1"/> 
  <param name="info_multiplier" value="3.0"/> 
  <param name="hysteresis_radius" value="3.0"/> 
  <param name="hysteresis_gain" value="2.0"/> 
  <param name="frontiers_topic" value="/filtered_points"/> 
  <param name="n_robots" value="1"/>
  <param name="namespace" value="robot_"/>
  <param name="delay_after_assignement" value="0.5"/>
  <param name="rate" value="100"/>
  </node>
  
</launch>

参考资料

http://wiki.ros.org/rrt_exploration/Tutorials/singleRobot

https://github.com/hasauino/rrt_exploration_tutorials

https://github.com/hasauino/rrt_exploration

ros仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)(代码片段)

首先安装DVS的驱动包,之前博客《ROS学习笔记之——ESVO复现及DAVIS346测试》已经配置过了~然后clone工程,随便放到一个文件下gitclonehttps://github.com/HBPNeurorobotics/gazebo_dvs_plugin.git然后编译,即可将dvs模型安装到系统... 查看详情

ros仿真笔记之——基于frontier_exploration的机器人自主探索

...客也尝试了不同的自主探索包,如rrt_exploration包《ROS仿真笔记之——基于rrt_exploration的单个机器人自主探索建图》与explore_lite包《ROS仿真笔记之——移动机器人自主探索式地图构建》。本博文尝试一下frontier_exploration包关于... 查看详情

ros实验笔记之——px4仿真

...搭建了px4开发环境。本博文在ubuntu下对PX4进行一些基本的仿真学习~之前在做无人机仿真开发时《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》,已经安装了px4了~为此不需要 查看详情

ros仿真笔记之——基于gazebo的多机器人探索环境仿真(代码片段)

...绍过一个名为explore_lite的机器人的包本博文对其进行gazebo仿真分析 目录实验修改地方的说明参考资料 实验首先在包clone下来(这个包设置为私密了,想下载的读者可以直接下载源包https://github.com/hrnr/m-explore然后再做相... 查看详情

ros实验笔记之——evo(代码片段)

...lyingroom"·Issue#4·uzh-rpg/rpg_dvs_evo_open·GitHub之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件相 查看详情

ros仿真笔记之——gazebo配置velodyne(代码片段)

之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了在gazebo里面配置dvssensor,本博文将velodyne也加上,并且在dvscamera里面加入image,使得仿真的eventcamera在输出eventstream的同时,也可以输出图片。... 查看详情

ros实验笔记之——基于cartographer的多机器人slam地图融合(代码片段)

之前博客《 ROS仿真笔记之——多移动机器人SLAM地图融合 》已经实现了基于gmapping的多机器人地图融合。实验和仿真都验证过了。本博文通过cartographer来实现SLAM,再做mapmerge先看视频效果two启动的文件#!/bin/bashgnome-terminal--tab... 查看详情

ros实验笔记之——基于prometheus的无人机运动规划(代码片段)

...验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》Demo演示基于2D-LiDAR的APF路径规划基于rgbdcamera的APF路径规划基于3D-LiDAR的Astar路径规划ego-planner对于ego-planner,直接下载源码编译即可。(源码连接& 查看详情

ros学习笔记之——px4位置环pid控制

之前博客《ROS学习笔记之——基于QGC的PX4在线仿真调PID》已经学习了如何在仿真环境下,调节PID位置环与姿态环。本博文细细的看一下PX4位置环PID调节如下图所示 参考资料 查看详情

ros学习笔记之——gazebo仿真(代码片段)

本博文是本人学习gazebo的学习记录。 Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。Gazebo是近年来最受欢迎的三维仿真器之一,并被选... 查看详情

ros实验笔记之——基于kalibr来标定davis346(代码片段)

之前博客《ROS学习笔记之——DAVIS346calibration》已经实现了用dv-gui(Calibration[Tutorial]·DV)来标定eventcamera了。但是缺少了跟IMU的外参标定等等。本博文利用Kalibr库来对其进行标定。Kalibr安装先创建一个工作空间mkdir-p~/kalibr_... 查看详情

ros实验笔记之——基于l515激光相机的flvis与mlmapping(代码片段)

之前博客《ROS实验笔记之——VINS-Mono在l515上的实现》在l515上实现了vins,博客《ROS实验笔记之——SLAM无人驾驶初入门》配置flvis并跑了对应的kitti数据集本博文在l515上先实现flvis然后再用mlmapping来建图。camera.launch<launch>&l... 查看详情

ros实验笔记之——无人机在vicion下试飞(代码片段)

...验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》已经介绍过一些无人机的仿真,试飞。本博文基于vicion实现一下无人机的试飞。先上图看看我们的无人机长啥样,这是购买阿木实验室的。但是一到货之后... 查看详情

ros实验笔记之——基于eventcamera的asc*特征(代码片段)

目录原理测试参考资料:原理详细的理论部分就不阐述了,可以参考原文以及这个博客~【事件相机整理】角点检测与跟踪总结_larrydong的博客-CSDN博客测试先进入工程编译源码。注意用ros版本的~运行的节点图如下然... 查看详情

ros实验笔记之——基于vscode的ros开发(代码片段)

在VSCODE中添加ROS的插件,可以使得其开发比较简单,但是有时候还是无法显示出一些ROS函数或者变量,修改.vscode文件夹下的c_cpp_properties.json文件如下:"configurations":["browse":"databaseFilename":"","li... 查看详情

ros2+gazebo+opencv之mobot仿真视觉传感器(代码片段)

...xff08;2021共6套) 其中:使用机器人操作系统ROS2和仿真软件Gazebo9服务进阶实战(八)-mobot 查看详情

ros学习笔记之——3dmapmerge(代码片段)

之前博客《ROS实验笔记之——基于cartographer的多机器人SLAM地图融合》已经实现了2Dmapmerge,也做了大量这方面的demotwo基于两个turtlebot2的多机器人SLAM地图融合本博文看看3dmapmerge方面的资料首先呢有CCM-SLAM(https://github.com/VI... 查看详情

ros实验笔记之——基于cartographer方法的slam(代码片段)

之前做的2DLiDAR的实验中,大多采用gmapping,本博文试试采用cartographer。对于cartographer方法,相比起gmapping,其多了IMU以及回环检测。有了回环检测后,可以避免odom的累积误差首先安装依赖包sudoapt-getinstallros-melo... 查看详情