I have been using ROS 2 Humble on Ubuntu 22.04.4 for about 3 months now and haven't had any big issues until now. My issue is quite strange; the terminals on my desktop are unable to communicate with each other through ROS 2.

When I run ros2 run demo_nodes_cpp talker in a terminal, it starts publishing messages. However, running ros2 topic list results in only /rosout and /parameter_events, and ros2 node list returns nothing. This is true for any run or launch I try (ex. launching gazebo sim).

In addition, running ros2 multicast receive and ros2 multicast send in seperate terminals results in a recieved message, so that is not the problem.

A strange thing is that I can still communicate with other systems through the network. For example, I can start my robot (namespace /robot1) and I am able to see all of the topics and nodes on my desktop. In addition, while the robot is running I am able to use the talker and listener just fine on the desktop, likely because it is being routed through the robot/network. Unfortunately, when I turn the robot off the desktop reverts back to not working, and strangely, the robot's topics and nodes remain listed on the desktop and never clear even after the robot has powered off. These topics still stick even when I reopen the terminal and only disappear after I reboot the desktop.

I have also tried reinstalling Humble through sudo apt remove ros-humble-desktop && sudo apt autoremove && sudo apt install ros-humble-desktop but this does not resolve the issue.

One thing I will add is that anaconda is active on this desktop, although I do not use it and have never touched it (it is my friend's old computer). Around the time this problem came up, I had to run conda deactivate in a terminal to build a package using a different python version. Now, even if conda is inactive and I get rid of the conda activation in my .bashrc, it still gives me issues. I am not sure if that is the problem, but I don't think I was doing anything else when this problem appeared.

Here is my .bashrc if you want to take a look:

# ~/.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;;

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

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

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

# 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)

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

# 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

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.)

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

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

# 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'

# 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

# 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
#source /opt/ros/noetic/setup.bash
#export ROS_IP=
source /opt/ros/humble/setup.bash
source /etc/turtlebot4/setup.bash
source ~/turtlebot4_ws/install/setup.bash 
#export ROS_IP=localhost
#export ROS_MASTER_URI=http://localhost:11311
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/biorobotics/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
if [ -f "/home/biorobotics/anaconda3/etc/profile.d/conda.sh" ]; then
    . "/home/biorobotics/anaconda3/etc/profile.d/conda.sh"
    export PATH="/home/biorobotics/anaconda3/bin:$PATH"
unset __conda_setup
# <<< conda initialize <<<
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
export EDITOR="code --wait"
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
export EDITOR="code --wait"
source /etc/turtlebot4_discovery/setup.bash

If I need to add any more info, please let me know. Thanks for the help!

New contributor
Turtle403 is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.