使用cartographer扩展舆图

打印 上一主题 下一主题

主题 666|帖子 666|积分 1998

阐明

重要是使用cartographer在已有舆图的基础上扩展未知地区舆图,避免对已有舆图重复建图
1. 加载已有舆图

首先要在定位模式下加载已有舆图
启动launch文件
  1. <launch>
  2.     <arg name = "configuration_directory" default = "/work/slam/script"/>
  3.   <arg name = "configuration_basename" default = "expand_map.lua"/>
  4.   <arg name = "load_state_filename" default = "/work/slam/maps/map.pbstream"/>
  5.   <arg name="load_frozen_state" default="true"/>
  6.   <node name="cartographer_node" pkg="cartographer_ros"
  7.       type="cartographer_node" args="
  8.           -configuration_directory $(arg configuration_directory)
  9.           -configuration_basename $(arg configuration_basename)
  10.           -load_state_filename $(arg load_state_filename)
  11.           -load_frozen_state $(arg load_frozen_state)"
  12.       output="screen">
  13.   </node>
  14.   <node name="rviz" pkg="rviz" type="rviz" required="true"  
  15.         args="-d /work/slam/script/demo_2d.rviz" />
  16.   </launch>
复制代码
2. 竣事当前轨迹

须要竣事定位产生的轨迹
  1. source install_isolated/setup.bash
  2. rosservice call /finish_trajectory 1
复制代码
3. 开启新的轨迹

通过调用cartographer服务开启新的轨迹
  1. rosservice call /start_trajectory "configuration_directory: '/work/slam/script'
  2. configuration_basename: 'expand_map.lua'
  3. use_initial_pose: true     
  4. initial_pose:
  5.   position: {x: -0.0551091, y: -0.939531, z: 0.0}
  6.   orientation: {x: 0.0, y: 0.0, z: -0.00436956, w: 0.999996}
  7. relative_to_trajectory_id: 0"
复制代码
4. 保存舆图

当对未知舆图完成扫描后保存舆图
  1. #!/bin/bash
  2. source install_isolated/setup.bash
  3. # Call the ROS service and save the output to a variable
  4. response=$(rosservice call /get_trajectory_states "{}")
  5. # Extract the trajectory_id array from the response
  6. trajectory_ids=$(echo "$response" | awk -F'trajectory_id: ' '{print $2}' | awk -F']' '{print $1}')
  7. # Extract the last element from the trajectory_id array
  8. last_element=$(echo "$trajectory_ids" | awk -F', ' '{print $NF}')
  9. # Print the last element
  10. echo "Last element of trajectory_id: $last_element"
  11. rosservice call /finish_trajectory $last_element
  12. rosservice call /write_state "{filename: '/work/slam/map/map.pbstream'}"
复制代码
注意

1, 由于在定位阶段加载了lua参数,新建轨迹时如果参数不同,不会见效;
2, 在定位模式下,竣事当前轨迹时,会删除当前轨迹,导致在转换舆图时出现
  1. F0317 08:40:01.665091 111541 proto_stream_deserializer.cc:70] Check failed: pose_graph_.pose_graph().trajectory_size() == all_trajectory_builder_options_.all_trajectory_builder_options() .options_with_sensor_ids_size() (2 vs. 1)
  2. *** Check failure stack trace: ***
  3.     @     0x7a369d2e90cd  google::LogMessage::Fail()
  4.     @     0x7a369d2eaf33  google::LogMessage::SendToLog()
  5.     @     0x7a369d2e8c28  google::LogMessage::Flush()
  6.     @     0x7a369d2eb999  google::LogMessageFatal::~LogMessageFatal()
  7.     @     0x6503b3f07528  (unknown)
  8.     @     0x6503b3ef915a  (unknown)
  9.     @     0x6503b3ef7968  (unknown)
  10.     @     0x7a369ba21c87  __libc_start_main
  11.     @     0x6503b3ef901a  (unknown)
复制代码
因此须要在代码中对删除的操纵举行特殊处理

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表