ROS Installation on QNX

1,076 views
Skip to first unread message

Stefan May

unread,
Jul 13, 2013, 7:30:53 AM7/13/13
to ros-sig-...@googlegroups.com
Dear all,

I'd like to start a discussion on the installation of ROS on QNX.
Starting point is the wiki entry here:
http://www.ros.org/wiki/groovy/Installation/QNX

I followed the instructions and assume that everything worked well up to the last command:
# rosdep install --from-paths src --ignore-src --rosdistro groovy -y
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
rosconsole: Unsupported OS [qnx]
roslib: Unsupported OS [qnx]
rospack: Unsupported OS [qnx]
rosgraph: Unsupported OS [qnx]
catkin: Unsupported OS [qnx]
rosmake: Unsupported OS [qnx]
roscpp: Unsupported OS [qnx]
rosparam: Unsupported OS [qnx]
rosbuild: Unsupported OS [qnx]
rosout: Unsupported OS [qnx]
rostest: Unsupported OS [qnx]
roswtf: Unsupported OS [qnx]
roslisp: Unsupported OS [qnx]
message_filters: Unsupported OS [qnx]
rostime: Unsupported OS [qnx]
roscreate: Unsupported OS [qnx]
rospy: Unsupported OS [qnx]
rosunit: Unsupported OS [qnx]
roslaunch: Unsupported OS [qnx]
rosmsg: Unsupported OS [qnx]
rosbag: Unsupported OS [qnx]
rosclean: Unsupported OS [qnx]

That's the subset of ROS modules we need to adapt.

Best regards,

   Stefan

Tully Foote

unread,
Jul 17, 2013, 1:57:47 PM7/17/13
to ros-sig-...@googlegroups.com
Hi Stefan, 

As an asside you'll need to double check what you're compiling from source.  All those things listed above should be in your source workspace and not be trying to install via rosdep.  What is the set of packages in your source? 

There are two things that will need to happen to get rosdep to work for QNX.  FIrst rosdep will need a patch to add support for QNX in general, this involves adding a class to let it interface with QNX's package management system. [1] And secondly, you will need to add rosdep rules for the system dependencies. [2] The links are instructions how to do those tasks. It might be worth making a separate file for qnx specific stuff qnx.yaml as it will likely be pretty specific.  






Tully



--
You received this message because you are subscribed to the Google Groups "ros-sig-embedded" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-embedd...@googlegroups.com.
To post to this group, send email to ros-sig-...@googlegroups.com.
Visit this group at http://groups.google.com/group/ros-sig-embedded.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Isaac Isao Saito

unread,
Jul 18, 2013, 4:59:32 AM7/18/13
to ros-sig-...@googlegroups.com
Thank you Tully for the guideline.

I've been working with QNX, and just got catkin running on it [0].
Since getting ROS running, however, is not the first priority in my
work, I may or may not touch this rosdep issue very soon. Is Stefan or
anybody else planning to deal with it?

[0] http://www.ros.org/wiki/groovy/Installation/QNX

Isaac

Stefan May

unread,
Jul 18, 2013, 2:59:19 PM7/18/13
to ros-sig-...@googlegroups.com
Dear Tully,
Dear Isaac,

thank for these hints. I am a bit busy at the moment. I'll give it a try in two weeks.

Best regards,

    Stefan

Stefan May

unread,
Jul 18, 2013, 3:07:47 PM7/18/13
to ros-sig-...@googlegroups.com
Dear Tully,
Dear Isaac,

thank for these hints. I am a bit busy at the moment. I'll give it a try in two weeks.

Best regards,

    Stefan


Am Mittwoch, 17. Juli 2013 19:57:47 UTC+2 schrieb Tully Foote:

Stefan May

unread,
Aug 15, 2013, 10:07:12 AM8/15/13
to ros-sig-...@googlegroups.com, 13...@lateeye.net
Dear Isaac,

I started to work on the porting of ROS. Before, I tried to recover the installation procedure of catkin on QNX, but I ran into several problems:

1) distribute is mentioned not to be used with pip anymore. On pip-installer.org setuptools>=0.8 are recommended. Did you still use distribute? I've tried it with setuptools 0.9.8, but switched to distribute 0.7.3

2) pip runs into the same problem that is already reported by you:
...
self.pid = os.fork()
OSError = [Errno 89] Function is not implemented
...
but leaving out the option "-U" does not fix this issue.
I tried to download the packages manually and ran the setup.py by hand.

PyYAML==3.10
argparse==1.2.1
catkin-pkg==0.1.19
distribute==0.7.3
nose==1.1.2
python-dateutil==2.1
rosdep==0.10.21
rosdistro==0.2.13
rospkg==1.0.21
six==1.3.0
vcstools==0.1.31
wsgiref==0.1.2
wstool==0.0.3

Did I use a wrong version?

3) After manual installation it seems, that everything is ready to run rosdep, but unfortunately it breaks with the error:
...
File "/usr/pkg/lib/python2.7/xml/etree/cElementTree.py", line 3, in <module>
  from _elementtree import *
ImportError: No module named _elementtree

I've installed elementtree and celementtree with pip, but this did not change anything. A few weeks ago, I was successful by just commenting out the line
from xml.etree.ElementTree import *
in /usr/pkg/lib/python2.7/xml/etree/cElementTree.py

How did you satisfy this dependency?

Best regards,

   Stefan

Isaac Isao Saito

unread,
Aug 18, 2013, 6:40:31 PM8/18/13
to ros-sig-...@googlegroups.com
Hallo Stefan,

thank you for testing out the setting steps. Although within a couple
of months I'll have to create a distributable QNX catkin (and ROS)
package in a pkgsrc format, right now I've been away from QNX for
awhile and thus what I know about your comments seems very limited.

The setting steps in the wiki page describes just a single successful
combination I've experienced; if you could add other success patterns
that would be great.

Responding inline,

On Thu, Aug 15, 2013 at 9:07 AM, Stefan May <stefa...@nit-ohm.eu> wrote:
>
> 1) distribute is mentioned not to be used with pip anymore. On pip-installer.org setuptools>=0.8 are recommended. Did you still use distribute? I've tried it with setuptools 0.9.8, but switched to distribute 0.7.3

I haven't switched to setuptools yet; my logbook says its installation
didn't go well (I missed to record the error then. Ouch!) and thus
used distribute.

> 2) pip runs into the same problem that is already reported by you:
> ...
> self.pid = os.fork()
> OSError = [Errno 89] Function is not implemented
> ...
> but leaving out the option "-U" does not fix this issue.
> (cut)

I have no idea either about this. My gut tells me this can be realted
to distribute/setuptools that pip uses?

> 3) After manual installation it seems, that everything is ready to run rosdep, but unfortunately it breaks with the error:
> ...
> File "/usr/pkg/lib/python2.7/xml/etree/cElementTree.py", line 3, in <module>
> from _elementtree import *
> ImportError: No module named _elementtree

Again I don't have clear answer, but some thoughts:

- I've noted an elementtree related issue (I'm not sure if it's
related to your case though):
http://www.ros.org/wiki/groovy/Installation/QNX#Error_in_xml_python_script

- Have you thought about asking in pkgsrc-users?
http://www.netbsd.org/mailinglists/#pkgsrc-users I found them
responsive. Maybe asking there about setuptools installation might be
a good idea (hoping in the best case that using setuptools might solve
all the things you described).

Best,
Isaac

Stefan May

unread,
Aug 20, 2013, 8:25:46 AM8/20/13
to ros-sig-...@googlegroups.com, 13...@lateeye.net
Dear Isaac,

I see, that is the preferable way to manage different versions.
I have one successful attempt and one that failed. Both I can analyze.
I'll have a look on the tailoring these days.

Best regards,

   Stefan

Stefan May

unread,
Aug 23, 2013, 3:50:34 AM8/23/13
to ros-sig-...@googlegroups.com
Dear Isaac,

your hints were helpful. According to point 3), it was me who noted down the problem with _elementtree in the Wiki, but I forgot to describe the solution. I fixed it (see Wiki now). Now I can reproduce a successful installation up to rosdep update. I am going to have a look now for the measures Tully described and keep you informed ...

Best regards,

   Stefan

Stefan May

unread,
Aug 23, 2013, 10:48:57 AM8/23/13
to ros-sig-...@googlegroups.com
Dear Isaac,
Dear Tully,
Dear community,

I went for a ROS source installation with

./src/catkin/bin/catkin_make_isolated --install

At least, I got the following packages compiled:
~~ - catkin
~~ - genmsg
~~ - gencpp
~~ - genlisp
~~ - genpy
~~ - cpp_common
~~ - message_generation
~~ - message_runtime
~~ - mk
~~ - ros
~~ - ros_comm
~~ - rosbash
~~ - rosboost_cfg
~~ - rosbuild
~~ - rosclean
~~ - roscpp_traits
~~ - roscreate
~~ - rosgraph
~~ - roslang
~~ - roslaunch
~~ - roslisp
~~ - rosmake
~~ - rosmaster
~~ - rosmsg
~~ - rosnode
~~ - rosparam
~~ - rospy
~~ - rosservice
~~ - rostime
~~ - roscpp_serialization
~~ - rostopic
~~ - rosunit
~~ - rosconsole
~~ - roswtf
~~ - rostest
~~ - std_msgs
~~ - rosgraph_msgs
~~ - std_srvs
~~ - xmlrpcpp
~~ - roscpp

I needed to fix many issues with missing types or functions, but so far
so good. Now I got stuck in a boost-related issue. The binary boost-libs
provided by jaist as mentioned in the Wiki are not suitable for ROS. A
look in +BUILD_INFO shows dependencies to:

REQUIRES=/usr/lib/libc.so.12
REQUIRES=/usr/lib/libgcc_s.so.1
REQUIRES=/usr/lib/libm.so.0
REQUIRES=/usr/lib/libm387.so.0
REQUIRES=/usr/lib/libpthread.so.1
-> not existent

REQUIRES=/usr/lib/libstdc++.so.7
-> installed libstdc++.so.2.10.0 and libstdc��.so.2.2.10.0

I think, installing from source is necessary. catkin breaks e.g. for
rostest with boost-dependencies (see below).


Packages that I could not compile due to different reasons are:
### message_filters


### rospack
/root/catkin_workspace_root/src/rospack/src/rospack.cpp: In member
function 'bool
rospack::Rosstackage::exports_dry_package(rospack::Stackage*, const
std::string&, const std::string&, std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > >&)':
/root/catkin_workspace_root/src/rospack/src/rospack.cpp:1032: error: no
matching function for call to 'TiXmlElement::FirstChildElement(const
std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
/usr/pkg/include/tinyxml.h:664: note: candidates are: const
TiXmlElement* TiXmlNode::FirstChildElement() const
/usr/pkg/include/tinyxml.h:665: note: TiXmlElement*
TiXmlNode::FirstChildElement()
/usr/pkg/include/tinyxml.h:670: note: const
TiXmlElement* TiXmlNode::FirstChildElement(const char*) const
/usr/pkg/include/tinyxml.h:671: note: TiXmlElement*
TiXmlNode::FirstChildElement(const char*)
/root/catkin_workspace_root/src/rospack/src/rospack.cpp:1034: error: no
matching function for call to 'TiXmlElement::NextSiblingElement(const
std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'


### roslib
due to dependency to rospack


### rosout
problem of boost-libs as shown below


### topic_tools
again boost-libs


### rosbag
due to dependency to topic_tools



Could anybody help with these issues? Especially, the problem with
tinyxml. I think at least we need roslib to be compiled in order to
start roscore on a QNX system.

Best regards,

Stefan


### boost-libs error

+ cd /root/catkin_workspace_root/src/rostest
+ /usr/bin/env
PYTHONPATH=/root/catkin_workspace_root/install_isolated/lib/python2.7/site-packages:/root/catkin_workspace_root/build_isolated/rostest/lib/python2.7/site-packages:/root/catkin_workspace_root/install_isolated/lib/python2.7/site-packages
CATKIN_BINARY_DIR=/root/catkin_workspace_root/build_isolated/rostest
/usr/qnx650/host/qnx6/x86/usr/bin/python
/root/catkin_workspace_root/src/rostest/setup.py build --build-base
/root/catkin_workspace_root/build_isolated/rostest install
--prefix=/root/catkin_workspace_root/install_isolated
--install-scripts=/root/catkin_workspace_root/install_isolated/bin
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: warning: libstdc++.so.7,
needed by /usr/pkg/lib/libboost_signals.so, not found (try using -rpath
or -rpath-link)
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: warning: libm.so.0, needed
by /usr/pkg/lib/libboost_signals.so, not found (try using -rpath or
-rpath-link)
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: warning: libpthread.so.1,
needed by /usr/pkg/lib/libboost_signals.so, not found (try using -rpath
or -rpath-link)
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: warning: libc.so.12, needed
by /usr/pkg/lib/libboost_signals.so, not found (try using -rpath or
-rpath-link)
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__errno'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__readdir_r30'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to
`std::codecvt<wchar_t, char, __mbstate_t>::do_length(__mbstate_t&, char
const*, char const*, unsigned int) const'
/usr/pkg/lib/libboost_signals.so: undefined reference to
`std::_List_node_base::_M_unhook()'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_mutex_lock'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_mutex_destroy'
/usr/pkg/lib/libboost_signals.so: undefined reference to
`std::_List_node_base::_M_reverse()'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to
`std::codecvt<wchar_t, char, __mbstate_t> const&
std::use_facet<std::codecvt<wchar_t, char, __mbstate_t> >(std::locale
const&)'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__lstat50'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__clock_gettime50'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_thr_once'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to
`std::codecvt<wchar_t, char, __mbstate_t>::~codecvt()'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_cond_init'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_mutex_init'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_thr_getspecific'
/usr/pkg/lib/libboost_signals.so: undefined reference to
`std::_List_node_base::_M_hook(std::_List_node_base*)'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_cond_destroy'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__utime50'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_thr_keycreate'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_cond_timedwait'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__nanosleep50'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_thr_setspecific'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_cond_wait'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_cond_broadcast'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `typeinfo
for std::codecvt<wchar_t, char, __mbstate_t>'
/usr/pkg/lib/libboost_signals.so: undefined reference to `dl_iterate_phdr'
/usr/pkg/lib/libboost_regex.so: undefined reference to
`std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::overflow(int)'
/usr/pkg/lib/libboost_regex.so: undefined reference to
`std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::pbackfail(int)'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__readdir30'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__opendir30'
/usr/pkg/lib/libboost_thread.so: undefined reference to `__libc_thr_yield'
/usr/pkg/lib/libboost_filesystem.so: undefined reference to `__stat50'
/usr/pkg/lib/libboost_thread.so: undefined reference to
`__libc_mutex_unlock'
/usr/pkg/lib/libboost_signals.so: undefined reference to
`std::_List_node_base::_M_transfer(std::_List_node_base*,
std::_List_node_base*)'
cc: /usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld error 1
make[2]: ***
[/root/catkin_workspace_root/devel_isolated/rosout/lib/rosout/rosout]
Error 1
make[1]: *** [CMakeFiles/rosout.dir/all] Error 2
make: *** [all] Error 2
Command failed, exiting.
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ros-sig-embedded" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ros-sig-embedded/cak1-QNevgo/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Stefan May

unread,
Aug 24, 2013, 9:36:09 AM8/24/13
to ros-sig-...@googlegroups.com
Dear community,

I solved one of the problems by myself. The tinyxml-errors can be fixed
by adding ".c_str()" in rospack.cpp when a conversion error is reported.
At the end I ran into the same boost-libs problems for rospack than for
rostest. I hope this is the last barrier.

Does anybody has a suggestion on how to fix these errors?

Best regards,

Stefan

Stefan May

unread,
Aug 25, 2013, 3:15:18 PM8/25/13
to ros-sig-...@googlegroups.com
.. a few steps forward

boost-libs could be compiled from boost.org, preferable version 1.53. I
checked also version 1.52. which was ok. 1.54. needed too many
interventions.

With this version ros_comm can be compiled from source with some minor
modifications. The only packages that I could not compile are:
- message_filters
- topic_tools
- rosbag
message_filters and topic_tools complain about:
cc: unknown target 'gcc_ntox86+reloc+shared'
cc: targets available in /usr/qnx650/host/qnx6/x86/etc/qcc:
4.4.2,gcc_ntox86_acpp-ne
4.4.2,gcc_ntox86_gpp
4.4.2,gcc_ntox86_ecpp
4.4.2,gcc_ntox86_acpp
4.4.2,gcc_ntox86_ecpp-ne
4.4.2,gcc_ntox86 (default)
4.4.2,gcc_ntox86_cpp
4.4.2,gcc_ntox86_cpp-ne

rosbag is dependent on topic_tools.

Does anybody know how this is to be treated?

With the remaining packages I could do some testing.
roscore itself does not start. It complains about:

WARNING: local hostname 'dhcppc3' does not map to an IP address.
...
WARNING: ROS_MASTER_URI [http://192.168.1.36:11311] host is not set to
this machine

If found in the roslaunch script a command that is not executed properly:
socket.getaddrinfo(socket.gethostname(), 0, 0, 0, socket.SOL_TCP)
socket.gaierror: [Errno 91] servname not supported for ai_socktype

socket.gethostname() returns dhcppc3. This name can be resolved (I added
it in /etc/hosts). So, I do not know what is the problem with the
parameter SOL_TCP, SOCK_STREAM works.

rosmaster --core is executed without complaints. I can examine the
architecture with the rosnode command from a Ubuntu machine (rosnode
does not execute on QNX since rosbag is not compiled). In the end,
communication seems to work in principle. I hope that someone can help
with above described problems.

Best regards,

Stefan

Isaac Isao Saito

unread,
Aug 26, 2013, 4:28:14 AM8/26/13
to ros-sig-...@googlegroups.com
Herr Stefan,

great to hear that rosmaster runs on QNX!
Although I can't be much help for porting ROS to QNX, I'll be happy to
test in next month the building steps you're making (as I said before
we're planning to make distributable catkin via pkgsrc and I'll have
to test the build steps multiple times).

For updating wiki, I'm wondering if there might be a slight difference
between the environments we use, since you've experienced something
that worked for me didn't for you. So I would suggest duplicating
descrptions for those sections for now (probably mentioning like
"There are cases reported either or all of following steps work.
Please try both/all of options available" at the top of each section).

Best,

Isaac
>>> -> installed libstdc++.so.2.10.0 and libstdcüü.so.2.2.10.0
> You received this message because you are subscribed to the Google Groups
> "ros-sig-embedded" group.
> To unsubscribe from this group and stop receiving emails from it, send an

Stefan May

unread,
Nov 7, 2013, 10:03:18 AM11/7/13
to ros-sig-...@googlegroups.com
Dear all,

I've compiled the ros_comm sources on a QNX x86 host. Finally this is
solved. I can run rosmaster, so the communication with other nodes is
fine. But there are still some problems remaining with some python
scripts. roscore itself reports an error (see below). Does anybody know
how to deal with it. Is it QNX specific or a missing environment
variable, ...?

Best regards,

Stefan

# roscore
... logging to
/root/.ros/log/d9b7dff0-47bc-11e3-a047-77e4531a83aa/roslaunch-localhost-906211368.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Traceback (most recent call last):
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/roslaunch/__init__.py",
line 279, in main
p.start()
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/roslaunch/parent.py",
line 257, in start
self._start_infrastructure()
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/roslaunch/parent.py",
line 206, in _start_infrastructure
self._load_config()
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/roslaunch/parent.py",
line 121, in _load_config
self.config =
roslaunch.config.load_config_default(self.roslaunch_files, sel
f.port, verbose=self.verbose)
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/roslaunch/config.py",
line 415, in load_config_default
config.master.uri = rosgraph.network.create_local_xmlrpc_uri(port)
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/rosgraph/network.py",
line 295, in create_local_xmlrpc_uri
return 'http://%s:%s/'%(get_host_name(), port)
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/rosgraph/network.py",
line 280, in get_host_name
hostname = get_local_address()
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/rosgraph/network.py",
line 186, in get_local_address
addrs = get_local_addresses()
File
"/root/ros_catkin_ws/install_isolated/lib/python2.7/site-packages/rosgraph/network.py",
line 237, in get_local_addresses
local_addrs = [host[4][0] for host in
socket.getaddrinfo(socket.gethostname(
), 0, socket.AF_INET, 0, socket.SOL_TCP)]
gaierror: [Errno 9] servname not supported for ai_socktype
> <mailto:ros-sig-embedded%2Bunsu...@googlegroups.com>.
> To post to this group, send email to
> ros-sig-...@googlegroups.com
> <mailto:ros-sig-...@googlegroups.com>.
> Visit this group at http://groups.google.com/group/ros-sig-embedded.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ros-sig-embedded" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ros-sig-embedded/cak1-QNevgo/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
Reply all
Reply to author
Forward
0 new messages