Python 3 in ROS Indigo on Raspberry Pi
I apologize for posting this question as python3 is not entirely supported for ROS 1. I am using a python3 library (it uses int.from_bytes and int.to_bytes) in my project. I have successfully installed python3 on Raspberry Pi as well. I need to run ROS (Indigo) node on this board. I found brief instructions for python 3 in ROS Indigo here. Unfortunately, it didn't work quite well, or I missed some step.
The answer referred above says to create a virtual environment by using virtualenv -p /usr/bin/python3
and then under it run pip install rospkg
. It didn't work. Please see terminal below-
(whill) pi@raspberrypi:~ $ ipython
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.11.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import rospy
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-fb60b5b51009> in <module>
----> 1 import rospy
ModuleNotFoundError: No module named 'rospy'
Next, I followed the official Wiki page for installing ROS Indigo on the Raspberry Pi here. Please note that all these instructions were executed inside the python3 virtual environment.
From ROS Indigo, I need only publishers and subscribers of standard ROS messages. Therefore I decided to install ROS-Comm
by using the following commands-
(whill) pi@raspberrypi:~/ros_catkin_ws $ /home/pi/whill/bin/rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-ros_comm-wet.rosinstall
(whill) pi@raspberrypi:~/ros_catkin_ws $ /home/pi/whill/bin/wstool init src indigo-ros_comm-wet.rosinstall
I also installed libconsole-bridge-dev
as stated in the Wiki page. The remaining dependencies were resolved by running rosdep-
(whill) pi@raspberrypi:~/ros_catkin_ws $ /home/pi/whill/bin/rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:buster
The above took a while to finish. Finally, the catkin workspace was build as shown below-
(whill) pi@raspberrypi:~/ros_catkin_ws $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2
Base path: /home/pi/ros_catkin_ws
Source space: /home/pi/ros_catkin_ws/src
Build space: /home/pi/ros_catkin_ws/build_isolated
Devel space: /home/pi/ros_catkin_ws/devel_isolated
Install space: /opt/ros/indigo
Additional CMake Arguments: -DCMAKE_BUILD_TYPE=Release
Additional make Arguments: -j2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~ traversing 48 packages in topological order:
~~ - catkin
~~ - genmsg
~~ - gencpp
~~ - genlisp
~~ - genpy
~~ - cmake_modules
~~ - cpp_common
~~ - message_generation
~~ - message_runtime
~~ - mk
~~ - ros
~~ - ros_comm
~~ - rosbash
~~ - rosboost_cfg
~~ - rosbuild
~~ - rosclean
~~ - roscpp_traits
~~ - roscreate
~~ - rosgraph
~~ - roslang
~~ - rosmake
~~ - rosmaster
~~ - rosmsg
~~ - rospack
~~ - roslib
~~ - rosparam
~~ - rospy
~~ - rosservice
~~ - rostime
~~ - roscpp_serialization
~~ - roslaunch
~~ - rosunit
~~ - rosconsole
~~ - roslz4
~~ - rosbag_storage
~~ - rostest
~~ - std_msgs
~~ - rosgraph_msgs
~~ - std_srvs
~~ - xmlrpcpp
~~ - roscpp
~~ - rosout
~~ - message_filters
~~ - rosnode
~~ - rostopic
~~ - roswtf
~~ - topic_tools
~~ - rosbag
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The packages or cmake arguments have changed, forcing cmake invocation
==> Processing catkin package: 'catkin'
==> Creating build directory: 'build_isolated/catkin'
==> cmake /home/pi/ros_catkin_ws/src/catkin -DCATKIN_DEVEL_PREFIX=/home/pi/ros_catkin_ws/devel_isolated/catkin -DCMAKE_INSTALL_PREFIX=/opt/ros/indigo -DCMAKE_BUILD_TYPE=Release -G Unix Makefiles in '/home/pi/ros_catkin_ws/build_isolated/catkin'
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info ...
I'm not saying it can't be solved, but as an observation: you're using an EOL version of ROS on an OS it was never released for, which uses versions of dependencies Indigo was never built with, trying to use a Python version Indigo was also not written for nor tested with.
My suggestion would be to take out some of these variation points, such as the Indigo requirement. Why do you need to use Indigo? Going to Melodic would make all of this much easier.
@gvdhoom: Thank you very much. I understand your concerns. The official Wiki page for installing ROS Indigo on the Raspberry Pi shows Raspbian Wheezy and Jessie OS version. I should use anyone from them. The next thing about the ROS version is that ROS Master is running on Indigo. Therefore I am sticking to Indigo. May I use other ROS in this situation? If yes, then I should choose ROS Kinetic since this is the latest one mentioned in the website.