ROS melodic android_apps移植

目录

环境

遇到问题

[问题一 Waiting for maps ...](#问题一 Waiting for maps ...)

[问题二 Attempting to connect to mongodb @ localhost:27017](#问题二 Attempting to connect to mongodb @ localhost:27017)

[问题三 Insert map failed](#问题三 Insert map failed)

[问题四 保存同名地图错误](#问题四 保存同名地图错误)

mongo


环境

Ubuntu 18.04 + ROS melodic

Windows 10 + Android Studio 2020.3.1 Patch 3

遇到问题

问题一 Waiting for maps ...

GitHub - rosjava/android_apps: Applications built on top of the rosjava android libraries.中map_manager、map_nav等APP一直提示wait map list。make_a_map保存地图提示No such service /save_map of type world_canvas_msgs/SaveMap。

通过tcpdump -i any -n -A发现Android App一直在查找/list_maps服务,ROS这边则一直返回-1 no provider错误。

安装mongodb-server,下载world_canvas_server源码,编译。

复制代码
$ sudo apt-get install mongodb-server
$ cd catkin_ws/src
$ git clone https://github.com/corot/world_canvas.git
Cloning into 'world_canvas'...
remote: Enumerating objects: 946, done.
remote: Total 946 (delta 0), reused 0 (delta 0), pack-reused 946
Receiving objects: 100% (946/946), 597.61 KiB | 1.30 MiB/s, done.
Resolving deltas: 100% (605/605), done.
$ git clone https://github.com/corot/world_canvas_libs.git
Cloning into 'world_canvas_libs'...
remote: Enumerating objects: 642, done.
remote: Total 642 (delta 0), reused 0 (delta 0), pack-reused 642
Receiving objects: 100% (642/642), 103.60 KiB | 353.00 KiB/s, done.
Resolving deltas: 100% (354/354), done.
$ git clone https://github.com/corot/world_canvas_msgs.git
Cloning into 'world_canvas_msgs'...
remote: Enumerating objects: 161, done.
remote: Total 161 (delta 0), reused 0 (delta 0), pack-reused 161
Receiving objects: 100% (161/161), 19.92 KiB | 295.00 KiB/s, done.
Resolving deltas: 100% (89/89), done.
$ cd ..
$ catkin_make
$ source devel/setup.bash
$ roslaunch world_canvas_server world_canvas_server.launch
... logging to /home/freeware/.ros/log/0da06d8a-4b44-11ec-aba4-c85b76ac404e/roslaunch-Z0211122-21558.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://Z0211122:40661/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.12
 * /world_canvas_server/auto_save_map: False
 * /world_canvas_server/start_map_manager: True

NODES
  /
    world_canvas_server (world_canvas_server/world_canvas_server)

auto-starting new master
process[master]: started with pid [21568]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 0da06d8a-4b44-11ec-aba4-c85b76ac404e
process[rosout-1]: started with pid [21581]
started core service [/rosout]
process[world_canvas_server-2]: started with pid [21584]
Traceback (most recent call last):
  File "/data/ros/map/src/world_canvas/world_canvas_server/scripts/world_canvas_server", line 6, in <module>
    import world_canvas_server
  File "/data/ros/map/devel/lib/python2.7/dist-packages/world_canvas_server/__init__.py", line 34, in <module>
    exec(__fh.read())
  File "<string>", line 1, in <module>
  File "/data/ros/map/src/world_canvas/world_canvas_server/src/world_canvas_server/annotations_server.py", line 40, in <module>
    import warehouse_ros as wr
ImportError: No module named warehouse_ros
[world_canvas_server-2] process has died [pid 21584, exit code 1, cmd /data/ros/map/src/world_canvas/world_canvas_server/scripts/world_canvas_server false __name:=world_canvas_server __log:=/home/freeware/.ros/log/0da06d8a-4b44-11ec-aba4-c85b76ac404e/world_canvas_server-2.log].
log file: /home/freeware/.ros/log/0da06d8a-4b44-11ec-aba4-c85b76ac404e/world_canvas_server-2*.log

问题二 Attempting to connect to mongodb @ localhost:27017

下载warehouse_ros,切换到0.8.8版本。编译运行,一直提示Attempting to connect to mongodb @ localhost:27017。

复制代码
$ cd catkin_ws/src
$ git clone https://github.com/ros-planning/warehouse_ros.git
Cloning into 'warehouse_ros'...
remote: Enumerating objects: 687, done.
remote: Counting objects: 100% (112/112), done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 687 (delta 55), reused 42 (delta 15), pack-reused 575
Receiving objects: 100% (687/687), 164.55 KiB | 1.16 MiB/s, done.
Resolving deltas: 100% (381/381), done.
$ cd warehouse_ros
$ git checkout 0.8.8
Note: checking out '0.8.8'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at cb760de 0.8.8
$ cd ../..
$ catkin_make
$ roslaunch world_canvas_server world_canvas_server.launch
... logging to /home/freeware/.ros/log/4582f280-4b45-11ec-aba4-c85b76ac404e/roslaunch-Z0211122-22169.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://Z0211122:45963/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.12
 * /world_canvas_server/auto_save_map: False
 * /world_canvas_server/start_map_manager: True

NODES
  /
    world_canvas_server (world_canvas_server/world_canvas_server)

auto-starting new master
process[master]: started with pid [22179]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 4582f280-4b45-11ec-aba4-c85b76ac404e
process[rosout-1]: started with pid [22192]
started core service [/rosout]
process[world_canvas_server-2]: started with pid [22195]
[INFO] [1637552144.290101]: Attempting to connect to mongodb @ localhost:27017
[INFO] [1637552146.296010]: Attempting to connect to mongodb @ localhost:27017
[INFO] [1637552148.302977]: Attempting to connect to mongodb @ localhost:27017
^C[world_canvas_server-2] killing on exit
Traceback (most recent call last):
  File "/data/ros/map/src/world_canvas/world_canvas_server/scripts/world_canvas_server", line 15, in <module>
    world_canvas_server.AnnotationsServer()
  File "/data/ros/map/src/world_canvas/world_canvas_server/src/world_canvas_server/annotations_server.py", line 61, in __init__
    wr.MessageCollection("world_canvas", "worlds", WorldCanvas)
  File "/data/ros/map/src/warehouse_ros/src/warehouse_ros/message_collection.py", line 76, in __init__
    self.db = self.conn[db]
AttributeError: MessageCollection instance has no attribute 'conn'
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

进行以下修改后可以正常运行world_canvas_server。

复制代码
--- a/src/warehouse_ros/message_collection.py
+++ b/src/warehouse_ros/message_collection.py
@@ -65,7 +65,8 @@ class MessageCollection:
         self.port = db_port or rospy.get_param('warehouse_port', 27017)
         while not rospy.is_shutdown():
             try:
-                self.conn = pm.Connection(self.host, self.port)
+                self.conn = pm.MongoClient(self.host, self.port)
                 break
             except:
                 rospy.loginfo( "Attempting to connect to mongodb @ {0}:{1}".\

$ roslaunch world_canvas_server world_canvas_server.launch
... logging to /home/freeware/.ros/log/e5710f98-4b45-11ec-aba4-c85b76ac404e/roslaunch-Z0211122-22361.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://Z0211122:41785/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.12
 * /world_canvas_server/auto_save_map: False
 * /world_canvas_server/start_map_manager: True

NODES
  /
    world_canvas_server (world_canvas_server/world_canvas_server)

auto-starting new master
process[master]: started with pid [22371]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to e5710f98-4b45-11ec-aba4-c85b76ac404e
process[rosout-1]: started with pid [22384]
started core service [/rosout]
process[world_canvas_server-2]: started with pid [22387]
[INFO] [1637552412.649973]: Map manager : initialized.
[INFO] [1637552412.651540]: Annotations server : initialized.

问题三 Insert map failed

用make_a_map App保存地图时,提示如下错误。

Insert map failed: init() got an unexpected keyword argument 'safe'

复制代码
--- a/world_canvas_server/src/world_canvas_server/map_manager.py
+++ b/world_canvas_server/src/world_canvas_server/map_manager.py
@@ -269,7 +269,7 @@ class RecSession:

         if not self.map_saved:
             try:
-                self.parent.map_collection.insert(self.map, self.metadata, safe=True)
+                self.parent.map_collection.insert(self.map, self.metadata)
                 self.metadata = self.parent.get_metadata(self.metadata['uuid'])
                 if self.metadata is None:
                     # This should not happen, obviously

问题四 保存同名地图错误

保存同名地图提示如下错误:

复制代码
[ERROR] [1637559038.185892]: Error processing request: __init__() got an unexpected keyword argument 'safe'
['Traceback (most recent call last):\n', '  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 632, in _handle_request\n    response = convert_return_to_response(self.handler(request), self.response_class)\n', '  File "/data/ros/catkin_ws/src/world_canvas/world_canvas_server/src/world_canvas_server/map_manager.py", line 226, in save_map\n    if self.rec_session.save(request.map_name) == False:\n', '  File "/data/ros/catkin_ws/src/world_canvas/world_canvas_server/src/world_canvas_server/map_manager.py", line 288, in save\n    self.parent.map_collection.update(self.metadata, msg=self.map)\n', '  File "/data/ros/catkin_ws/src/warehouse_ros/src/warehouse_ros/message_collection.py", line 186, in update\n    self.coll.save(entry, safe=True)\n', '  File "/usr/lib/python2.7/dist-packages/pymongo/collection.py", line 2913, in save\n    write_concern = WriteConcern(**kwargs)\n', "TypeError: __init__() got an unexpected keyword argument 'safe'\n"]

修改如下:

复制代码
--- a/src/warehouse_ros/message_collection.py
+++ b/src/warehouse_ros/message_collection.py
@@ -182,7 +182,7 @@ class MessageCollection:
             entry['blob_id'] = new_msg_id
         if metadata:
             entry.update(metadata)
-        self.coll.save(entry, safe=True)
+        self.coll.save(entry)
         if old_blob_id:
             self.fs.delete(old_blob_id)

mongo

复制代码
$ mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2021-11-22T09:19:17.435+0800 I STORAGE  [initandlisten]
2021-11-22T09:19:17.435+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2021-11-22T09:19:17.435+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-11-22T09:19:18.620+0800 I CONTROL  [initandlisten]
2021-11-22T09:19:18.621+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-11-22T09:19:18.621+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-11-22T09:19:18.621+0800 I CONTROL  [initandlisten]
> help
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce

        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use <db_name>                set current database
        db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell
> show dbs
admin         0.000GB
config        0.000GB
local         0.000GB
world_canvas  0.002GB
> use world_canvas
switched to db world_canvas
> show collections
annotations
annotations_data
fs.chunks
fs.files
maps
worlds
> db.maps.find()
{ "_id" : ObjectId("619b2a8b5b65bf15c79b5c8c"), "blob_id" : ObjectId("619b2a8b5b65bf15c79b5c80"), "uuid" : "f55d993c-f6d8-4e42-9005-8680ff61794f", "creation_time" : 1637558923.118822, "session_id" : "1637558903.25", "name" : "six" }
{ "_id" : ObjectId("619b2bec5b65bf1c901e30be"), "blob_id" : ObjectId("619b2bec5b65bf1c901e30b2"), "uuid" : "85933c68-81a0-4318-ab6f-436400a848a0", "creation_time" : 1637559276.834532, "session_id" : "1637559262.34", "name" : "six" }
相关推荐
黑马水牛2 天前
Carla仿真系列:9_Carla 单目障碍物测距,四种方法原理与实测
经验分享·python·深度学习·计算机视觉·ros·传感器·carla仿真
火车站卖橘子7 天前
Mac搭建ROS初始环境
ros
M-Robots echo7 天前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
M-Robots echo8 天前
安全机制架构解析:M-Robots 分层安全体系,筑牢机器人设备运行底座
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo8 天前
驱动抽象层解析:标准化硬件接口,解决机器人硬件碎片化适配难题
人工智能·机器人·ros·开源社区·m-robots
M-Robots echo9 天前
M-CLAW,面向具身智能的机器人任务编排开发框架
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo9 天前
王成录:机器人产业下一个十年,拼的是 “系统级智能化” 而非单点算法堆叠
机器人·ros·鸿蒙·开源社区·m-robots·王成录
M-Robots echo9 天前
M-Robots ROS 兼容适配方案,实现存量机器人项目低成本迁移
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo11 天前
王成录:黑客松不只是赛事,是开源机器人生态快速试错、挖掘创新的试验场
机器人·ros·鸿蒙·具身智能·开源社区·m-robots
M-Robots echo13 天前
王成录:分布式软总线是 M-Robots 实现群体智能的技术内核
机器人·ros·鸿蒙·开源社区·m-robots