Errata

Programming Robots with ROS

Errata for Programming Robots with ROS

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Other Digital Version

I followed the second solution (cloning) to the first errata (missing basics directory) and got several error message after catkin_make:
For example:
CMake Error at /opt/ros/jade/share/catkin/cmake/catkin_workspace.cmake:116 (add_subdirectory):
The source directory

/home/ubuntu/catkin_ws/src/basics/code/tortoisebot

does not contain a CMakeLists.txt file.

Same for:
/home/ubuntu/catkin_ws/src/basics/code/cougarbot
/home/ubuntu/catkin_ws/src/basics/code/mapping

Anonymous  Feb 12, 2016 
Chapter 4
In section Checking That Everything Works as Expected

rosrun basics service_server.py

returned and error that basics.srv could not be found.

It drove me nuts. I reviewed the chapter multiple times, and searched with google for the errors. I looked at the code example for rosbook on github and that made it worse because it CMakeLists was so much different, and there was no packages.xml.

So I decided to try the tutorials on wiki.ros.org

I found that once I performed the command

catkin_make install

Then suddenly the command from this chapter / section worked.
rosrun basics service_server.py

Started and I could use rosservice list to see that it was working.

I listed this as serious because if I had not found the solution on the wiki, I felt as if I could NOT continue reading the book.

Michael Caughey  Aug 19, 2017 
Chapter 2 on
Through out the beginning of the book

In chapter 2 it shows how to make a package my_awesome_code. Then through out the book it refernces a package basics, but NEVER explains that you should create the package basics, or be working in it.

The book assume that you will trouble shoot the problems and sort it all out. In chapter tree there is even a note that it assumes you can create a package and sort it out. Then just leaves you hanging later when you cannot figure out why the package basics is being used or referenced. Is Basics part of ROS? did I miss creating it? Should I create it? Can I use my own?

I can tell you as a reader of many technical books over the past 25 yrs, this is the more frustrating than reading a book that is already out of date when it is published.

All you need to do is rater than create my_awesome_code in chapter two, create package basics.

That's it and I would not have lost a half a day.

Michael Caughey  Aug 19, 2017 
Other Digital Version 32
Example 301. topic_publisher.py

To avoid rosrun warning, you should add a queue_size. Line "pub = rospy.Publisher(' counter', Int32)" should be replaced with "pub = rospy.Publisher(' counter', Int32, queue_size = 10)" for example. Actual queue size is up to the user.

Ben D  Nov 11, 2018 
Printed Page 42
6th paragraph

The code that is available on GitHub is confusing. In looking at the confirmed Errata for page 34, is gives a suggestion on how to link to basics directory (creation of which is not clear in the text - that should have been created previously as another erratum has suggested).

In looking at the examples, it has a "manifest.xml" not a "package.xml" file, and the CMakeLists.txt has a different format than shown in the book. After some googling, it is apparent that the example code was designed for rosbuild, not catkin. This really makes the examples less helpful as a reference.

Keith Woeltje  Oct 09, 2017 
Printed Page 79
third paragraph

The discussion of non-holonomic and holonomic systems is incorrect. See the Wikipedia entry, for example: https://en.wikipedia.org/wiki/Nonholonomic_system.

matt  Oct 05, 2017 
PDF Page 96
End

The chapter should mentioned that a build dependency and runtime dependency on actionlib_msgs need to be included in the package.xml file. This kind of information was mentioned in the previous chapters, but actionlib_msgs is a new concept, and it was not mentioned. This is not consistent.

Richard Lee  Aug 20, 2016 
ePub Page 99

Declaration of build_depends and run_depends not specified for the package.xml file for actions.

To build the Timer.action I needed to add the following lines into the package.xml file. This step was specified for both the service and custom topic but not for the action:

<build_depend>actionlib</build_depend>
<build_depend>actionlib_msgs</build_depend>
<run_depend>actionlib</run_depend>
<run_depend>actionlib_msgs</run_depend>

Dave  Feb 15, 2016 
Printed Page 100
1st paragraph

"W must include..." should be "We must include...". 'e' is missing.

Tuncay Aksungurlu  May 07, 2016 
Printed Page 100
after the first line on top of the page

After the following line:
user@hostname$ cd ~/wanderbot_ws/src

these three command lines are missed:
------------------missed-------------------------------------
user@hostname$ cd ~/wanderbot_ws
user@hostname$ catkin_make
user@hostname$ source devel/setup.bash
-----------------------------------------------------------------

then you can continue with the command in the second line:

user@hostname$catkin_create_pkg wanderbot rospy geometry_msgs sensor_msgs



Luca Di Taranto  Nov 24, 2016 
Printed Page 101
point 6

Shouldn't it be:
"Without this call to 'rate.sleep()' ..."

instead of:
"Without this call to 'rospy.sleep()' ..." ?

Anonymous  Jun 04, 2017 
Printed Page 107
while loop

There is technically nothing wrong with the logic of the script; however, it doesn't appear to take into account the dynamics of the robot (at least when launched in the turtlebot_world). With a 0.8 meter range threshold and a linear speed of 1 m/s, the robot will crash before it can perceive and react to an object in its path.

Anonymous  Sep 19, 2016 
Printed Page 108
After Paragraph 4

.., we can make wander.py executable and run it:

user@hostname$ chmod +x red_light_green_light.py

instead of

user@hostname$ chmod +x wander.py

Aditya Patil  Jan 31, 2016 
Other Digital Version 123

There needs to be a space between _angular_scale:=1.0 and _linear_accel:=1.0 in the command line example.

user@ hostname $ ./ keys_to_twist_with_ramps.py _linear_scale: = 0.5\ _angular_scale: = 1.0_linear_accel: = 1.0 _angular_accel: = 1.0

(Kindle Edition)

Anonymous  Aug 02, 2016 
Printed Page 126
last but one para- rviz

We have four terminals open: 1.(..) , 2.(..), 3.keys_to_teleop_with_rate(s).py instead of keys_to_teleop_with_rate.py

Aditya Patil  Jan 31, 2016 
Printed Page 137
First sentence of first paragraph.

Example 9-1. map.yaml file lists the map image as filetype pgm but the text description on pg 137 the file type is png.

Anonymous  Sep 20, 2016 
Printed Page 137
last paragraph, 5th line

"... you don't want to the robot to drive through ..."

should be:

"... you don't want the robot to drive through ..."

Anonymous  Jun 05, 2017 
PDF Page 147
1

In chapter 7.Wander-bot. Creating a package everything is OK until
last command
user@hostname$ ./red_light_green_light.py cmd_vel:=cmd_vel_mux/input/teleop
dosn't work
Should I run catkin_make before it?

lzrnk  Oct 01, 2016 
PDF Page 161
Example 8.2

In Example 8.2:

key_mapping = { 'w': [ 0, 1], 'x': [0, -1],
'a': [-1, 0], 'd': [1, 0],
's': [ 0, 0] }

For 'a' to turn left and 'd' turn right, we should set 'a = [1, 0], d = [-1,0]' since the rotation is counter-clock wise.

Anonymous  Jul 18, 2016 
PDF Page 173
1

There is no the script
keys_to_teleop_with_rates.py

Anonymous  Oct 04, 2016 
Printed Page 174
top of page

it says: *cd* ~/chessbot
it should say: cd ~/chessbot

Anonymous  Jun 27, 2016 
Printed Page 180
End of r2_hand.py example code

The code there should probably end in an invocation:
moveit_commander.roscpp_shutdown()
Like all the other examples.

Anonymous  Jun 29, 2016 
Printed Page 183
Example 11-17 caption

The Example 11-17 caption lists the file as "chess_board.sdf", but the code in example 11-9 reads the file as "chessboard.sdf". The download of the ROS example code git repo uses chessboard.sdf.

Anonymous  Jun 29, 2016 
PDF Page 193
Last paragraph

When explaining the ROS map images in Figure 9-4, the book writes:

This is because the default size of ROS maps is 200 m × 200 m, with a cell size of 5 cm (that means that the image size is 2,000 x 2,000 pixels).

The correct size is 4,000 x 4,000 pixels.

Anonymous  Jul 21, 2016 
Printed Page 199
Command line prompt

The book tells the reader to use:

user@hostname$ roslaunch followbot course.launch

but neglects to tell the reader where to find the followbot package. The package needs to be cloned from https://github.com/osrf/rosbook/tree/master/followbot.

Anonymous  Jul 01, 2016 
ePub Page 200
example 12-3

The given lower and upper bounds for yellow do not capture the line:

lower_yellow = numpy.array([50, 50, 170])
upper_yellow = numpy.array([255, 255, 190])

Instead I successfully used:

lower_yellow = numpy.array([20, 100, 100])
upper_yellow = numpy.array([30, 255, 255])

cerebric  Jan 10, 2020 
PDF Page 215
Code at the top of page, lines 3 & 4

Should be:

with sm:
sm.add(...)
sm.add(...)

instead of:

with sm:
StateMachine.add(...)
StateMachine.add(...)

Francisco Coelho  Jun 05, 2017 
Printed Page 224
final paragraph, 1st sentence

Typo: "wiht" should be "with".

Anonymous  Jul 01, 2016 
Printed Page 225
All

This chapter has a good number of errors/problems. Most of them are noted in the github repository's Issues database for the book:
https://github.com/osrf/rosbook/issues

Particularly of use for Chapter 14 are Issues #22 & #23.

Anonymous  Jul 12, 2016 
Printed Page 227
3rd text (non-command) paragraph

The paragraph starts out: "Because the models directory is referenced by the GAZEBO_MODEL_PATH environment variable...". But the "models" directory isn't referenced by that variable, the containing "stockroom_bot" directory is the lowest directory defined in that variable. The directory defined in the "sb" alias should include the "models" subdirectory -- otherwise the later gazebo command (on page 236) will fail.

Anonymous  Jul 12, 2016 
Printed Page 232
last paragraph, 3rd line

"within curly braces following an at sight" should be "within curly braces following an at sign".

Anonymous  Jul 12, 2016 
Printed Page 234
Item 10

"uri>" should be "<uri>".

Anonymous  Jul 12, 2016 
Printed Page 236
2nd command

The "gazebo aisle.world" will still bring up the world correctly. However, it doesn't start a rosmaster, nor does it start the gazebo/delete_model service. So, the later "stock_products.py" script will hang waiting for that service to come up (which it never will).

Instead, use:
roscore &
rosrun gazebo_ros gazebo aisle.world

Anonymous  Jul 12, 2016 
Printed Page 240
Mapping command

The mapping command should use “odom”, not “odom_combined”.

Anonymous  Jul 12, 2016 
Printed Page 244
XML, Item #3

The final two “arg” params (annotated with bubble “3”) are missing the “/“ in their close-tags. This is true also in the git repo.

Anonymous  Jul 12, 2016 
Printed Page 246
Final Note on Page

It would be useful here to add that any ALVAR tags that the robot did NOT detect will be shown as disconnected nodes in the graph.

Anonymous  Jul 12, 2016 
Printed Page 248
Example 14-15 pick-up-item.py

The file appears to be correct but it doesn' work.
Launching the file i have the following error:
........
[ INFO] [1486986352.172547659, 731.212000000]: Ready to take MoveGroup commands for group arm.
[ INFO] [1486986352.172694111, 731.213000000]: Replanning: yes
[ INFO] [1486986377.493008259, 742.747000000]: ABORTED: No motion plan found. No execution attempted.
............



The file "pick_up_item.py" works fine,
Can you help please?
Thanks a lot.

arnaldo armida  Feb 13, 2017 
Printed Page 248
Example 14-15: pick_up_item.py

moveit find no path for arm to pick up item. solution: modify the parameter "longest_valid_fragment_section" in the file ompl_planning.yaml from 0.05 to 0.02

Thomas  Aug 26, 2020 
Printed Page 264
bottom

The callback function:

def save_value(value)
with lock:
angle = value * 2 * pi / 100.0

will assigning the new value to the local variable "angle" which will not be accessible in the main loop. The function needs to declare that "angle" is a global variable::

def save_value(value)
global angle
with lock:
angle = value * 2 * pi / 100.0

Ron Goldman  Apr 30, 2017 
Printed Page 332
last paragraph

"... that controls all of of our robots's ..."

One "of" is enough.

Anonymous  Jun 08, 2017 
Printed Page 337
last line

End of the last line is:
"... [1.0, 0.0]}]} -1' ..."

Should be:
"... [1.0, 0.0]}]}' -1 ..."
like on page 334.

Anonymous  Jun 08, 2017 
PDF, ePub, Mobi Page 21901
text

TYPO:

Current
This is usually acheived by giving the robot a map of the world, a starting location, and a goal location.

Suggested
"This is usually acheived by giving the robot a map of the world, a starting location," should be "This is usually achieved by giving the robot a map of the world, a starting location,"

Anonymous  Sep 17, 2019