Coder Social home page Coder Social logo

dfki-ric / mir_robot Goto Github PK

View Code? Open in Web Editor NEW
223.0 15.0 153.0 3.15 MB

ROS support for the MiR Robots. This is a community project to use the MiR Robots with ROS. It is not affiliated with Mobile Industrial Robots.

License: BSD 3-Clause "New" or "Revised" License

CMake 6.99% Python 61.57% C++ 20.78% MATLAB 10.13% Ruby 0.53%

mir_robot's Introduction

mir_robot

This repo contains a ROS driver and ROS configuration files (URDF description, Gazebo launch files, move_base config, bringup launch files, message and action descriptions) for the MiR robots. This is a community project created by us (DFKI, the German Research Center for Artificial Intelligence) to use the MiR Robots with ROS. We are not affiliated with Mobile Industrial Robots. If you find a bug or missing feature in this software, please report it on the issue tracker.

Supported MiR robots and software versions

This repo has been confirmed to work with the following robots:

  • MiR 100
  • MiR 200
  • MiR 250
  • MiR 500

It probably also works with the MiR1000. If you can test it on one of those, please let us know if it works.

This repo has been tested with the following MiR software versions:

  • 2.8.3.1
  • 2.13.4.1
  • 2.13.5.3

You can try if it works with other versions, but these are the ones that are known to work.

⚠️ Do NOT update to the upcoming version 3.0; it is very well possible that this repo will no longer work with this version!

Package overview

  • mir_actions: Action definitions for the MiR robot
  • mir_description: URDF description of the MiR robot
  • mir_dwb_critics: Plugins for the dwb_local_planner used in Gazebo
  • mir_driver: A reverse ROS bridge for the MiR robot
  • mir_gazebo: Simulation specific launch and configuration files for the MiR robot
  • mir_msgs: Message definitions for the MiR robot
  • mir_navigation: move_base launch and configuration files

Installation

You can chose between binary and source install below. If you don't want to modify the source, the binary install is preferred (if mir_robot binary packages are available for your ROS distro). The instructions below use the ROS distro noetic as an example; if you use a different distro (e.g. melodic), replace all occurrences of the string noetic by your distro name in the instructions.

Preliminaries

If you haven't already installed ROS on your PC, you need to add the ROS apt repository. This step is necessary for either binary or source install.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt-get update -qq

Binary install

For a binary install, it suffices to run this command:

sudo apt install ros-noetic-mir-robot

See the tables at the end of this README for a list of ROS distros for which binary packages are available.

Source install

For a source install, run the commands below instead of the command from the "binary install" section.

# create a catkin workspace
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/

# clone mir_robot into the catkin workspace
git clone -b noetic https://github.com/DFKI-NI/mir_robot.git

# use rosdep to install all dependencies (including ROS itself)
sudo apt-get update -qq
sudo apt-get install -qq -y python-rosdep
sudo rosdep init
rosdep update
rosdep install --from-paths ./ -i -y --rosdistro noetic

# build all packages in the catkin workspace
source /opt/ros/noetic/setup.bash
catkin_init_workspace
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=RelWithDebugInfo

In case you encounter problems, please compare the commands above to the build step in .github/workflows/github-actions.yml; that should always have the most recent list of commands.

You should add the following line to the end of your ~/.bashrc, and then close and reopen all terminals:

source ~/catkin_ws/devel/setup.bash

Gazebo demo (existing map)

mir_gazebo+navigation_4x.mp4
### gazebo:
roslaunch mir_gazebo mir_maze_world.launch
rosservice call /gazebo/unpause_physics   # or click the "start" button in the Gazebo GUI

### localization:
roslaunch mir_navigation amcl.launch initial_pose_x:=10.0 initial_pose_y:=10.0
# or alternatively: roslaunch mir_gazebo fake_localization.launch delta_x:=-10.0 delta_y:=-10.0

# navigation:
roslaunch mir_navigation start_planner.launch \
    map_file:=$(rospack find mir_gazebo)/maps/maze.yaml \
    virtual_walls_map_file:=$(rospack find mir_gazebo)/maps/maze_virtual_walls.yaml
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz

Now, you can use the "2D Nav Goal" tool in RViz to set a navigation goal for move_base.

Gazebo demo (mapping)

### gazebo:
roslaunch mir_gazebo mir_maze_world.launch
rosservice call /gazebo/unpause_physics   # or click the "start" button in the Gazebo GUI

### mapping:
roslaunch mir_navigation hector_mapping.launch

# navigation:
roslaunch mir_navigation move_base.xml with_virtual_walls:=false
rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz

Gazebo demo (MiR 250 in warehouse Gazebo world)

mir_250_warehouse_mapping.mp4

This repo contains URDF descriptions for the MiR 100 (default) and the MiR 250. You can switch to the MiR 250 by adding mir_type:=mir_250 to the gazebo roslaunch command. You can also select another Gazebo world using the world_name argument. For example, the video above was generated using the following commands:

cd <your catkin workspace>
git clone -b ros1 https://github.com/aws-robotics/aws-robomaker-small-warehouse-world.git
catkin build

roslaunch mir_gazebo mir_empty_world.launch \
        world_name:=$(rospack find aws_robomaker_small_warehouse_world)/worlds/no_roof_small_warehouse.world \
        mir_type:=mir_250

... and then running the remaining commands from the "mapping" section above.

Gazebo demo (multiple robots)

If you want to spawn multiple robots into Gazebo, you unfortunately have to hard-code the name of the second robot into the mir_empty_world.launch file, like this:

diff --git i/mir_gazebo/launch/mir_empty_world.launch w/mir_gazebo/launch/mir_empty_world.launch
index 27b9159..7773fae 100644
--- i/mir_gazebo/launch/mir_empty_world.launch
+++ w/mir_gazebo/launch/mir_empty_world.launch
@@ -17,6 +17,10 @@
       <remap from="$(arg namespace)/mobile_base_controller/cmd_vel" to="$(arg namespace)/cmd_vel" />
       <remap from="$(arg namespace)/mobile_base_controller/odom"    to="$(arg namespace)/odom" />

+      <remap from="mir2/joint_states"                   to="mir2/mir/joint_states" />
+      <remap from="mir2/mobile_base_controller/cmd_vel" to="mir2/cmd_vel" />
+      <remap from="mir2/mobile_base_controller/odom"    to="mir2/odom" />
+
       <include file="$(find gazebo_ros)/launch/empty_world.launch">
         <arg name="world_name" value="$(arg world_name)"/>
         <arg name="paused" value="true" />

Then you can run the simulation like this:

# start Gazebo + first MiR
roslaunch mir_gazebo mir_maze_world.launch tf_prefix:=mir

# first MiR: start localization, navigation + rviz
roslaunch mir_navigation amcl.launch initial_pose_x:=10.0 initial_pose_y:=10.0 tf_prefix:=mir#
roslaunch mir_navigation start_planner.launch \
        map_file:=$(rospack find mir_gazebo)/maps/maze.yaml \
        virtual_walls_map_file:=$(rospack find mir_gazebo)/maps/maze_virtual_walls.yaml prefix:=mir/
ROS_NAMESPACE=mir rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz

# spawn second MiR into Gazebo
roslaunch mir_gazebo mir_gazebo_common.launch robot_x:=-2 robot_y:=-2 tf_prefix:=mir2 model_name:=mir2 __ns:=mir2

# second MiR: start localization, navigation + rviz
roslaunch mir_navigation amcl.launch initial_pose_x:=8.0 initial_pose_y:=8.0 tf_prefix:=mir2
roslaunch mir_navigation start_planner.launch \
        map_file:=$(rospack find mir_gazebo)/maps/maze.yaml \
        virtual_walls_map_file:=$(rospack find mir_gazebo)/maps/maze_virtual_walls.yaml prefix:=mir2/
ROS_NAMESPACE=mir2 rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz

Running the driver on the real robot

Start up the robot

  • switch on MiR base

Connect to the MiR web interface

  • connect to MiR_R??? wifi (password "mirex4you"), for example from your Android phone/tablet
  • disable other network connections (mobile data / LAN / etc.)
  • open mir.com (192.168.12.20) in Chrome (!)
  • log in (admin/mir4you)

Synchronize system time

The internal robot PC's is not synchronized (for example via NTP), so it tends to get out of sync quickly (about 1 second per day!). This causes TF transforms timing out etc. and can be seen using tf_monitor (the "Max Delay" is about 3.3 seconds, but should be less than 0.1 seconds):

$ rosrun tf tf_monitor
Frames:
Frame: /back_laser_link published by unknown_publisher Average Delay: 3.22686 Max Delay: 3.34766
Frame: /base_footprint published by unknown_publisher Average Delay: 3.34273 Max Delay: 3.38062
Frame: /base_link published by unknown_publisher Average Delay: 3.22751 Max Delay: 3.34844
Frame: /front_laser_link published by unknown_publisher Average Delay: 3.22661 Max Delay: 3.34159
Frame: /imu_link published by unknown_publisher Average Delay: 3.22739 Max Delay: 3.34738
Frame: /odom published by unknown_publisher Average Delay: 3.16493 Max Delay: 3.28667
[...]

All Broadcasters:
Node: unknown_publisher 418.344 Hz, Average Delay: 0.827575 Max Delay: 3.35237
Node: unknown_publisher(static) 465.362 Hz, Average Delay: 0 Max Delay: 0

To fix this:

  • go to "Service" -> "Configuration" -> "System settings" -> "Time settings" -> "Set device time on robot"

Afterwards, the ROS software on the robot will restart, so you'll have to start move_base again (see below).

If you have an external PC on the MiR platform, you can use chrony to automatically synchronize system time (see below).

Start move_base on the robot

  • go to "Service" -> "Configuration" -> "Launch menu", start "Planner"; this starts move_base and amcl on the robot

Teleoperate the robot (optional)

  • go to "Manual", press yellow button (LEDs change from yellow to blue); now the robot can be teleoperated

Relocalize robot (optional)

If the robot's localization is lost:

  • go to "Service" -> "Command view" -> "Set start position" and click + drag to current position of robot in the map
  • click "Adjust"

Start the ROS driver

roslaunch mir_driver mir.launch

Advanced

Installing chrony to synchronize system time automatically

If you have an external PC integrated into your robot that is on the same wired network as the MiR PC, you can use chrony to automatically synchronize the MiR's system time. Unfortunately, this method is not easy to install.

Let's call the external PC external-pc. That PC's clock is our reference clock. It is synced to an NTP clock whenever the external-pc has access to the internet. To implement this synchronization solution, install chrony on both the external-pc and the internal PC of the MiR, and set up the external-pc as the chrony server and the internal MiR PC as the chrony client. This way, the clocks on these systems always stay in sync without any manual interaction.

To install things on the internal MiR PC:

  • Connect a monitor, keyboard and USB stick with a live Linux system to the ports that are exposed on one corner of the MiR.

  • Boot into the live USB Linux system.

  • chroot into the MiR PC:

    1. Mount MiR partition and bind /dev, /run etc. You can use fdisk -l to figure out which partition to mount. (Here it's sda3):

      sudo mkdir -p /media/mir
      sudo mount /dev/sda3 /media/mir
      
      for dir in /dev /dev/pts /proc /sys /run; do sudo mount --bind $dir /media/mir/@$dir; done
    2. chroot into the MiR PC:

      sudo chroot /media/mir/@/
  • Create user:

    adduser newuser
    usermod -aG sudo newuser
  • Reboot and log into MiR PC via SSH and the newly created user name.

  • Install Chrony:

    sudo apt update
    sudo apt install chrony
    
    # if not installable (to fix broken dependencies):
    sudo apt -f install
    sudo apt install chrony
  • Set up /etc/chrony/chrony.conf.

  • Make sure all old ntp configs are configured in chrony. For this, add the following to your chrony.conf (the old ntp.conf part is commented out):

# Clients from this subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.12.255 mask 255.255.255.0 nomodify notrap nopeer
allow 192.168.12.0/24 nomodify notrap nopeer
  • Restart chrony service.

Troubleshooting

Got a result when we were already in the DONE state

Sometimes the move_base action will print the warning "Got a result when we were already in the DONE state". This is caused by a race condition between the /move_base/result and /move_base/status topics. When a status message with status SUCCEEDED arrives before the corresponding result message, this warning will be printed. It can be safely ignored.

Gazebo prints errors: "No p gain specified for pid."

These errors are expected and can be ignored.

Unfortunately, we cannot set the PID gains (to silence the error) due to the following behavior of Gazebo:

  1. When using the PositionJointInterface, you must set the PID values for the joints using that interface, otherwise you will run into this bug.
  2. When using the VelocityJointInterface, if you omit the PID values, Gazebo just perfectly follows the commanded velocities. If you specify PID values, Gazebo will use a PID controller to approximate following the commanded velocities, so you have to tune the PID controllers.

Since we just want Gazebo to follow our commanded velocities, we cannot set the PID values for joints using the VelocityJointInterface, so the errors get printed (but can be ignored).

pre-commit Formatting Checks

This repo has a pre-commit check that runs in CI. You can use this locally and set it up to run automatically before you commit something. To install, use pip:

pip3 install --user pre-commit

To run over all the files in the repo manually:

pre-commit run -a

To run pre-commit automatically before committing in the local repo, install the git hooks:

pre-commit install

GitHub Actions - Continuous Integration

Noetic
Build Status

ROS Buildfarm

Noetic source deb Noetic binary deb
mir_actions Build Status Build Status
mir_description Build Status Build Status
mir_driver Build Status Build Status
mir_dwb_critics Build Status Build Status
mir_gazebo Build Status Build Status
mir_msgs Build Status Build Status
mir_navigation Build Status Build Status
mir_robot Build Status Build Status
sdc21x0 Build Status Build Status
Noetic devel Noetic doc
mir_robot Build Status Build Status

mir_robot's People

Contributors

ipa-fez avatar krause92 avatar matthias-mayr avatar mintar avatar moooeeeep avatar niniemann avatar oscar-lima avatar pumablattlaus avatar

Stargazers

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

Watchers

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

mir_robot's Issues

issue in the source for gazebo simulation in melodic ver.

Hi,

I found that current melodic source base - gazebo simulation doesn't work (by following the commands described in README) with navigation stack,
since the gazebo xacro file for sick_s300 urdf doesn't have (I guess) correct frameName for libgazebo_ros_gpu_laser.so.

And also is there anything to merge two sick lidar datas (front / back) together to output /scan?
since the navigation stack wants /scan topic, not /b_scan and /f_scan.

I modified those two things like,
putting ${prefix} in front of ${link},
and changed topicName from ${topic} to scan (I know that this will make /b_scan data and /f_scan data be mixed and published, so it may cause some trouble on localization)
and now the simulation works perfect with navigation stack.

or if there is other solutions that I couldn't catch, please suggest that.

Cheers.

topic 'mir_status' is not published by the MiR!

I am working on MIR100 with software 2.2.2. When starting mir.launch, I get a warning that the mir_status topic is not published by MiR and it is true. However I want to get this vital information, for example information about the battery. I have noticed that there exists a topic called robot_status with the message type mirMsgs/RobotStatus which I cannot read:

$ rostopic echo /robot_status
ERROR: Cannot load message class for [mirMsgs/RobotStatus]. Are your messages built?

I can't get further than this and I would appreciate any help.

Using ROS with robot software version 2.7

Dear all,
I have a question regarding the ROS integration with MiR100 running robot software versions of 2.7 and 2.8.
As already mentioned in the previous issues, the ROS wrapper available in this repository is not compatible with versions older than 2.3. I was wondering what causes the problem and whether there is a fix for it.
Currently, we run the driver and the robot gets connected successfully, however, nothing happens after commanding velocities through /cmd_vel topic.
I would highly appreciate any help.

The negative average delay

Hi,
i try to connect to the real MIR 100 robot thourgh the driver. However, it shows the message in tf_monitor.

Frame: back_laser_link published by unknown_publisher Average Delay: -3597.61 Max Delay: 0
Frame: base_footprint published by unknown_publisher Average Delay: -3597.49 Max Delay: 0
Frame: base_link published by unknown_publisher Average Delay: -3597.61 Max Delay: 0
Frame: front_laser_link published by unknown_publisher Average Delay: -3597.61 Max Delay: 0
Frame: imu_link published by unknown_publisher Average Delay: -3597.61 Max Delay: 0
Frame: odom published by unknown_publisher Average Delay: -3597.67 Max Delay: 0

All Broadcasters:
Node: unknown_publisher 106.839 Hz, Average Delay: -3597.58 Max Delay: 0

i try to go to the settings on the web interface to set the current time of the robot but it does not work. As a result, there is no trasnformation from some frame in RVIZ

Synchronizing system time

I have a doubt regarding the fix proposal you give:

To fix this:
go to "Service" -> "Configuration" -> "System settings" -> "Time settings" -> "Set device time on robot"
Afterwards, the ROS software on the robot will restart, so you'll have to start move_base again (see below).

I don't know at what "Service" you are making reference. Do you mean with that to access the web interface of the robot and access the configuration from there? i.e. "System" -> "Settings" -> "Date & Time" ?

Because I tried that and I still get errors when I try to:
rosrun gmapping slam_gmapping scan:=/scan map:=/gmapping/map

Warning: TF_OLD_DATA ignoring data from the past for frame odom at time 1.54393e+09 according to authority unknown_publisher
Possible reasons are listed at http://wiki.ros.org/tf/Errors%20explained
         at line 277 in /tmp/binarydeb/ros-kinetic-tf2-0.5.18/src/buffer_core.cpp

And
rosrun tf tf_monitor

RESULTS: for all Frames

Frames:
Frame: /back_laser_link published by unknown_publisher Average Delay: -3603.23 Max Delay: 0
Frame: /base_footprint published by unknown_publisher Average Delay: -3603.12 Max Delay: 0
Frame: /base_link published by unknown_publisher Average Delay: -3603.23 Max Delay: 0
Frame: /camera_floor_depth_optical_frame published by unknown_publisher Average Delay: -3603.12 Max Delay: 0
Frame: /camera_floor_link published by unknown_publisher Average Delay: -3603.23 Max Delay: 0
Frame: /front_laser_link published by unknown_publisher Average Delay: -3603.24 Max Delay: 0
Frame: /imu_link published by unknown_publisher Average Delay: -3603.24 Max Delay: 0
Frame: /odom published by unknown_publisher Average Delay: -3603.3 Max Delay: 0
Frame: bl_caster_rotation_link published by unknown_publisher Average Delay: 0.0347947 Max Delay: 0.0939313
Frame: bl_caster_wheel_link published by unknown_publisher Average Delay: 0.0347972 Max Delay: 0.0939345
Frame: br_caster_rotation_link published by unknown_publisher Average Delay: 0.0347989 Max Delay: 0.0939366
Frame: br_caster_wheel_link published by unknown_publisher Average Delay: 0.0348004 Max Delay: 0.0939391
Frame: fl_caster_rotation_link published by unknown_publisher Average Delay: 0.034802 Max Delay: 0.0939414
Frame: fl_caster_wheel_link published by unknown_publisher Average Delay: 0.0348036 Max Delay: 0.0939437
Frame: fr_caster_rotation_link published by unknown_publisher Average Delay: 0.0348052 Max Delay: 0.0939455
Frame: fr_caster_wheel_link published by unknown_publisher Average Delay: 0.0348074 Max Delay: 0.0939473
Frame: imu_frame published by unknown_publisher(static) Average Delay: 0 Max Delay: 0
Frame: left_wheel_link published by unknown_publisher Average Delay: 0.0348088 Max Delay: 0.0939493
Frame: right_wheel_link published by unknown_publisher Average Delay: 0.0348104 Max Delay: 0.0939515
Frame: surface published by unknown_publisher(static) Average Delay: 0 Max Delay: 0
Frame: us_1_frame published by unknown_publisher(static) Average Delay: 0 Max Delay: 0
Frame: us_2_frame published by unknown_publisher(static) Average Delay: 0 Max Delay: 0

All Broadcasters:
Node: unknown_publisher 219.438 Hz, Average Delay: -3123.87 Max Delay: 0.0869416
Node: unknown_publisher(static) 1e+08 Hz, Average Delay: 0 Max Delay: 0

Could you help me fix this issue?
Where can I find the "Service" you make reference?

MiR100 sensors in Gazebo

Hi there, thank you so much for developing and sharing this ROS driver! It helps a lot.

We have bought a new mir100 recently. From the user manual, we see that the robot has multiple sensors: two laser scanners, two 3D cameras, four ultrasound sensors, and internal sensors (e.g., IMU, motor encoder, accelerometer, wheel encoders). Are all of them integrated into the mir gazebo? From the urdf file, we noticed some may be missing?

We are also trying to pair the sensors with the ros topics. For example, laser scanners --> /f_scan and /b_scan and IMU --> /imu_data. How about the other sensors, especially the 3D camera?

Some floor camera topics missing

Hello there! I suggest you an improvement to your package.

Here is a list of the topics related to floor camera obtained with
roslaunch mir_driver mir.launch

/camera_floor/background
/camera_floor/depth/parameter_descriptions
/camera_floor/depth/parameter_updates
/camera_floor/depth/points
/camera_floor/filter/parameter_descriptions
/camera_floor/filter/parameter_updates
/camera_floor/floor
/camera_floor/obstacles
/camera_floor/transform/parameter_descriptions
/camera_floor/transform/parameter_updates

And here without your launcher, using
export ROS_MASTER_URI=http://192.168.12.20:11311

/camera_floor/background
/camera_floor/camera_info
/camera_floor/driver/color/camera_info
/camera_floor/driver/color/image_raw
/camera_floor/driver/color/image_raw/compressed
/camera_floor/driver/color/image_raw/compressed/parameter_descriptions
/camera_floor/driver/color/image_raw/compressed/parameter_updates
/camera_floor/driver/depth/camera_info
/camera_floor/driver/depth/color/points
/camera_floor/driver/depth/image_rect_raw
/camera_floor/driver/depth/image_rect_raw/compressed
/camera_floor/driver/depth/image_rect_raw/compressed/parameter_descriptions
/camera_floor/driver/depth/image_rect_raw/compressed/parameter_updates
/camera_floor/driver/extrinsics/depth_to_color
/camera_floor/driver/parameter_descriptions
/camera_floor/driver/parameter_updates
/camera_floor/filter/parameter_descriptions
/camera_floor/filter/parameter_updates
/camera_floor/filter/visualization_marker
/camera_floor/floor
/camera_floor/obstacles
/camera_floor/transform/parameter_descriptions
/camera_floor/transform/parameter_updates
/camera_top/background
/camera_top/obstacles

There are missing topics being recovered from your bridging launcher.

Simulated laser scanner does not respect namespace/prefix

We are using our MIR in the namespace mir_ and initially had some issues with the navigation in simulation.

More precisely, the laser scan results on /scan are still in the frame front_laser_link rather than mir_front_laser_link and later on in the navigation stack this causes amcl to not publish the transformation between mir_odom_comb and map.

These messages are published by Gazebo using the libgazebo_ros_laser plugin. To work with a prefixed MIR, we had to change the frame configuration of the plugin to this:

<!-- no prefix, plugin always uses a tf_prefix (if none is set it uses robotNamespace) -->
<frameName>${prefix}${link}</frameName>

to make it use the prefix for the frame in the published messages.

Is this, how it's supposed to be or is there another, better way to resolve this?

Get velocities of left and right wheel

Question:
Is there a way to get the velocities of the left and right wheel from the MiR?

I was thinking the /joint_states topic would provide such information, but apparently the fake_mir_joint_publisher.py only publishes zeros.

Thanks for any help in advance!

Robot model moving itself

I tried this repository for a research purpose. After some time playing with it, I noticed that mobile base is moving, even if /cmd_vel topic is empty. The base is also moving very slowly right after enabling physics engines in gazebo.
I have done some review of a urdf model and all launch files, and I've noticed that it might be caused by disabling friction for wheels. I tried to change it, and if I set it in this way (in file mir_100.gazebo.xacro)

<xacro:macro name="set_all_wheel_frictions" params="prefix">
    <xacro:set_wheel_friction link="${prefix}left_wheel_link" friction="0.4"/>
    <xacro:set_wheel_friction link="${prefix}right_wheel_link" friction="0.4"/>
    <xacro:set_wheel_friction link="${prefix}fl_caster_wheel_link" friction="0.4"/>
    <xacro:set_wheel_friction link="${prefix}fr_caster_wheel_link" friction="0.4"/>
    <xacro:set_wheel_friction link="${prefix}bl_caster_wheel_link" friction="0.4"/>
    <xacro:set_wheel_friction link="${prefix}br_caster_wheel_link" friction="0.4"/>
</xacro:macro>

and small modification in mir_100_v1.urdf.xacro

<!-- disabled, because it doesn't make a difference in Gazebo: -->
<xacro:set_all_wheel_frictions prefix="${prefix}"/>

then the model was still.
I haven't calculated friction coefficients, I just have used arbitrary chosen values (for which simulator seems to be stable).

tf_remap of a frame not working

I am trying to remap the name of a tf like follows:

<node pkg="tf" type="tf_remap" name="tf_remapper" output="screen">
  <rosparam param="mappings">
    [{old: camera_floor_depth_optical_frame, new: /camera_depth_optical_frame}]
  </rosparam>
</node>

The problem comes that the original tf name remain the same.. why is this happening?

demo mapping error

Hi! I was following the mapping procedure. But when I run Rviz the map frame does not exist. I am using melodic, gazebo9.
Screenshot from 2020-05-04 18-17-56

I need an advice on customizing a MiR platform.

Hello!
First of all, I am impressed what you have done with MiR100.
I would like to get some advice about building a robot system, If you don't mind.

I am trying to control MiR mobile robot in a custom way and all I got is a REST API documentation.
When I look into it, I cannnot find any GET or POST Encoder, IMU, Laserscan, velocity or something.

How is it possible to make it SLAM or navigating with REST API?
I would like to know how you make a bridge on the mobile robot(which has a driving unit black-boxed ) to your ROS package with REST API.

Thank you!

Slow publishing to /Initialpose

We are using the MiR100 to transport goods from one floor to another. We solved the multiple map problem by making one large map that contains both floors. Then the thought is that whenever we need to switch map, we change the robot's position on the map to either floor1 or floor2.

MapRob5MiR

The program we are currently trying to develop should satisfy the following:

  1. Drive from point 4 -> 3
  2. Change the robot's position to 1 in its own map
  3. Drive to 2
  4. Drive from 2->1
  5. Change position in its own map to 3
  6. Drive to position 4

The first change of position at step 2 is done within a second however, when the robot reaches point 5, and has to change position again, the process takes approximately 40 seconds.

We made a program only for publishing to /initialpose, and this was capable of switching the robot's position between two predefined points every 1 second, approximately. However, when we combined it with moving back and forth between points, we could only change the robot's position in its map once.

We think that the problem is closely related to the movebaseaction client, but we do not know how/why and what to do.

We are using ROS kinetic running Ubuntu 16.04 on a Linux kernel

#include "ros/ros.h"
#include <sstream>
#include <move_base_msgs/MoveBaseAction.h>
#include <actionlib/client/simple_action_client.h>
#include <tf/transform_listener.h>
#include <geometry_msgs/PoseWithCovarianceStamped.h>

typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;
geometry_msgs::Pose curPos;
double curXpose;
double curYpose;

double pose(int flag);
void onPoseSet(double x, double y, double theta);
typedef boost::array<double, 36> array;
array Covariance = {0.0};

// CALLBACK FUNCTION FOR onPoseSet
void moveBaseCallback(const geometry_msgs::PoseWithCovarianceStamped msg){

curXpose = msg.pose.pose.position.x;
curYpose = msg.pose.pose.position.y;
//ROS_INFO("x: %f, y: %f",curXpose,curYpose);
}

//MOVETOPOINT FUNCTION
void moveToPoint(double x, double y, double rot)
{
  MoveBaseClient ac("move_base",true);
  while(!ac.waitForServer(ros::Duration(5.0))){
    ROS_INFO("Waiting for the move_base action server to come up");
  }

  ros::Rate loop_rate(0.1);
  move_base_msgs::MoveBaseGoal start;
    
  start.target_pose.header.frame_id = "map";
  start.target_pose.header.stamp = ros::Time::now();
  start.target_pose.pose.position.x = x;
  start.target_pose.pose.position.y = y;
  start.target_pose.pose.orientation.z = 0.0;
  start.target_pose.pose.orientation.w = 1.0;

  ac.sendGoal(start);
  ac.waitForResult();

  if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED){
    ROS_INFO("Hooray, the base moved to position");
}else{
ROS_INFO("The base failed to move");
  }
  ros::spinOnce();
  ROS_INFO("current pos x: %f, y: %f,",curXpose,curYpose);

  loop_rate.sleep();
}

//TELEPORT THE ROBOT ON INTERNAL MAP FUNCTION
void onPoseSet(double x, double y, double rot)
{

   ros::Rate loop_rate(0.5);

    ros::NodeHandle nh1;
    ros::Publisher pub_ = nh1.advertise<geometry_msgs::PoseWithCovarianceStamped>     ("/initialpose", 1);
    loop_rate.sleep();

    std::string fixed_frame = "map";
    geometry_msgs::PoseWithCovarianceStamped pose;
    pose.header.frame_id = fixed_frame;
    pose.header.stamp = ros::Time::now();
    // set x,y coord
    pose.pose.pose.position.x = x;
    pose.pose.pose.position.y = y;
    pose.pose.pose.position.z = 0.0;
    //Convert rotation(radians) to Quaternion
        tf::Quaternion quat;
        quat.setRPY(0.0, 0.0, rot);
        tf::quaternionTFToMsg(quat, pose.pose.pose.orientation);
    //Covariance matrix with 0.0
    pose.pose.covariance = Covariance;
    // publish
    ROS_INFO("x: %f, y: %f, z: 0.0 rot: %f",x,y, rot);
   while( x-0.1 > curXpose || curXpose > x+0.1 ||  y-0.1 > curYpose || curYpose > y+0.1 ){

    ROS_INFO("current pos x: %f, y: %f,",curXpose,curYpose);

    pub_.publish(pose);
    loop_rate.sleep();
    ros::spinOnce();
    loop_rate.sleep();
  }
    //ROS_INFO("I am okay sleep");
}

int main(int argc, char** argv)
{

    ros::init(argc, argv, "simple_navigation_goals");
    ros::start();

    ros::NodeHandle nh2;
//    ros::Subscriber sub_ = nh2.subscribe<move_base_msgs::MoveBaseActionFeedback>         ("/move_base/feedback", 1, moveBaseCallback);
    ros::Subscriber sub_ = nh2.subscribe<geometry_msgs::PoseWithCovarianceStamped>     ("/amcl_pose", 10, moveBaseCallback);

     while(ros::ok()){
        ROS_INFO("1");
        moveToPoint(6.8, 10.45, 1.0);
        ROS_INFO("2");
        moveToPoint(6.0, 10.45, 1.0);
       ROS_INFO("teleport");
        onPoseSet(24.25, 14.6, 0.0);
        ROS_INFO("4");
        moveToPoint(24.3, 12.95, 1.0);
        ROS_INFO("3");
        moveToPoint(24.25, 14.6, 1.0);
        ROS_INFO("teleport");
        onPoseSet(24.25, 14.6, 0.0);
        onPoseSet(6.0, 10.45, 0.0);

        ROS_INFO("1");
        moveToPoint(6.8, 10.45, 1.0);
        //moveToPoint(7.85, 14.3, 1.0); old point 1

      }
  ROS_INFO("???");
   return 0;
 }

Publishing on topic /cmd_vel not working

I have followed all the issues related to publishing on the /cmd_vel topic. There is a melodic-2.8 branch for the recent software version on mir but it does not work. Seems like it works on mir SW v2.7.2 but does not work 2.8.3.

What changes in the source code i need to make it work with MiR SW v2.8.3?

Any help or update would be appreciated!

the execution can't succeed.

I do the simulation step by step, but the execution can't succeed as the following:
peek 2018-12-22 11-33
I think there maybe some error in the model or parameter setting, Is it?

ROS bridge

I have a question:
Is it possible to make the ROS bridge just for certain terminals and not for all of them?

mir cannot move in rviz

Hi! I have created a moveit package for mir with a manipulator. However, when I add this in my launch file mir is not able to move around in rviz when I launch the move_group.

     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
          <rosparam param="source_list">[mir/joint_states]</rosparam>
          <param name="rate" value="200.0" />
      </node>  

publishing to cmd_vel doesn't move the mir

Hello,

I've been having this issue where I cannot get the mir to move by publishing to the cmd_vel topic with the following command:

"rostopic pub /cmd_vel geometry_msgs/Twist -r 100 -- '[0.0, 0.0, 0.0]' '[0.0, 0.0, 0.2]'"

after issuing this command, if I echo the cmd_vel topic I see these values coming back, but the MiR isnt moving (it is in a green idle state). I have already checked the list of pub/sub topics in mir_bridge.py, and the topic cmd_vel is in the SUB_TOPICS section and not the PUB_TOPICS section. Any help would be appreciated.

Thanks!

Client [/mir_auto_bagger] wants topic /move_base/goal to have datatype/md5sum

Hello Mintar.
When I use NavGoal in RViz when executing gmapping and move_base nodes it comes the following error:

[ERROR] [1552579781.696460056]: Client [/mir_auto_bagger] wants topic /move_base/goal to have datatype/md5sum [*/8ac6f5411618f50134619b87e4244699], but our version has [move_base_msgs/MoveBaseActionGoal/660d6895a1b9a16dce51fbdd9a64a56b]. Dropping connection.

The procedure I follow is:

export ROS_MASTER_URI=http://192.168.12.20:11311
export ROS_IP=192.168.12.246

Then I roslaunch the following script to initialize mainly RViz, gmapping and move_base nodes.
Then in RViz I try to use NavGoal but it does not work due to the error that appeared in a message on the same terminal as the roslaunch command. I need those nodes in order to run another package.

<launch>

  <param name="use_sim_time" value="false" />

  <node pkg="laser_filters" type="scan_to_scan_filter_chain" name="laser_filter">
      <remap from="scan" to="f_scan" />
      <rosparam command="load" file="$(find laser_filters)/laserscan_filter.yaml" />
  </node>

  <arg name="scan_topic" default="/scan_filtered" />
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">

    <param name="odom_frame" value="odom"/>
    <param name="base_frame" value="base_link"/>
    <param name="map_frame" value="map"/>

    <!-- Process 1 out of every this many scans (set it to a higher number to skip more scans)  -->
    <param name="throttle_scans" value="1"/>

    <param name="map_update_interval" value="2.0"/> <!-- default: 5.0 -->

    <!-- The maximum usable range of the laser. A beam is cropped to this value.  -->
    <param name="maxUrange" value="5.0"/>

    <!-- The maximum range of the sensor. If regions with no obstacles within the range of the sensor should appear as free space in the map, set maxUrange < maximum range of the real sensor <= maxRange -->
    <param name="maxRange" value="10.0"/>

    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="minimumScore" value="0.0"/>
    <!-- Number of beams to skip in each scan. -->
    <param name="lskip" value="0"/>

    <param name="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02"/>

    <!-- Process a scan each time the robot translates this far  -->
    <param name="linearUpdate" value="0.1"/>

    <!-- Process a scan each time the robot rotates this far  -->
    <param name="angularUpdate" value="0.05"/>

    <param name="temporalUpdate" value="0.1"/>
    <param name="resampleThreshold" value="0.5"/>

    <!-- Number of particles in the filter. default 30        -->
    <param name="particles" value="10"/>

    <!-- Initial map size  -->
    <param name="xmin" value="-5.0"/>
    <param name="ymin" value="-5.0"/>
    <param name="xmax" value="5.0"/>
    <param name="ymax" value="5.0"/>

    <!-- Processing parameters (resolution of the map)  -->
    <param name="delta" value="0.1"/>

    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>

    <remap from="scan" to="$(arg scan_topic)"/>
  </node>

  <arg name="namespace" value=""/>
  <node pkg="move_base" type="move_base" respawn="false" name="move_base_node" output="screen">
    <param name="footprint_padding" value="0.01" />
    <param name="controller_frequency" value="5.0" />
    <param name="controller_patience" value="3.0" />
    <param name="oscillation_timeout" value="30.0" />
    <param name="oscillation_distance" value="0.5" />
    <param name="planner_patience" value="1" />
    <param name="controller_patience" value="1" /> 
    <remap from="cmd_vel" to="mobile_base/commands/velocity"/>
    <param name="recovery_behavior_enabled" value="false" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find rrt_exploration_tutorials)/param/base_local_planner_params.yaml" command="load" />  
    <param name="global_costmap/global_frame" value="$(arg namespace)/map"/>
    <param name="global_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/$(arg namespace)/base_laser_link"/>
    <param name="global_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/$(arg scan_topic)"/>    
    <param name="local_costmap/global_frame" value="$(arg namespace)/odom"/>
    <param name="local_costmap/robot_base_frame" value="$(arg namespace)/base_link"/>
    <param name="local_costmap/laser_scan_sensor/sensor_frame" value="$(arg namespace)/front_laser_link"/>
    <param name="local_costmap/laser_scan_sensor/topic" value="/$(arg namespace)/$(arg scan_topic)"/>
    <param name="local_costmap/obstacle_layer/laser_scan_sensor/topic" value="/$(arg namespace)/$(arg scan_topic)"/>
  </node>

  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find rrt_exploration_tutorials)/launch/includes/rviz_config/simple.rviz">
  </node>

</launch>

Is there any idea of why this happens?

In addition, why by using roslaunch mir_driver mir.launch, the opening of RViz is much quicker than just by using export ROS_MASTER_URI=http://192.168.12.20:11311 and export ROS_IP=192.168.12.246?
By the way, I am trying to access the topics from the camera by using roslaunch mir_driver mir.launch but they are not available for some reason. Although by using export ROS_MASTER_URI=http://192.168.12.20:11311 and export ROS_IP=192.168.12.246 they indeed are available.

Thanks for your time.

Getting some problems running the gazebo demo(mapping)

Hi guys!

I having a problem when running Gazebo demo(mapping). I started looking at this fork yesterday and when i runned the hector_mapping launch file it could not run. I looked at the file and saw the hector_mapping node tag so did some research. This ended with finding the fork of hector_slam.

I cloned it into my catkin_ws and this made it possible for the launch file to run.

At this point all things worked. In Gazebo mir_maze_world was up and running

I continued by running commands of #navigation directives and here i get into some problems when i run the navigation.rviz command, rviz opens and when i either run the 2D Nav or using the controller. rviz shows only the mir robot and some shitty background of the potential map.
But in the Gazebo, the mir robot is running but nothing happens with mapping in rviz?

What should I do to get mapping started??

I attached pictures of rviz and gazebo.

err1
err2
err3

Velocity control

With this package, is it possible to use the MIR in velocity control mode, where you send the desired linear and angular velocity to the robot?

Long term support for MIR software versions 2.8 or above

Hi,

I was wondering if there was going to be a long term support for MIR software version 2.7 or higher?
The current repo is for 2.3.1 or lower. Although, some of the issues for later software versions have been address in other Issues section but there might some other issues which have not yet been encountered.
Thanks

About the the laser scan of the model in gazebo

Hello, author!
When I launch mir_maze_world.launch and click the start button, it seems that the data of the laser scan is not correct. Data has always been shown to be "1.0" or "-inf". I would like to consult you about this problem. Thank you!

Empty costmap topics?

Hello there.
I've been watching something strange with the costmap topics. I tried to echo them even while performing Navigation Goals but they are always empty.
/move_base_node/global_costmap/costmap
/move_base_node/local_costmap/costmap
Any idea how to get them?

mir_bridge stays on still waiting for connection to 192.168.12.20

Hi. While trying this package I faced the constant appearing of the warning: still waiting for connection to 192.168.12.20.
My computer is connected to MiR network, I tried both WiFi and Ethernet.
Do you know what could be the root of the problem? Is it on MiR's side or on mine?
Thanks in advance for the help.

Unable to locate package

Hi I'm trying to install the binary version of this package, but can't seem to find it in the ubuntu or debian package repositories. Is there a repository that needs to be added to my source list?

Have tried:

sudo apt install ros-indigo-mir-robot
sudo apt install ros-jade-mir-robot

Tf frame remapping

Tf remapping error:

Since the mir_bridge seems to do a frame reparenting everytime its starts to stream messages to the tf topic it sometimes happens that tf_prefixes occure repeated:
Wrong remapped frames
Especially the odom frame is subjected to this error.

Reproduction:

This error is hardly reproduceable, since it does not occure every time a tf listener is launched. But the following steps lead to it very often:

  1. Launch the mir.launch in a given namespace and with the tf_prefix arg set
  2. Wait til everythign is setup
  3. Execute a program that looks up mir transformations (In my case I started the tf tree plugin for rqt (see above))
  4. If you got more than one line that says "starting to stream messages on topic 'tf'":

Terminal
the error should be there.

Walkaround:

The error can be avoided by not setting a tf_prefix for the mir_bridge. If no tf_prefix is set and the frames are remapped in another way, no error occures.

roslaunch mir_navigation hector_mapping.launch.xml

Running the above command gives the following output
SUMMARY

PARAMETERS

  • /hector_mapping/advertise_map_service: True
  • /hector_mapping/base_frame: base_footprint
  • /hector_mapping/laser_max_dist: 30.0
  • /hector_mapping/laser_min_dist: 0.4
  • /hector_mapping/laser_z_max_value: 1.0
  • /hector_mapping/laser_z_min_value: -1.0
  • /hector_mapping/map_frame: map
  • /hector_mapping/map_multi_res_levels: 3
  • /hector_mapping/map_pub_period: 2.0
  • /hector_mapping/map_resolution: 0.05
  • /hector_mapping/map_size: 2048
  • /hector_mapping/map_start_x: 0.5
  • /hector_mapping/map_start_y: 0.5
  • /hector_mapping/map_update_angle_thresh: 0.06
  • /hector_mapping/map_update_distance_thresh: 0.4
  • /hector_mapping/map_with_known_poses: False
  • /hector_mapping/odom_frame: odom_comb
  • /hector_mapping/pose_update_topic: poseupdate
  • /hector_mapping/pub_map_odom_transform: True
  • /hector_mapping/pub_map_scanmatch_transform: True
  • /hector_mapping/pub_odometry: False
  • /hector_mapping/scan_subscriber_queue_size: 5
  • /hector_mapping/scan_topic: scan
  • /hector_mapping/sys_msg_topic: syscommand
  • /hector_mapping/tf_map_scanmatch_transform_frame_name: scanmatcher_frame
  • /hector_mapping/update_factor_free: 0.4
  • /hector_mapping/update_factor_occupied: 0.9
  • /hector_mapping/use_tf_pose_start_estimate: False
  • /hector_mapping/use_tf_scan_transformation: True
  • /rosdistro: melodic
  • /rosversion: 1.14.4

NODES
/
hector_mapping (hector_mapping/hector_mapping)

ROS_MASTER_URI=http://localhost:11311

ERROR: cannot launch node of type [hector_mapping/hector_mapping]: hector_mapping
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/user/catkin_ws/src
ROS path [2]=/opt/ros/melodic/share
No processes to monitor
shutting down processing monitor...
... shutting down processing monitor complete

I have already sourced the workspace and ros melodic share. hector_mapping.launch.xml is in the package but the roslaunch is still not finding it. Any solutions?
Thank you

Gazebo demo - mapping

Hi,

I was following the instructions for mapping with the mir100 and I encountered some problems. First, under ### mapping: I think it should be

roslaunch mir_navigation hector_mapping.launch without the xml extension.

But this is a minor issue. I have troubles with the command under # navigation:

roslaunch mir_navigation move_base.xml with_virtual_walls:=false

I get this output in the terminal

[ WARN] [1588239096.440906321, 69.100000000]: Timed out waiting for transform from base_footprint to map to become available before running costmap, tf error: canTransform: target_frame map does not exist.. canTransform returned after 69.1 timeout was 0.1.
[ INFO] [1588239096.528079368, 69.160000000]: Using plugin "navigation_map"
[ INFO] [1588239096.548217776, 69.168000000]: Requesting the map...
[ INFO] [1588239096.822569493, 69.372000000]: Resizing costmap to 2048 X 2048 at 0.050000 m/pix
[ INFO] [1588239096.963045774, 69.469000000]: Received a 2048 X 2048 map at 0.050000 m/pix
[ INFO] [1588239096.968869319, 69.472000000]: Using plugin "obstacles"
[ INFO] [1588239096.982339040, 69.481000000]:     Subscribed to Topics: b_scan_marking b_scan_clearing f_scan_marking f_scan_clearing
[ INFO] [1588239097.203873307, 69.606000000]: Using plugin "inflation"
[ INFO] [1588239097.327970419, 69.656000000]: Name is SBPLLatticePlanner
[ INFO] [1588239099.975276407, 70.739000000]: Planning with ARA*
[ INFO] [1588239099.976435074, 70.740000000]: [sbpl_lattice_planner] Initialized successfully
[ INFO] [1588239100.063663768, 70.801000000]: Using plugin "obstacles"
[ INFO] [1588239100.086832803, 70.810000000]:     Subscribed to Topics: b_scan_marking b_scan_clearing f_scan_marking f_scan_clearing
[ INFO] [1588239100.318272605, 70.926000000]: Using plugin "inflation"
[ INFO] [1588239100.438672378, 70.980000000]: Created local_planner nav_core_adapter::LocalPlannerAdapter
[ INFO] [1588239100.441480870, 70.984000000]: Loading plugin dwb_local_planner::DWBLocalPlanner
[ INFO] [1588239100.493732191, 71.007000000]: Using Trajectory Generator "dwb_plugins::StandardTrajectoryGenerator"
[ INFO] [1588239100.597755627, 71.056000000]: Using Goal Checker "dwb_plugins::SimpleGoalChecker"
[ INFO] [1588239100.618203343, 71.068000000]: Using critic "RotateToGoal" (dwb_critics::RotateToGoalCritic)
[ INFO] [1588239100.627164351, 71.071000000]: Using critic "ObstacleFootprint" (dwb_critics::ObstacleFootprintCritic)
[ INFO] [1588239100.634960493, 71.075000000]: Using critic "PathAlign" (dwb_critics::PathAlignCritic)
[ INFO] [1588239100.652369691, 71.084000000]: Using critic "PathDistPruned" (mir_dwb_critics::PathDistPrunedCritic)
[ INFO] [1588239100.657793369, 71.087000000]: Using critic "PathProgress" (mir_dwb_critics::PathProgressCritic)
[ INFO] [1588239100.783721242, 71.172000000]: Recovery behavior will clear layer obstacles
[ INFO] [1588239100.785131502, 71.175000000]: Recovery behavior will clear layer obstacles
[ INFO] [1588239101.025901727, 71.326000000]: odom received!

Then I run

rviz -d $(rospack find mir_navigation)/rviz/navigation.rviz

In the rviz window no black lines or dots are drawn and while commanding the robot to move this does move in gazebo but nor in rviz.

I tested this on Ubuntu 16.04 / Kinetic Kame respectively 18.04 / Melodic, both running on VMWare Fusion 11.5 on a Mac.

I tried to find out what it could be, but with no success.

Thanks in advance

Controlling sound and light

Does the package support audio and light control? I can find topics related to audio and light that take a message of type string, but cannot figure out what commands to send.
Thank you.

Using package with MIR 200

Is it possible to get this package working with the MiR 200? Can't seem to get the robot to receive published commands from my PC

Post correct x, y and orientation values to MiR100 and MiR200

Hi Mintar,

My MiR100 and MiR200 operate in dynamic environments and constantly lose localization. Could you share how I should go about updating the correct x, y and orientation values (more accurate values which I have obtained by other means). I am guessing I would have a publisher node to constantly publish the correct values and overwrite the x, y and orientation values on the MiR. Looking forward to your reply.

Best,
Vikram

Defining a target pose for MiR100 from the command line

Hi all,

I am new to the ROS framework (~2 weeks). I have installed ROS Kinetic in Ubuntu 16.04, run the MiR simulation in Gazebo (thanks @mintar!) and am now looking to send velocity and pose commands to the physical robot before getting into full-fledged path planning and control:

I have been able to publish to the /cmd_vel topic from the command line and move the robot forward/back and turn it clockwise/counter-clockwise using commands such as:
rostopic pub /cmd_vel geometry_msgs/Twist -r 1 -- '[0.05, 0.0, 0.0]' '[0.0, 0.0, 0.0]'

How can I get the robot to get to a target pose (x, y, theta) from the command line? Does specifying the target destination invoke the DWB planner?

In order to execute @mintar's suggestion in issue #21 re: rviz, I assume I will have to map out the environment (such as a room) first. Is that right and if so, what is the best way to do that?

The robot's position in real life is consistent with the position returned by /robot_pose but its orientation is not. Any thoughts on how to calibrate it accurately?

I would appreciate any help. Thank you in advance!

Goals send via /move_base_simple do not work with MIR software version > 2.7

When I send goal to /move_base_simple, e.g through Rviz, MIR starts doing random orientations and does not go to the goal. There are two behaviours I found. In both behaviours, MIR just moves a little and starts oscillating. I have pasted the system log for both the behaviours. In the first behaviour, there was no error but in the second behaviour, I received an error
1)

MC | Setting parameter using command: ^KD 2 2 | 17:53:07
-- | -- | --
  | MC | Setting parameter using command: ^KI 2 7 | 17:53:07
  | MC | Setting parameter using command: ^KP 2 4 | 17:53:07
  | MC | Setting parameter using command: ^KD 1 2 | 17:53:07
  | MC | Setting parameter using command: ^KI 1 7 | 17:53:07
  | MC | Setting parameter using command: ^KP 1 4 | 17:53:07
  | move_base_node | MirLocalPlanner: State change 'TurnToGoal' -> 'Stopping' | 17:53:07
  | move_base_node | MirLocalPlanner: State change 'GoalSearch' -> 'TurnToGoal' | 17:53:04
  | move_base_node | MirLocalPlanner: State change 'FollowPath' -> 'GoalSearch' | 17:53:03
  | move_base_node | MirLocalPlanner: State change 'TurnToTarget' -> 'FollowPath' | 17:53:03
  | move_base_node | MirLocalPlanner: State change 'FollowPath' -> 'TurnToTarget' | 17:52:59
  | move_base_node | Clearing segment with index = 0 | 17:52:59
  | move_base_node | MirLocalPlanner: State change 'TurnToTarget' -> 'FollowPath' | 17:52:58
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'TurnToTarget' | 17:52:58
  | move_base_node | MirLocalPlanner: State change 'TurnToTarget' -> 'Stopping' | 17:52:58
  | move_base_node | mirLocalPlanner: Got new plan - Length: 0.235928, Segments: 2 - Starting with forward motion | 17:52:58
  | move_base_node | MirLocalPlanner: Got new plan from (43.9417, 5.9917, 0.7854) to (43.95, 6.1, 0.0322469) | 17:52:58
  | move_base_node | SBPLPlanner: Succesfully created plan - Total time: 0.034 seconds - Total expands: 362 - Expands pr sec: 10672.7 - Final epsilon: 1.00 | 17:52:58
  | move_base_node | SBPLPlanner: Making plan from (43.94, 5.99, 37.5) to (43.95, 6.10, 1.8) | 17:52:58
  | move_base_node | ** MirEscapeRecovery: Succeded! ** | 17:52:58
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:57
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:56
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:55
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:54
  | move_base_node | ** MirEscapeRecovery started! ** | 17:52:53
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'TurnToTarget' | 17:52:53
  | move_base_node | MirLocalPlanner: State change 'TurnToTarget' -> 'Stopping' | 17:52:53
  | move_base_node | mirLocalPlanner: Got new plan - Length: 0.349652, Segments: 1 - Starting with backwards motion | 17:52:53
  | move_base_node | MirLocalPlanner: Got new plan from (44.225, 6.175, 0.3927) to (43.95, 6.1, 0.0322469) | 17:52:53
  | move_base_node | SBPLPlanner: Succesfully created plan - Total time: 0.038 seconds - Total expands: 1218 - Expands pr sec: 31990.3 - Final epsilon: 1.00 | 17:52:53
  | move_base_node | SBPLPlanner: Making plan from (44.23, 6.19, 33.8) to (43.95, 6.10, 1.8) | 17:52:53
  | move_base_node | ** MirEscapeRecovery: Succeded! ** | 17:52:53
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:53
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:52
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:51
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:52:50
  | move_base_node | ** MirEscapeRecovery started! ** | 17:52:50
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'TurnToTarget' | 17:52:50
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'Stopping' | 17:52:50
  | move_base_node | mirLocalPlanner: Got new plan - Length: 0, Segments: 1 - Starting with forward motion | 17:52:50
  | move_base_node | MirLocalPlanner: Got new plan from (43.95, 6.1, 0.0322469) to (43.95, 6.1, 0.0322469) | 17:52:50
  | move_base_node | SBPLPlanner: Succesfully created plan - Total time: 0.008 seconds - Total expands: 583 - Expands pr sec: 76093.4 - Final epsilon: 1.00 | 17:52:50
  | move_base_node | SBPLPlanner: Making plan from (43.93, 6.10, 1.7) to (43.95, 6.10, 1.8) | 17:52:50
MC | Setting parameter using command: ^KD 2 2 | 17:55:36
-- | -- | --
  | MC | Setting parameter using command: ^KI 2 7 | 17:55:36
  | MC | Setting parameter using command: ^KP 2 4 | 17:55:36
  | MC | Setting parameter using command: ^KD 1 2 | 17:55:36
  | MC | Setting parameter using command: ^KI 1 7 | 17:55:36
  | MC | Setting parameter using command: ^KP 1 4 | 17:55:36
  **| move_base_node | Aborting because the robot appears to be oscillating over and over. Even after executing all recovery behaviors | 17:55:36**
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'TurnToTarget' | 17:55:36
  | move_base_node | MirLocalPlanner: State change 'TurnToTarget' -> 'Stopping' | 17:55:36
  | move_base_node | mirLocalPlanner: Got new plan - Length: 0.337848, Segments: 1 - Starting with backwards motion | 17:55:36
  | move_base_node | MirLocalPlanner: Got new plan from (44.225, 6.025, -0.392685) to (43.95, 6.1, 0.0322469) | 17:55:36
  | move_base_node | SBPLPlanner: Succesfully created plan - Total time: 0.031 seconds - Total expands: 1104 - Expands pr sec: 36003.7 - Final epsilon: 1.00 | 17:55:36
  | move_base_node | SBPLPlanner: Making plan from (44.23, 6.01, -34.2) to (43.95, 6.10, 1.8) | 17:55:36
  | move_base_node | ** MirEscapeRecovery: Succeded! ** | 17:55:36
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:55:36
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:55:34
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:55:33
  | move_base_node | ** MirEscapeRecovery: Trying to escape.. ** | 17:55:32
  | move_base_node | ** MirEscapeRecovery started! ** | 17:55:32
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'TurnToTarget' | 17:55:32
  | move_base_node | MirLocalPlanner: State change 'Stopping' -> 'Stopping' | 17:55:32
  | move_base_node | mirLocalPlanner: Got new plan - Length: 0, Segments: 1 - Starting with forward motion | 17:55:32
  | move_base_node | MirLocalPlanner: Got new plan from (43.95, 6.1, 0.0322469) to (43.95, 6.1, 0.0322469) | 17:55:32
  | move_base_node | SBPLPlanner: Succesfully created plan - Total time: 0.009 seconds - Total expands: 583 - Expands pr sec: 65685.9 - Final epsilon: 1.00 | 17:55:32
  | move_base_node | SBPLPlanner: Making plan from (43.94, 6.10, 1.5) to (43.95, 6.10, 1.8) | 17:55:32

Did you encounter this problem in the previous versions of MIR<= 2.3? If yes, any solutions?

[WARN] : topic 'odom_comb' is not published by MIR

Hi,

I have an issue that this is similar to #17 although I am using the newest version mir_robot on MIR100 with 2.0.18.

In my case, though, when I launch mir.launch there are two warning messages for the unpublished topics:

  • mir_status
  • odom_comb

I am not sure if this is related to the other issue I have that is also related to another issue #7.
Although I update the system time and synchronize the MIR time from the device I have huge delays in tf_monitor.

And, because of that I can't generate the map in rviz, etc. I would appreciate any help. Thanks!

Best,
Tarik

Manually upgrading the package for compatibility with MiR SW 2.8.*

After reading different issues in this repo, and since ourselves too currently share the same condition as many here, namely we're forced to work on a software version of the MiR robot which is above the supported one (2.3.1), we were interested in manually upgrading the ROS software in order to make it fully compatible with MiR software version 2.8 and above.

Many issues were already opened in this regard, our question was, is there a list of steps that you (the code's original developers) would undertake in order to functionally update the ROS code? Since all of the robots in our lab currently work with ROS only, we'd really like to integrate the software in the framework, instead of being forced the REST API.

Thank you very much in advance, I know this isn't easy business

conflict odom frame when mapping

Hi, it is me again. I try to do the mapping by using the gmapping or hectormap for the exploration task. However, when i try to run mapping task, A strange things happen for the position of the robot regards to the map as in the picture belows:
screenshot from 2018-11-10 11-32-49

Would you have any recommend steps that i could use the mapping by my own ros package please

Reusability of the code in other MiR models

Hi author, can this package be used also with other MiR models beside the mir100? For example, if i were to change the xacro files to adapt it into the MiR500 model, can i simulate it in Gazebo with this same code?
And, more importantly, can i also connect it to the real robot using the same procedure presented in the README and move it via ROS? Any information on the topic would be very appreciated

Clicking on a goal in RViz and sending the MiR to that goal

Hi all,

This situation is similar to #21 but that issue has been closed, hence posting here (if there is a way to re-open closed issues please let me know. I would rather not post the same request in multiple threads)

I am seeing the same behavior as in #21 -- the (real) robot does not move after clicking on a destination in RViz. All the settings, publications and subscriptions are in line with what @mintar has outlined above (screenshots attached). The map displayed in RViz as well as the position of the robot in the map are accurate.

The only step I did differently was:
In RViz, I clicked "2D Nav Goal", then click on the map, as I have been doing in Gazebo.
I have not yet tried clicking on "2D Pose Estimate" and then clicking on the map because I wanted to be cautious and not have the 65kg robot run crazy in the lab :)

The robot runs fine through the MiR web interface but I don't believe you can change goals on the fly there.
Appreciate any help. As always, thank you!

--

Screenshot_2019-05-16_09-21-30
Screenshot from 2019-05-16 09-20-17
Screenshot from 2019-05-16 09-18-28
Screenshot_2019-05-16_09-17-39

Add documentation about MIR and mir_bridge functionalities

We recently got a new MIR200 and since it comes with a new software version, it was not directly compatible with this ROS driver.

We spent quite some time to figure out, how the MIR would work, how it connects with rosbridge and why it was not working right away. With the insight we obtained up to now, we could have saved quite some of it, if there would have been some more documentation, e.g.

  • That MIR is actually running ROS internally (although that didn't really take long to figure out)
  • A figure of the architecture like ROS - mir_driver - rosbridge - rosbridge - MIR
  • That one can actually just connect to the roscore on MIR. I misread the network specifications and thought that all the ports would be closed, so I though our only access would be through rosbridge.

All the manuals I got with the MIR leave out, that it runs ROS and a lot of other tips and tricks that appear in various issues here. It seems to me that it would be a lot of help for people if this implicit knowledge would be expressed somewhere.
What do you think?

More of a question, than a issue.

Hi @mintar!
You talked about doing actionlib server/client if the intention is to publish a pose to the MiR robot read in an comment from the issue section.

My goal is to retrieve/load the different positions of a mission created in MiR to a ROS node.
The alternatives i have though about is either to have a subscriber to retrieve the current goal pose of the robot and save the pose objects in database. But the disadvantage would be that the robot would need to do an initial run of the mission. Also implement an actionlib server/client for this.

The other would be to use JSON and REST API to retrieve the position from the mission. This approach would mean that the initial run of the mission is not needed. actionlib would also be implemented here.

My question to you is if these approaches or not is the most effective approach? Some kind of help would be appreciated

Could not find a package configuration file provided by "costmap_queue"

CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package):
  Could not find a package configuration file provided by "costmap_queue"
  with any of the following names:

    costmap_queueConfig.cmake
    costmap_queue-config.cmake

  Add the installation prefix of "costmap_queue" to CMAKE_PREFIX_PATH or set
  "costmap_queue_DIR" to a directory containing one of the above files.  If
  "costmap_queue" provides a separate development package or SDK, be sure it
  has been installed.
Call Stack (most recent call first):
  mir_robot/mir_dwb_critics/CMakeLists.txt:6 (find_package)


-- Could not find the required component 'costmap_queue'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "costmap_queue"
  with any of the following names:

    costmap_queueConfig.cmake
    costmap_queue-config.cmake

  Add the installation prefix of "costmap_queue" to CMAKE_PREFIX_PATH or set
  "costmap_queue_DIR" to a directory containing one of the above files.  If
  "costmap_queue" provides a separate development package or SDK, be sure it
  has been installed.
Call Stack (most recent call first):
  mir_robot/mir_dwb_critics/CMakeLists.txt:6 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/chbloca/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/chbloca/catkin_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed
chbloca@chbloca-ThinkPad-T470s:~/catkin_ws$ 

How come does this error appear during compilation since I have done previously:
$ sudo apt-get install ros-kinetic-navigation

Dead reckoning with a MiR100

Hi all,

My MiR100 robot (like all others) is really "hesitant" while docking and I am trying to use dead reckoning for the last meter or so of travel so it can dock faster. Even a couple of seconds saved per docking action is a big saving for me.

However, dead reckoning is affected by errors (due to slippage or bumps or uneven surfaces) that may worsen as the robot travels more. Does any one have any ideas on what other kind of feedback I can use in an indoor environment in addition to the odometry? Triangulation using transmitters/receivers or GPS is not an option. Is there any way to extract localization data using the MiR's "out of the box" sensors? Using the camera to recognize fiducials to estimate pose is an option but I am looking for something quick and relatively easier than that for now.

I know the coordinates of different locations on my map in a world frame, and I know the pose of the robot as it moves, also in the world frame. Can I use any capability in the /tf2 library to get another estimate of the robot's current pose. I can then try fusing this new data with information that I am getting from the /odom topic?

Would appreciate any ideas - Thanks!

When adding camera topics, lag is huge

Hello. I have been testing the addition of the camera topics to the mir_robot/mir_driver/nodes/mir_bridge.py. The problem comes when there is a huge lag on the streaming of the topic /camera_floor/driver/color/image_raw so does /camera_floor/driver/depth/color/points when doing the ROS bridge with roslaunch mir_driver mir.launch. I have not forgotten to comment also the other available topics which I do not need.
Why is this happening? Is there a solution to this?
Otherwise, is there any way to make compatible the move_base messages between the MiR and the PC (#20)? I do really need a good streaming on the camera and a functional move_base node simultaneously..

Which topic to publish actions?

Hi guys!!

I have made a script which through python library requests and RestAPI retrieved the x,y and theta coordinates from position markers made in the map of the mir.
The rest of my plan is to take these coordinates and publish them over an simple server/client action and my question is to which topic to publish these values to??
I have looked over the topics /robot_pose, /amcl_pose, move_base_node/current_goal and move_base/feedback and which all publishes the x,y, theta of the robot.

I have also taken a look at which kind of messages these topics publishes and the two which i think is the most relevant is the messages of move_base_node/current_goal and move_base/feedback which publishes messages of the type geometry_msgs/PoseStamped and MoveBaseActionFeedback.

Any help would be appreciated! Thank you in advance

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.