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" }
相关推荐
陈傻鱼1 天前
ROS2测试仿真
机器人·ros·slam
Mr.Winter`2 天前
轨迹优化 | 基于ESDF的非线性最小二乘法路径平滑(附ROS C++仿真)
人工智能·科技·机器人·自动驾驶·ros·最小二乘法·ros2
kuan_li_lyg2 天前
ROS2 与机器人视觉入门教程(ROS2 OpenCV)
开发语言·人工智能·opencv·计算机视觉·matlab·机器人·ros
两棵雪松6 天前
为什么使用ROS的remap标签不起作用?
ros
加点油。。。。7 天前
ubuntu22.4 ROS2 安装gazebo(环境变量配置)
linux·python·ubuntu·ros
Mr.Winter`9 天前
轨迹优化 | 基于贝塞尔曲线的无约束路径平滑与粗轨迹生成(附ROS C++/Python仿真)
人工智能·机器人·自动驾驶·ros·几何学·ros2·轨迹优化
worthsen10 天前
ROS1 与 ROS2 使用区别 【命令】
机器人·ros
Mr.Winter`17 天前
无人船 | 图解推导三自由度USV的运动学和动力学建模
人工智能·机器人·ros·无人船
chinamaoge21 天前
ROS2软件架构全面解析-学习如何设计通信中间件框架
ros·ros2·通信中间件
Tfly__25 天前
ubuntu 18.04安装GCOPTER(最新)
linux·c++·ubuntu·github·ros·无人机·运动规划