We considered having a separate pull request for Rviz during last week’s meeting so that other developers can incorporate it into other exercises more easily. We decided to implement this with Machine Vision exercise because Pick And Place exercise was already integrated with Rviz. As a result, I’ll need to first create a pull request for Machine vision exercise moved to web-templates without Rviz, and then another pull request to add Rviz as a feature.
So the Machine Vision exercise was the first thing I did this week. But, once again, I came into the same error of not being able to locate the nodes i.e.
ERROR: cannot launch node of type [pcl_filter/pcl_filter_server]: Cannot locate node of type [pcl_filter_server] in package [pcl_filter]. Make sure file exists in package path and permission is set to executable (chmod +x). Other than that, there were other transform errors that are easily overlooked, but when run in the container, they appear in the terminal frequently, which isn’t ideal. All of the errors are depicted in the image below:
According to the error, the system wasn’t able to locate the nodes. According to this answer, sourcing the workspace resolves the problem, we reasoned that if we could source all of the terminals at the start of the container’s execution, the error would be fixed. Normally, this is accomplished by adding source to the bashrc file, but because each command in Docker runs a different sub-shell, the environment variables are not saved, and the
.bashrc file is not sourced. (see this answer).
In order to address this issue, we can use
ros_entrypoint.sh which will allow us to execute the commands for each new sub-shell(see this discussion). Therfore I created a
radi-entrypoint.sh and added all the source commands for ROS into it.
start.sh was modified as follows:
#!/usr/bin/env bash # This file is intended to be run from the root # of the Docker container # radi-entrypoint's primary purpose is to source the ROS setup files. source radi-entrypoint.sh # Start the Django server. Load the list of exercises from db.sqlite3 python3 RoboticsAcademy/manage.py runserver 0.0.0.0:8000 & # Start RADI python3.8 manager.py
We also need ROS environment sourced inside the bash terminal as the console would be used by the student.
The only mention of
~/.bashrc inside the Dockerfile is in the following layer-
RUN echo 'source /radi-entrypoint.sh' >> ~/.bashrc
After re-building the image, all of the sub-terminals were sourced at the same time, eliminating the need for external sourcing. The bad news was that the same problem was still appearing when running the Mobile Manipulation exercises.
The ROS interface stack PCL (Point Cloud Library). For 3D applications using n-D Point Clouds and 3D geometry processing in ROS, PCL-ROS is the preferred bridge. The PCL filter utilised in Industrial Robots, on the other hand, is a proprietary design. As a result, we won’t be able to just install PCL filters and eliminate the issues. One thing to keep in mind is that, like cob scan unifier, this package generates some warnings when using catkin build. I suspect that this is causing the difficulty in locating the nodes within the packages. As a result, in the following weeks, I’ll strive to resolve these warnings.
LibGazebo ROS Moveit Planning Scene
This is a model plugin which broadcasts MoveIt PlanningScene messages so that the planning scene stays up-to-date with the world simulation. This is useful if you want to “fake” perfect perception of the environment. Yiia found some resources related to
libgazebo_ros_moveit_planning_scene. One of them was describes the function of this plugin(see this) and the other was a pull request for adding that plugin in kinetic devel. We set up the workspace and installed the plugin. Finally, the missing plugin error was fixed, however it came with a slew of new issues. Yijia recommended that I uninstall the redundant plugins that were installed during the installation of this plugin because they can conflict with the current custom plugins, causing the issues.