Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't teleoperate TB4 with remote PC #494

Open
ValentinLeglise opened this issue Nov 12, 2024 · 11 comments
Open

Can't teleoperate TB4 with remote PC #494

ValentinLeglise opened this issue Nov 12, 2024 · 11 comments
Assignees
Labels
troubleshooting System not working as expected, may be user error.

Comments

@ValentinLeglise
Copy link

ValentinLeglise commented Nov 12, 2024

Robot Model

Turtlebot4 Lite

ROS distro

Humble

Networking Configuration

Simple Discovery

OS

Ubuntu 22.04

Built from source or installed?

Installed

Package version

Type of issue

Networking

Expected behaviour

After connected the robot to the remote PC, the robot of my customer should be able to move after running "ros2 run teleop_twist_keyboard teleop_twist_keyboard", and should see all the TB4 topics with the command "ros2 topic list".

Actual behaviour

My customer can't drive his robot remotely with his PC. When he uses "ros2 run teleop_twist_keyboard teleop_twist_keyboard", or "ros2 topic pub /cmd_vel geometry_msgs/msg/Twist
"linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0" " , the robot doesn't respond. But, when he is in SSH into the robot, "ros2 topic pub /cmd_vel" works, but "ros2 run teleop_twist_keyboard" doesn't.

When he runs "ros2 topic list" on its PC, my customer only see 2 topic /rosout and /parameter_events.

Its probably a sourcing issue but, his .bashrc file and /etc/turtlebot4/setup.bash seems to be good:

.bashrc file:

'# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

CYCLONEDDS_URI='<CycloneDDS><Domain><General><DontRoute>true</></></></>'
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><DontRoute>true</></></></>'
source /etc/turtlebot4/setup.bash
source /etc/turtlebot4_discovery/setup.bash
#export ROS_DOMAIN_ID=30 #TURTLEBOT3'

/etc/turtlebot4/setup.bash

$ cat /etc/turtlebot4/setup.bash
source /opt/ros/humble/setup.bash
export ROS_DOMAIN=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

Error messages

No response

To Reproduce

  1. Connect Tb4 to remote PC
  2. run "ros2 run teleop_twist_keyboard teleop_twist_keyboard"

Other notes

No response

@ValentinLeglise ValentinLeglise added the troubleshooting System not working as expected, may be user error. label Nov 12, 2024
@PrakritTyagi
Copy link

PrakritTyagi commented Nov 22, 2024

Hi, First thing I noticed in your bashrc file is you are sourcing two setup.bash. One is for simple discovery and other is for discovery server. Comment out "source /etc/turtlebot4_discovery/setup.bash " and restart your ros2 daemon using

ros2 daemon stop

ros2 daemon start

For simple discovery, only source /etc/turtlebot4/setup.bash .

@ValentinLeglise
Copy link
Author

Hello @PrakritTyagi,

Thank you for your advice, I will suggest this to my customer.

@ValentinLeglise
Copy link
Author

ValentinLeglise commented Nov 29, 2024

Hello,

My customer modified his bashrc file, he is using "Simple Discovery" and now at the end of his file, he has:

CYCLONEDDS_URI='true</></></></>'
source /etc/turtlebot4/setup.bash,

Now in SSH he sees all topics of the robot:

ubuntu@ubuntu:~$ ros2 topic list
/battery_state
/cliff_intensity
/cmd_audio
/cmd_lightring
/cmd_vel
/diagnostics
/diagnostics_agg
/diagnostics_toplevel_state
/dock_status
/function_calls
/hazard_detection
/imu
/interface_buttons
/ip
/ir_intensity
/ir_opcode
/joint_states
/joy
/joy/set_feedback
/kidnap_status
/mobility_monitor/transition_event
/mouse
/oakd/rgb/preview/image_raw
/odom
/parameter_events
/robot_description
/robot_state/transition_event
/rosout
/scan
/slip_status
/static_transform/transition_event
/stop_status
/tf
/tf_static
/wheel_status
/wheel_ticks
/wheel_vels

But the output of same command in his PC machine is:

$ ros2 topic list
/parameter_events
/rosout

What can he do to correct this? Is it really a sourcing problem?

Thanks in advance for your help.

@ValentinLeglise
Copy link
Author

Hello ClearPath.

Is it possible to have a response for this ?

@aaronchongth
Copy link

aaronchongth commented Dec 3, 2024

Hey @ValentinLeglise! This sounds like the same network issues I encountered as well, this was how I eventually resolved it along with all my other networking issues, without fiddling with my router.

I hope this helps.

  • make sure to use the latest images (I haven't tried Jazzy images yet)
  • follow https://turtlebot.github.io/turtlebot4-user-manual/setup/basic.html, to set up the Create3 first, domain ID 0, and rmw_cyclonedds_cpp, check out my screenshot
    image
  • use turtlebot4-setup to set up domain ID 0, rmw_cyclonedds_cpp, but this time without any DDS configuration, check out my screenshot
    image

This should enable all DDS related messages between the Create3 and Raspberry pi, so while SSH'ed, teleop, and docking/undocking commands should work.

# Teleop
ros2 run teleop_twist_keyboard ^Cleop_twist_keyboard

# Dock
ros2 action send_goal /dock irobot_create_msgs/action/Dock '{}'

# Undock
ros2 action send_goal /undock irobot_create_msgs/action/Undock '{}'

Then for establishing connections with PC, I used zenoh and zenoh-bridge-ros2dds.

zenohd
  • Then on the Raspberry Pi after SSH'ed in, download and extract from https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/releases/tag/1.0.3, zenoh-plugin-ros2dds-1.0.3-aarch64-unknown-linux-gnu-standalone.zip. At this point of writing, I'm using version 1.0.3.
  • Prepare the basic zenoh client config file and save it somewhere on the raspberry pi, for example bridge.yaml,
{
  plugins: {
    ros2dds: {},
  },
  mode: "client",
}
  • Start the bridge on the raspberry pi,
./zenoh-bridge-ros2dds -c bridge.yaml
# The host machine must have `zenohd` running already
  • On the host machine, download the bridge of the same version again, but this time with your host PC's architecture, for example, zenoh-plugin-ros2dds-1.0.3-x86_64-unknown-linux-gnu-standalone.zip, extract
  • On the host machine, source your ROS workspace, set the correct ROS_DOMAIN_ID and RMW, and start another bridge using the same configuration, for example,
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
./zenoh-bridge-ros2dds -c bridge.yaml
  • You should be able to teleoperate, dock/undock, and echo all the topics you'd like from the host PC now
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

ros2 topic echo

@pvg6
Copy link

pvg6 commented Dec 7, 2024

Hi @aaronchongth is that no need to modify any XML file for the cyclonedds_uri..

@aaronchongth
Copy link

Hey @pvg6, yeah in my case, I just left CYCLONEDDS_URI empty so that it will just use the default config

@pvg6
Copy link

pvg6 commented Dec 7, 2024

@aaronchongth
I followed this https://hub.docker.com/r/theconstructai/zenoh-bridge-ros2dds

PI to Create3 communication is but host to PI is not there how can i connect to PI..
or better to switch discovery server

@aaronchongth
Copy link

aaronchongth commented Dec 7, 2024

@pvg6 yup that will only resolve the connection between the Create3 and Raspberry Pi, but not guaranteed with the host because it only bridges domain 0 and 1 internally.

My method sets both the Create3 and the Raspberry pi to use domain 0 and cyclonedds with default configurations. This should already allow SSH into the raspberry pi to teleop, dock/undock. Then set up bridges between the raspberry pi and host PC, so we can teleop from host PC without SSH.

@pvg6
Copy link

pvg6 commented Dec 8, 2024

@aaronchongth the solution you provided will solve the memory issues ( Full red light) caused by create3..
https://hub.docker.com/r/theconstructai/zenoh-bridge-ros2dds this solved the memory issue..

please how can i solve the comple red light issue...

@aaronchongth
Copy link

@pvg6 according to https://iroboteducation.github.io/create3_docs/hw/face/, solid red light ring means a robot error and not related to networking. Looks like you will need to cycle power, or debug further

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
troubleshooting System not working as expected, may be user error.
Projects
None yet
Development

No branches or pull requests

6 participants