系统ubuntu20.04
ros:noetic
克隆代码:
cd /home/sukai/workspace/roskaiyuanweb/catkin_ws_work_canvas/src
git clone https://github.com/corot/world_canvas.git
git clone https://github.com/corot/world_canvas_libs.git
git clone https://github.com/corot/world_canvas_msgs.git
git clone https://github.com/corot/world_canvas_tools.git
git clone https://github.com/turtlebot/turtlebot_simulator.git
git clone https://github.com/yujinrobot/yujin_ocs.git
git clone https://github.com/yujinrobot/yocs_msgs.git
git clone https://github.com/ros-planning/warehouse_ros.git
git clone https://github.com/ros-perception/ar_track_alvar.git
ar_track_alvar 项目需要 check noetic-devel 分支
安装其它库:
#sudo apt-get install ros-noetic-warehouse-ros
sudo apt-get install python3-pymongo
sudo apt-get install python3-rospkg
或者
安装依赖项:根据每个软件包的要求,使用ROS的包管理器 rosdep 来安装依赖项。运行以下命令:
cd ~/workspace/roskaiyuanweb/catkin_ws_work_canvas
rosdep install --from-paths src --ignore-src -r -y
git上 world_canvas 只有一个版本,看他使用的是python2.7,预测这个项目是noetic之后的版本;
我手上笔记本是noetic的版本,花4小时尝试跑一下;
world_canvas 项目使用的是qt4,而我是qt5,需要改动下cmakelist.txt使它兼容qt5
qt4 update qt5
cd ~/roskaiyuanweb/catkin_ws_work_canvas/src/world_canvas_tools/world_canvas_editor/CMakeLists.txt
#find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
find_package(Qt5 COMPONENTS Core Gui Widgets PrintSupport Network SerialPort Sql WebSockets WebChannel REQUIRED)
qt5_wrap_cpp(MOC_FILES
#qt4_wrap_cpp(MOC_FILES
include/world_canvas_editor/annotations.hpp
include/world_canvas_editor/worlds_list.hpp
include/world_canvas_editor/editor_panel.hpp
)
#qt4_wrap_ui(UIC_FILES
qt5_wrap_ui(UIC_FILES
src/ui/editor_panel.ui
)
#sukai gai
#include(${QT_USE_FILE})
include_directories(
include
${CMAKE_CURRENT_BINARY_DIR}
${catkin_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Network_INCLUDE_DIRS}
${Qt5SerialPort_INCLUDE_DIRS}
${Qt5Sql_INCLUDE_DIRS}
${Qt5WebSockets_INCLUDE_DIRS}
${Qt5WebChannel_INCLUDE_DIRS}
)
改:map_loader.hpp
cd ~/workspace/roskaiyuanweb/catkin_ws_work_canvas/src/world_canvas_tools/world_canvas_editor/include/world_canvas_editor/map_loader.hpp
//map_server::loadMapFromFile(&map_resp_, mapfname.c_str(), res, negate, occ_th, free_th, origin, trinary); //sukai
MapMode trinaryMapMode = TRINARY;
map_server::loadMapFromFile(&map_resp_, mapfname.c_str(), res, negate, occ_th, free_th, origin, trinaryMapMode);
/**
地图模式(MapMode)可以有三种取值:TRINARY、SCALE 和 RAW。每种模式对应不同的地图值的解释和处理方式。
TRINARY 模式是默认模式,其中:
如果地图值(value)大于等于 occ_th(占用阈值),则被认为是占用(Occupied),对应值为 100。
如果地图值小于等于 free_th(空闲阈值),则被认为是空闲(Free),对应值为 0。
否则被认为是未知(Unknown)。
SCALE 模式中:
如果地图值小于 1.0,被视为未知(Unknown)。
如果地图值大于等于 occ_th,被视为占用(Occupied),对应值为 100。
如果地图值小于等于 free_th,被视为空闲(Free),对应值为 0。
否则,使用线性映射将阈值之间的值线性映射到 0 到 100 之间。
RAW 模式中,地图值直接使用,不进行特殊处理。
枚举定义中的 MapMode 声明了这些模式作为枚举值,可以在代码中使用这些枚举值来表示和处理不同的地图模式。
根据您之前的问题,您需要将 TRINARY_VALUE 替换为 TRINARY,因为 TRINARY 是枚举类型 MapMode 的一个有效取值。
*/
改 world_canvas 中的所有py文件中的python改python3
#!/usr/bin/env python
改
#!/usr/bin/env python3
所有 print 加上括号
print "..."
改:
print ("...")
编译运行:
roslaunch world_canvas_server world_canvas_server.launch --screen
File "/home/sukai/workspace/roskaiyuanweb/catkin_ws_work_canvas/src/world_canvas/world_canvas_server/src/world_canvas_server/annotations_server.py", line 40, in
import warehouse_ros as wr
ModuleNotFoundError: No module named 'warehouse_ros'
应该是版本不兼容,到此为止,不想在下功夫了,时间太宝贵!
我没跑起来,不知道这个项目是什么样的,没看到任何功能和界面。
关于如何使用World Canvas Server的指导说明。下面是使用World Canvas Server的步骤:
1.安装: 使用提供的 world_canvas.rosinstall
文件创建一个World Canvas工作空间,并安装依赖项。运行以下命令安装依赖项:
rosdep install --from-paths -i src
2.运行: 首先,启动注释服务器:
roslaunch world_canvas_server world_canvas_server.launch debug:=true --screen
3.填充数据库: 使用提供的脚本 save_xxxx.py
和数据文件(位于world_canvas_server
软件包的 test/annotations
目录下)将一些注释保存到数据库中。例如:
> rosrun world_canvas_server save_markers.py _world:='What a wonderful world' _file:=`rospack find world_canvas_server`/test/annotations/ar_list.yaml
> rosrun world_canvas_server save_walls.py _world:='What a wonderful world' _file:=`rospack find world_canvas_server`/test/annotations/wall_list.yaml
4.查找注释: 使用提供的脚本 get_any.py
从数据库中查找注释。可以根据需要修改参数进行搜索。例如:
> rosrun world_canvas_server get_any.py _world:='What a wonderful world' _ids:=[] _types:=['ar_track_alvar_msgs/AlvarMarker'] _keywords:=[] _relationships=[] _topic_type:=ar_track_alvar_msgs/AlvarMarker _topic_name:=ar_markers _pub_as_list:=False
> rosrun world_canvas_server get_any.py _world:='What a wonderful world' _ids:=[] _types:=['yocs_msgs/Wall'] _keywords:=[] _relationships=[] _topic_type:=yocs_msgs/WallList _topic_name:=wall_pose_list _pub_as_list:=True
5.导入/导出数据库: 使用提供的脚本 import.py
和 export.py
可以将数据库内容导入到YAML文件或将YAML文件导出到数据库中。例如:
rosrun world_canvas_server import.py _file:=`rospack find world_canvas_server`/test/annotations/full_db.yaml
rosrun world_canvas_server export.py _file:=`rospack find world_canvas_server`/test/annotations/export_db.yaml
6.实际场景测试: 可以使用虚拟传感器在Stage仿真环境中模拟Turtlebot,并从World Canvas Server获取2D地图。首先更新工作空间,然后填充WC数据库,并准备好运行以下命令:
roslaunch world_canvas_server world_canvas_server.launch --screen
roslaunch turtlebot_stage populate_world.launch --screen
roslaunch turtlebot_stage world_canvas_demo.launch --screen