Difference between revisions of "ROS summary"
(→Gazebo on Groovy) |
(→Gazebo on Groovy) |
||
Line 185: | Line 185: | ||
::In this case the namespace could be wrong, try to specify the "gazeborver" namespace at the end of your spawing command, e.g.: | ::In this case the namespace could be wrong, try to specify the "gazeborver" namespace at the end of your spawing command, e.g.: | ||
:::<code> rosrun gazebo spawn_model -file object.urdf -urdf -model my_object -gazebo_namespace gazeborver </code> | :::<code> rosrun gazebo spawn_model -file object.urdf -urdf -model my_object -gazebo_namespace gazeborver </code> | ||
+ | |||
+ | * When trying to spawn a model in gazebo, following the tutorial, you receive an error like this: | ||
+ | ::: <code>Invalid <param> tag: Cannot load command parameter [table_description]: no such command [/opt/ros/groovy/share/xacro/xacro.py /opt/ros/groovy/stacks/simulator_gazebo/gazebo_worlds/objects/table.urdf.xacro]. </code> | ||
+ | :According to [http://answers.gazebosim.org/question/1067/ros-groovy-gazebo-cannot-spawn-objects/ this discussion] gazebo tutorials on the ROS website are outdated. It seems to be preferable to follow [http://gazebosim.org/wiki/Tutorials Gazebo's tutorials], keeping in mind what is the version of Gazebo included in the installed distribution of ROS. [http://answers.gazebosim.org/question/854/error-loading-sdf-in-gazebo-131/ This discussion] proposes a workaround to use the models of Gazebo included in Groovy (not tested) and [http://answers.gazebosim.org/question/60/tutorial-for-simple-urdf-models/ this one] cites some model that seem to be working with Groovy's Gazebo (not tested). |
Revision as of 15:12, 6 March 2013
This page is dedicated to experienced ROS users. Its purpose is to provide a brief summary of the most useful commands and configurations for ROS and for the external programs, with few additional explanations.
This page should not be used to provide general-purpose information about ROS or its elements, which is the task of ROS HOWTO and its secondary AIRWiki pages (e.g., ROS packages, ROS commands or ROS components).
Please note that some of the most commonly used commands are already described in a condensed form in the ROS Official Cheat Sheet.
Contents
ROS and IDE initial setup
Configure your environment
If you followed the ROS tutorial to configure your environment, the variable $ROS_PACKAGE_PATH should be set. This can be easily verified by check if the command echo $ROS_PACKAGE_PATH
returns an output similar to:
-
/home/your_user_name/fuerte_workspace/sandbox:/opt/ros/<ROS DISTIBUTION>/share:/opt/ros/<ROS DISTIBUTION>/stacks
If you use a different path (e.g.: ~/eclipse_workspace) you should add it to the $ROS_PACKAGE_PATH variable. The simplest way to achieve this is to edit the .bashrc file located in your home directory and add the line
-
export ROS_PACKAGE_PATH=~/eclipse_workspace:${ROS_PACKAGE_PATH}
NOTE: Please be sure to add this command AFTER the following line (that you should have added to your .bashrc, according to the tutorial) or you will get an error running make eclipse-project:
-
source /opt/ros/<ROS DISTIBUTION>/setup.bash
Eclipse
- To reuse your shell environment it is advisable to launch Eclipse with the following command:
-
bash -i -c /usr/lib/eclipse/eclipse
- To let ROS create the Eclipse project files you can use the following command:
make eclipse-project
- Note that if you change anything to your manifest.xml, you will have to run this script again, which will overwrite your Eclipse project file and thereby reverting all manual changes to the project settings. Please refer to this page if you need further information.
- To add an existing project to Eclipse select File --> Import --> General --> Existing Projects into Workspace, select the project's root directory and be sure that the "Copy projects into workspace" option is NOT selected.
Package management
ROS packages can be managed using your linux distribution package manager and/or with the built-in ROS package manager.
ROS package environment
- To initialize the ROS package management environment:
(as root) rosdep init
- To update the package list:
rosdep update
ROS package installation
- To find a package:
- browse to this page to browse a list of available packages.
- To check if a ROS package or stack is installed, use the following commands:
rospack find package_name
- rosstack find [stack_name]
- If you get an error, install the stack that contains the package with the package manager of your linux distribution (e.g.:
sudo apt-get install ros-distribution_release_name-stack_name
), then check again if rospack can find the package. If not, install it with the command:
(as root) rosdep install package_name
New package creation
This command creates a new package in the current directory:
roscreate-pkg package_name package_dependency_1 package_dependency_2 package_dependency_3 ...
Please note that package dependencies can be explicitly specified when the package is created, but they can also be manually added afterwards to the manifest.xml file or with the rospack command. Take a look at this page if you need further information.
CMakeLists.txt
Official pages:
Full description of the syntax
Examples.
cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
# Set the build type. Options are:
# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage
# Debug : w/ debug symbols, w/o optimization
# Release : w/o debug symbols, w/ optimization
# RelWithDebInfo : w/ debug symbols, w/ optimization
# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries
# Usage:
# set(ROS_BUILD_TYPE build_type)
set(ROS_BUILD_TYPE Debug)
rosbuild_init()
# Set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# Set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# Uncomment if you have defined messages
#rosbuild_genmsg()
# Uncomment if you have defined services
#rosbuild_gensrv()
# **** Common commands for building c++ executables and libraries ****
# To add an executable cpp file:
# Usage:
# rosbuild_add_executable(${PROJECT_NAME} executable_path)
rosbuild_add_executable(test_read_map src/test_read_map.cpp)
# To add a library:
# Usage:
# rosbuild_add_library(${PROJECT_NAME} libraries_path)
rosbuild_add_library(map
src/map/map_cspace.cpp
src/map/map_draw.c)
# To link a library to an executable file:
# Usage:
# target_link_libraries(${PROJECT_NAME} library_name)
target_link_libraries(test_read_map map)
# To add boost directories:
# rosbuild_add_boost_directories()
# To link boost:
# rosbuild_link_boost(${PROJECT_NAME} thread)
# To add the dynamic reconfigure api:
# rosbuild_find_ros_package(dynamic_reconfigure)
# include(${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake)
# gencfg()
# rosbuild_add_executable(dynamic_reconfigure_node src/dynamic_reconfigure_node.cpp)
# rosbuild_add_executable(FIRST_dynamic_reconfigure_node src/FIRST_dynamic_reconfigure_node.cpp)
Makefile
Be sure that the following line is present in the Makefile in order for the command make eclipse-project
to work:
include $(shell rospack find mk)/cmake.mk
Manifest.xml
<package>
<description brief="brief description of your package">
[write here your package name]
</description>
<author>Your name</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url>http://ros.org/wiki/package_name</url>
<depend package="package dependance 1"/>
<depend package="package dependance 2"/>
....
</package>
ROS commands
ROS Filesystem
- To change directory directly to a package or stack directory:
roscd package_name
or
roscd stack_name
External programs
rviz (ROS visualization system)
- To open rviz you will need roscore running in background (execute
roscore
in a different shell) and then run the following command:
rosrun rviz rviz
- The rviz interface will pop up, to visualize something published by a node you will have to
- Add a type by clicking Add and selecting a display type (e.g.: poing cloud)
- Set the topic that you want to listen (the one specified in the node that is publishing)
- Set in the Global Options menu the desired Fixed Frame (typically
/map
)
Known BUGS
Gazebo on Groovy
- Using Gazebo on Groovy you could encounter the following error:
Error [Rendering.cc:37] Failed to load the Rendering engine subsystem unable to find OpenGL rendering system. OGRE is probably installed incorrectly. Double check the OGRE cmake output, and make sure OpenGL is enabled
- This can be due to two different issues:
- The OGRE's package is not correctly installed: in this case install ogre with
sudo apt-get install ros-groovy-visualization-common
- The OGRE_RESOURCE_PATH variable is not correctly set in ROS: to solve this problem you will have to modify the
"export OGRE_RESOURCE_PATH"
in/opt/ros/groovy/stacks/simulator_gazebo/gazebo/scripts/setup.sh
(potentially also in/opt/ros/groovy/stacks/simulator_gazebo/gazebo/setup.bash
) with the correct OGRE path. This is usually located in one of the following folders:
-
/usr/lib/OGRE
-
/usr/lib/x86_64-linux-gnu/OGRE-1.7.4
-
/usr/lib/i386-linux-gnu/OGRE-1.7.4
-
- The OGRE's package is not correctly installed: in this case install ogre with
- Further information please refer to Gazebo answers
- When trying to spawn a model in gazebo you could be stuck with the following message forever:
-
waiting for service /gazebo/spawn_urdf_model
-
- In this case the namespace could be wrong, try to specify the "gazeborver" namespace at the end of your spawing command, e.g.:
rosrun gazebo spawn_model -file object.urdf -urdf -model my_object -gazebo_namespace gazeborver
- When trying to spawn a model in gazebo, following the tutorial, you receive an error like this:
-
Invalid <param> tag: Cannot load command parameter [table_description]: no such command [/opt/ros/groovy/share/xacro/xacro.py /opt/ros/groovy/stacks/simulator_gazebo/gazebo_worlds/objects/table.urdf.xacro].
-
- According to this discussion gazebo tutorials on the ROS website are outdated. It seems to be preferable to follow Gazebo's tutorials, keeping in mind what is the version of Gazebo included in the installed distribution of ROS. This discussion proposes a workaround to use the models of Gazebo included in Groovy (not tested) and this one cites some model that seem to be working with Groovy's Gazebo (not tested).