【indemind双目惯性相机调试】sudo后找不到命令问题,环境变量问题

问题1

报错

kanhao100@ubuntu-x86 ~ % roslaunch imsee_ros_wrapper start.launch
RLException: [start.launch] is neither a launch file in package [imsee_ros_wrapper] nor is [imsee_ros_wrapper] a launch file name
The traceback for the exception was written to the log file

解决

source /home/kanhao100/IMSEE-SDK/ros/devel/setup.zsh 

问题2

报错

kanhao100@ubuntu-x86 ~ % roslaunch imsee_ros_wrapper start.launch              
... logging to /home/kanhao100/.ros/log/f3bd5ef2-d2f4-11ed-ba51-f09e4ab0090f/roslaunch-ubuntu-x86-8178.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://ubuntu-x86:36885/

SUMMARY
========

PARAMETERS
 * /imsee/imsee_wrapper_node/enable_depth: False
 * /imsee/imsee_wrapper_node/enable_detector: False
 * /imsee/imsee_wrapper_node/enable_disparity: False
 * /imsee/imsee_wrapper_node/enable_point: False
 * /imsee/imsee_wrapper_node/enable_rectified: False
 * /imsee/imsee_wrapper_node/framerate: 50
 * /imsee/imsee_wrapper_node/imu_frequency: 100
 * /imsee/imsee_wrapper_node/resolution_index: 1
 * /rosdistro: melodic
 * /rosversion: 1.14.13

NODES
  /imsee/
    imsee_wrapper_node (imsee_ros_wrapper/imsee_wrapper_node)

ROS_MASTER_URI=http://localhost:11311

process[imsee/imsee_wrapper_node-1]: started with pid [8193]
[ INFO] [1680618804.215470243]: Initializing nodelet with 8 worker threads.
Module Parameters Load Fail!
[imsee/imsee_wrapper_node-1] process has died [pid 8193, exit code -11, cmd /home/kanhao100/IMSEE-SDK/ros/devel/lib/imsee_ros_wrapper/imsee_wrapper_node __name:=imsee_wrapper_node __log:=/home/kanhao100/.ros/log/f3bd5ef2-d2f4-11ed-ba51-f09e4ab0090f/imsee-imsee_wrapper_node-1.log].
log file: /home/kanhao100/.ros/log/f3bd5ef2-d2f4-11ed-ba51-f09e4ab0090f/imsee-imsee_wrapper_node-1*.log
[imsee/imsee_wrapper_node-1] restarting process
process[imsee/imsee_wrapper_node-1]: started with pid [8222]
[ INFO] [1680618814.521321294]: Initializing nodelet with 8 worker threads.
Module Parameters Load Fail!
[imsee/imsee_wrapper_node-1] process has died [pid 8222, exit code -11, cmd /home/kanhao100/IMSEE-SDK/ros/devel/lib/imsee_ros_wrapper/imsee_wrapper_node __name:=imsee_wrapper_node __log:=/home/kanhao100/.ros/log/f3bd5ef2-d2f4-11ed-ba51-f09e4ab0090f/imsee-imsee_wrapper_node-1.log].
log file: /home/kanhao100/.ros/log/f3bd5ef2-d2f4-11ed-ba51-f09e4ab0090f/imsee-imsee_wrapper_node-1*.log

问题分析

该问题是由于没有root权限导致的,indemind相机这个SDK需要root权限才能运行(就很无语),因此需要加上sudo,或者sudo su等命令

问题3

报错

使用root权限运行后出现命令不存在

kanhao100@ubuntu-x86 ~ % sudo roslaunch imsee_ros_wrapper start.launch
[sudo] kanhao100 的密码: 
sudo: roslaunch:找不到命令

问题分析

这个问题是由于环境变量的问题导致的。一般来说,sudo命令会使用root用户的环境变量,而不是当前用户的环境变量。如果当前用户的环境变量中已经包含了需要的路径,但是root用户的环境变量中没有包含,就会出现这个问题。
实例说明root环境和普通用户环境的区别:

kanhao100@ubuntu-x86 ~ % cmake -version                               
cmake version 3.17.0
kanhao100@ubuntu-x86 ~ % sudo cmake -version
cmake version 3.10.2

运行:

sudo -E roslaunch <package> <launch_file>

这个命令会使用当前用户的环境变量来运行roslaunch命令,从而解决了找不到命令的问题。

如果还是提示找不到命令

可以通过编辑sudo的配置文件来添加路径。打开终端并输入以下命令:

sudo visudo

这会打开sudo配置文件。在文件末尾添加以下行:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/ros/melodic/bin"

其中/opt/ros/melodic/bin为roslaunch所在的路径。保存并退出文件,然后尝试再次运行命令。
如果你不知道命令所在的路径,可以使用以下命令来查找:

which roslaunch

这会显示命令所在的路径。

问题4

报错

kanhao100@ubuntu-x86 ~ % sudo -E roslaunch imsee_ros_wrapper start.launch
Traceback (most recent call last):
  File "/opt/ros/melodic/bin/roslaunch", line 34, in <module>
    import roslaunch
ImportError: No module named roslaunch

问题分析

推测还是环境变量的问题,在前面问题3中虽然将roslaunch加入了可信赖路径,但是其在执行的过程中还是需要Python解释器相关的环境变量,这些环境变量可能也发生了变化。

最后解决方案:

kanhao100@ubuntu-x86 ~ % sudo su -
root@ubuntu-x86:~# source /home/kanhao100/IMSEE-SDK/ros/devel/setup.bash
root@ubuntu-x86:~# roslaunch imsee_ros_wrapper start.launch

susu -命令都可以用于切换用户,但它们之间有一些区别。

su命令是用于切换用户的,但是它不会完全切换到新用户的环境变量。也就是说,它会将当前用户的环境变量保留下来,而不是使用新用户的环境变量。这可能会导致一些问题,例如在使用新用户的命令时,可能会出现找不到命令的错误。

su -命令也用于切换用户,但是它会完全切换到新用户的环境变量。也就是说,它会使用新用户的环境变量,而不是保留当前用户的环境变量。这样可以避免找不到命令的问题,并确保使用正确的环境变量来运行命令。

猜你喜欢

转载自blog.csdn.net/kanhao100/article/details/129963820