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

How to get rviz? #85

Open
werner291 opened this issue Feb 26, 2021 · 4 comments
Open

How to get rviz? #85

werner291 opened this issue Feb 26, 2021 · 4 comments

Comments

@werner291
Copy link

werner291 commented Feb 26, 2021

Hi, sorry for opening so many issues, I think there's something basic I'm not quite getting.

I have added rosPackages.noetic.rviz to the buildInputs of the shell, and nix-shell starts without errors, but then I get rviz: command not found

I'm running into a lot of issues like this... Where the package is definitely there in my /nix/store, but I'm getting not found errors. Is there a command I'm missing that sets up paths?

@lopsided98
Copy link
Owner

I can't reproduce this. The following shell works correctly for me:

with import <nix-ros-overlay> {};

mkShell {
  buildInputs = [
      rosPackages.noetic.rviz
  ];
}

For packages with binaries in bin, there is nothing ROS specific going on; the package should just get added to PATH. Some ROS packages don't install binaries to bin and need to be started with rosrun, but this is not the case for rviz.

@werner291
Copy link
Author

werner291 commented Feb 26, 2021

Oh... it's the shellHook in my shell.nix file.

I was trying to implement this: #82 (comment) which does give me the Gazebo plugins, but in turn apparently breaks access to rviz.

Commenting the shellHook out gets rviz back... But I still want those plugins. I don't recall if it's possible to concatenate the shellHooks?

let
    moz_overlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz);
    ros_tar = (builtins.fetchTarball {
        name = "nix-ros-overlay";
        #url = "https://github.com/lopsided98/nix-ros-overlay/archive/99f3f46f30549d6aee851b4ef0c341fbc36c1759.tar.gz";
        url = "https://github.com/lopsided98/nix-ros-overlay/archive/cff345f1dc1a3ada3be82e8456ce2ab73be03198.tar.gz";
    });
    ros_overlay = import (ros_tar + "/overlay.nix" );
    nixpkgs = import ros_tar { overlays = [ moz_overlay ]; };
    rust = (nixpkgs.rustChannelOf { channel = "stable"; }).rust.override {
        extensions = [ "rust-src" "rust-analysis" "rls-preview" ];
    };
in
    { pkgs ? nixpkgs }:
pkgs.mkShell {
  buildInputs = with pkgs; with rosPackages.noetic; [
    gazebo
    rust
    gazebo-plugins
    gazebo-ros
    gazebo-ros-pkgs
    gazebo-ros-control
    robot-state-publisher
    hector-slam
    roslaunch
    rostopic
    rosbash
    xacro
    urdf-tutorial
    catkin
    cmake
    gtk3
    libGL
    ros-tutorials
    geometry-tutorials
    rqt-tf-tree
    rviz
    ros-environment
  ];
  
  LD_LIBRARY_PATH = with pkgs.xlibs; "${pkgs.libGL}/lib";

  # Commenting this out brings rviz back.
  shellHook = "source '${pkgs.rosPackages.noetic.gazebo}/share/gazebo-11/setup.sh'
               export GAZEBO_PLUGIN_PATH=\${GAZEBO_PLUGIN_PATH}:${nixpkgs.rosPackages.noetic.gazebo-ros-control.outPath}/lib
               export ROS_PACKAGE_PATH=\${ROS_PACKAGE_PATH}:${nixpkgs.rosPackages.noetic.urdf-tutorial.outPath}
               export ROS_PACKAGE_PATH=\${ROS_PACKAGE_PATH}:${nixpkgs.rosPackages.noetic.rviz}
               export ROS_PACKAGE_PATH=\${ROS_PACKAGE_PATH}:${nixpkgs.rosPackages.noetic.xacro.outPath}
               source devel/setup.bash";
}

@lopsided98
Copy link
Owner

The problem is source devel/setup.bash. That file contains the environment variable values that were used when you first created your catkin workspace, and it overrides the environment variables from nix-shell. The documentation for devel/local_setup.bash makes it sound like it should prevent this problem, but I've found that it doesn't work right either. The only solution I have found so far is to delete the devel and build folders every time I change the packages in the shell.

@werner291
Copy link
Author

werner291 commented Feb 27, 2021

Oh, that works, indeed!

One thing you could do, perhaps, is take a parameter to the catkin workspace directory, then run catkin_make (or whatever part of it generates the environment variables) and source the setup script when building the shell environment.

Since catkin is based on cmake, IIRC it should be possible to perform an out-of-source build, so you don't have to modifiy the workspace.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants