Git Product home page Git Product logo

kobuki_core's Introduction

kobuki_core's People

Contributors

bit-pirate avatar clalancette avatar corot avatar jakan2 avatar jihoonl avatar mdhorn avatar mskim8717 avatar nikolausdemmel avatar stonier avatar vrabaud avatar woshidag avatar yhju avatar zklapow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

kobuki_core's Issues

Cliff sensor modifications

Conversion

Currently Kobuki outputs a human-_un_friendly measurement for the distance to the floor in case a cliff is detected (see kobuki_msgs/CliffEvent -> bottom).

The current output is the A/D-value of the sensor (Integer, 0 - 4095) and doesn't allow the users to related to an actual distance (e.g. in meters).

I suggest we add a conversion to the driver to output the mesured distance in meter.

Threshold

Currently thresholded at 8cm in firmware, too much for turtlebot. 4cm better.

Details

Conversion : put a lookup table in kobuki driver and publish both analog and converted values (converted will lose accuracy)

Generate doxygen pages

Don't worry about publishing the pages on github.io until #6.

Victory Conditions

  • Valid Doxyfile and Makefile exist to manually trigger builds → #24

[kobuki_node] can't compile with -Werror due to GNU warning on major

It looks like the last commit introduced a regression on armv7, when trying to build with -Werror.

Compiler:

c++ (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Console output below:

In file included from /root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/firmware.hpp:25:0,
                 from /root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:14:
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/../version_info.hpp:57:13: error: In the GNU C Library, "major" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "major", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "major", you should undefine it after including <sys/types.h>. [-Werror]
   static int major(const uint32_t &version) {
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/firmware.hpp:25:0,
                 from /root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:14:
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/../version_info.hpp:61:13: error: In the GNU C Library, "minor" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "minor", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "minor", you should undefine it after including <sys/types.h>. [-Werror]
   static int minor(const uint32_t &version) {
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/../version_info.hpp:73:13: error: In the GNU C Library, "major" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "major", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "major", you should undefine it after including <sys/types.h>. [-Werror]
     ss << major(version) << "." << minor(version) << "." << patch(version);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/../version_info.hpp:73:13: error: In the GNU C Library, "minor" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "minor", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "minor", you should undefine it after including <sys/types.h>. [-Werror]
In file included from /root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:14:0:
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/firmware.hpp:54:13: error: In the GNU C Library, "major" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "major", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "major", you should undefine it after including <sys/types.h>. [-Werror]
   int majorVersion() const { return VersionInfo::major(data.version); }
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:14:0:
/root/kobuki_ws/src/kobuki_core/src/driver/../../include/kobuki_core/packets/firmware.hpp:55:13: error: In the GNU C Library, "minor" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "minor", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "minor", you should undefine it after including <sys/types.h>. [-Werror]
   int minorVersion() const { return VersionInfo::minor(data.version); }
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:106:13: error: In the GNU C Library, "major" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "major", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "major", you should undefine it after including <sys/types.h>. [-Werror]
     int recommended_major_version = VersionInfo::major(version);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/kobuki_ws/src/kobuki_core/src/driver/firmware.cpp:107:13: error: In the GNU C Library, "minor" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "minor", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "minor", you should undefine it after including <sys/types.h>. [-Werror]
     int recommended_minor_version = VersionInfo::minor(version);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors

ISO C++11 requires at least one argument for the "..." in a variadic macro

Hi,

I'm trying to compile kobuki_core for ros2 humble.

I git cloned the package list

https://github.com/stonier/sophus <-  release/1.3.x
https://github.com/stonier/ecl_tools
https://github.com/stonier/ecl_lite
https://github.com/stonier/ecl_core
https://github.com/kobuki-base/cmd_vel_mux
https://github.com/kobuki-base/kobuki_core
https://github.com/kobuki-base/kobuki_ros
https://github.com/kobuki-base/kobuki_ros_interfaces

Then I issued colcon build and got an error when compiling kobuki_core

--- stderr: kobuki_core
In file included from /home/ubuntu/ros2_ws/install/sophus/include/sophus/types.hpp:7,
                 from /home/ubuntu/ros2_ws/install/sophus/include/sophus/rotation_matrix.hpp:9,
                 from /home/ubuntu/ros2_ws/install/sophus/include/sophus/so3.hpp:6,
                 from /home/ubuntu/ros2_ws/install/sophus/include/sophus/se3.hpp:6,
                 from /home/ubuntu/ros2_ws/install/ecl_linear_algebra/include/ecl/linear_algebra/sophus.hpp:15,
                 from /home/ubuntu/ros2_ws/install/ecl_linear_algebra/include/ecl/linear_algebra.hpp:25,
                 from /home/ubuntu/ros2_ws/install/ecl_geometry/include/ecl/geometry/pose2d.hpp:21,
                 from /home/ubuntu/ros2_ws/install/ecl_geometry/include/ecl/geometry.hpp:20,
                 from /home/ubuntu/ros2_ws/src/kobuki_core/src/driver/../../include/kobuki_core/modules/diff_drive.hpp:23,
                 from /home/ubuntu/ros2_ws/src/kobuki_core/src/driver/diff_drive.cpp:14:
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:206:45: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  206 |     SOPHUS_ENSURE(is_valid_, "must be valid");
      |                                             ^
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: note: in definition of macro ‘SOPHUS_ENSURE’
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:211:45: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  211 |     SOPHUS_ENSURE(is_valid_, "must be valid");
      |                                             ^
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: note: in definition of macro ‘SOPHUS_ENSURE’
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:216:45: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  216 |     SOPHUS_ENSURE(is_valid_, "must be valid");
      |                                             ^
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: note: in definition of macro ‘SOPHUS_ENSURE’
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:221:45: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  221 |     SOPHUS_ENSURE(is_valid_, "must be valid");
      |                                             ^
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: error: ISO C++11 requires at least one argument for the "..." in a variadic macro [-Werror]
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
      |                                                                     ^~~~~~~~
/home/ubuntu/ros2_ws/install/sophus/include/sophus/common.hpp:139:69: note: in definition of macro ‘SOPHUS_ENSURE’
  139 |       SOPHUS_DEDAULT_ENSURE_FAILURE_IMPL(SOPHUS_FUNCTION, __FILE__, __LINE__, \
.............

If I'm not wrong, due to the ecl_enable_cxx14_compiler() , the CMAKE_CXX_STANDARD is set to C++14.

I do not know if this is the correct fix , but then I added set(CMAKE_CXX_STANDARD 20) just after the ecl_enable_xxxxx in the kobuki_core/CMakeLists.txt and then the compilation succeded.

It has something to do with variadic macros and I blindly applied this standard change by going through this gnu gcc doc page telling C++20 is less restrictive on variadic macros.

Port from the yujinrobot repo

Remember to drop kobuki_ftdi when doing so.

Victory Conditions

  • All code, tags and commit history exists here
  • Relevant tickets are brought over
  • Old repo has default branch to melodic, README updated for clarity on each repo's purpose.

Release in Eloquent

Victory Conditions

  • Source and documentation information updated in rosdistro as well
  • Pull requests enabled → PR #16
  • Debs available

Documentation overhaul

Goal

User documentation in sphinx, code documentation in doxygen.

Resources

Old documentation:

Looks like there is a nice read-the-docs version made by the Dabit lads:

Victory Conditions

  • User Documentation - Infra (sphinx package) (@readthedocs, @github)
  • Create and serve doxygen pages for kobuki_driver (lots of links to that from here)
  • User Documentation - Installation
  • User Documentation - Tutorials
  • User Documentation - Everything Else
  • User Documentation - Firmware
  • User Documentation - FTDI
  • User Documentation - Publish on ReadTheDocs
  • API Documentation - Infra (doxygen)
  • Api Documentation - Publish on github.io

Separate license branch

Victory Conditions

  • License exists on the license branch
  • Source files reference the correct license → PR #15

Debian udev rule for kobuki

Was originally in kobuki_ftdi, but to alleviate the dependency on that package (requires libusb etc), need to migrate that functionality here.

Victory Conditions

  • Documentation for setting up rule and group manually here → #17
  • Debian rules being installed by kobuki_driver

Silent mode

From @flashpaul

I am currently using the Kobuki Core driver (hydro branch) and I am wondering if it is possible to remove the sound that plays whenever the driver is launched (or stopped) on the robot.

Rename kobuki_driver -> kobuki_core

Blocked on #30 (get back to just one package in kobuki_core).

At that point it makes sense just to name the package kobuki_core.

  • kobuki_driver to the root of the repo → #33
  • kobuki_driver to kobuki_core#34
  • update kobuki_ros as needed
  • release v1.2.x

Wrong pose: how to debug ?

Hello,

I'm exploring how to connect our turtlebot2 to ROS2 ( foxy ). I tried to use kobuki simple keyop, as provided by this repository, and it works well to control the robot but the current pose functionality seems to be broken, as the values never change:

$ kobuki-simple-keyop

Simple Keyop : Utility for driving kobuki by keyboard.

Parameters
----------
 - linear_vel_max   [1]
 - linear_vel_step  [0.05]
 - angular_vel_max  [6.6]
 - angular_vel_step [0.33]

Reading from keyboard
---------------------
Forward/back arrows : linear velocity incr/decr.
Right/left arrows : angular velocity incr/decr.
Spacebar : reset linear/angular velocities.
q : quit.

current pose: [x: 5.61871e-310, y: 6.9339e-310, heading: 6.95299e-310]
current pose: [x: 5.61871e-310, y: 6.9339e-310, heading: 6.95299e-310]   <- The kobuki base actually moves but the values do not change
[…]
current pose: [x: 5.61871e-310, y: 6.9339e-310, heading: 6.95299e-310]
current pose: [x: 5.61871e-310, y: 6.9339e-310, heading: 6.95299e-310]

Is there a way to debug this ? Is that normal given the current state of the drivers ?

On a side note: is this possible to control the robot from ROS2 right now ?

Thanks,
Rémy

Additional information:

$ kobuki-version-info

Version Info

 * Hardware Version: 1.0.4
 * Firmware Version: 1.2.0
 * Software Version: 1.3.1
 * Unique Device ID: 98107186-859195458-1125344564

Collapse packages

Hardly seems a good reason to maintain the complexity of a separate package for the dock drive. The reference implementation (even if it's not great) may as well be part of the core. It doesn't introduce any extra build or runtime burden even if not using it.

  • Bring kobuki_dock_drive headers and sources into kobuki

Ensure firmware releases will be continuously available

Check that firmware releases are available and stored on either a server maintained by the open source developers on this project or at least backed up somewhere so that they can be provided if the Yujin Robot server should disappear.

Victory Conditions

  • No risk that firmware blobs are lost if the Yujin Robot server becomes unsupported
  • (stretch) A build farm deb provides the firmware blobs / tools

Docking Improvements

The docking library is a really quick hack at writing a docking algorithm.

  • Programmed for success - there is not much robustness around state sequence that lead to failure. For example, there is every chance it will get stuck in find_stream and get_stream when no signals are forthcoming.
  • Some approaches will fail, e.g. if the robot starts almost directly beside the dock.
  • Doesn't take into account any information from your use case, e.g. first guess at relative location could be derived from the localisation on your application's map. This could be used to save it doing unnecessary rotations when scanning for a signal.

All of these and more could use some work. PR's welcome, but it's more likely you would like to write your own algorithm and optimise it for your application.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.