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" }
相关推荐
Mr.Winter`1 天前
优化求解 | 非线性最小二乘优化器Ceres安装教程与应用案例
人工智能·机器人·自动驾驶·ros·数值优化
&黄昏的乐师2 天前
Opencv+ROS实现摄像头读取处理画面信息
linux·人工智能·opencv·计算机视觉·ros
Simulink_2 天前
ROS学习笔记15——Xacro
linux·笔记·学习·机器人·ros
古月居GYH5 天前
ROS一键安装脚本
人工智能·机器人·ros
DeepAlchemy5 天前
ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
c++·单片机·ros·rosserial
Mr.Winter`8 天前
轨迹优化 | 基于Savitzky-Golay滤波的无约束路径平滑(附ROS C++/Python仿真)
人工智能·算法·机器人·自动驾驶·ros·ros2·数值优化
huanggang9829 天前
在Ubuntu22.04上源码构建ROS noetic环境
ros·ubuntu 22.04
找不着地窖的皮险家11 天前
ROS Action
c++·机器人·ros
Code-world-116 天前
Ubuntu 的 ROS 操作系统安装与测试
linux·ubuntu·ros·noetic ninjemy
饮啦冰美式19 天前
ROS2humble版本使用colcon构建包
ros