目录

ROS-melodic安装Kinect V2步骤和测试及问题解决
gazebo仿真时实时循环启动控制器失败问题解决
ROS中V-REP安装和编译的问题解决
Moveit+Gazebo联合仿真问题解决
Gazebo9的进程死亡问题解决
roscore运行报错Unable to contact my own server
rosrun rqt_reconfigure rqt_reconfigure时出现PluginManager._load_plugin() could not load plugin
解决rosdep init和rosdep update根本问题

ROS-melodic安装Kinect V2步骤和测试及问题解决

要想Kinect V2在ROS上运行。
需要libfreenect2 和 iai_kinect2两个驱动

再用摄像头前,要确保你安装opencv  ,我用的版本是opencv-3.4.3

安装教程网上比较多,这里就不啰嗦了

一.首先安装libfreenect2

1.安装依赖

sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev 
sudo apt-get install libglfw3-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libusb-devsudo apt-get install libturbojpeg0-dev

2.开始安装

下载源码

git clone https://github.com/OpenKinect/libfreenect2.git

安装

cd libfreenect2
mkdir build 
cd build
cmake ..
make
sudo make install

设定udev路径

#设定udev rules:(填好自己libfreenect2的路径)
sudo cp libfreenect2/platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

3.测试

#运行build目录下的例子
./bin/Protonect

 

二.安装iai_kinect2驱动

1,首先进入ROS的工作空间下载源码

cd ~/catkin_ws/src/
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .

在这一步rosdep install -r --from-paths .会报错

解决方法

rosdep install --from-paths ~/catkin_ws/src/iai_kinect2 --ignore-src -r

然后开始编译

cd ~/catkin_ws           
catkin_make -DCMAKE_BUILD_TYPE="Release"      #编译

#如果没有添加永久环境变量,则每次都需要source以下
source ~/catkin_ws/devel/setup.bash 
#添加ros永久环境变量
echo "source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc

我在编译时候出现了问题,如下

/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp: In member function ‘void Kinect2Bridge::initCompression(int32_t, int32_t, bool)’:
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: error: ‘CV_IMWRITE_JPEG_QUALITY’ was not declared in this scope
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: note: suggested alternative: ‘CV_WRITE_SEQ_ELEM’
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
                            CV_WRITE_SEQ_ELEM
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:467:28: error: ‘CV_IMWRITE_PNG_COMPRESSION’ was not declared in this scope
     compressionParams[2] = CV_IMWRITE_PNG_COMPRESSION;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:469:28: error: ‘CV_IMWRITE_PNG_STRATEGY’ was not declared in this scope
     compressionParams[4] = CV_IMWRITE_PNG_STRATEGY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:470:28: error: ‘CV_IMWRITE_PNG_STRATEGY_RLE’ was not declared in this scope
     compressionParams[5] = CV_IMWRITE_PNG_STRATEGY_RLE;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp: In member function ‘void Kinect2Bridge::initCompression(int32_t, int32_t, bool)’:
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: error: ‘CV_IMWRITE_JPEG_QUALITY’ was not declared in this scope
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:465:28: note: suggested alternative: ‘CV_WRITE_SEQ_ELEM’
     compressionParams[0] = CV_IMWRITE_JPEG_QUALITY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
                            CV_WRITE_SEQ_ELEM
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:467:28: error: ‘CV_IMWRITE_PNG_COMPRESSION’ was not declared in this scope
     compressionParams[2] = CV_IMWRITE_PNG_COMPRESSION;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:469:28: error: ‘CV_IMWRITE_PNG_STRATEGY’ was not declared in this scope
     compressionParams[4] = CV_IMWRITE_PNG_STRATEGY;
                            ^~~~~~~~~~~~~~~~~~~~~~~
/home/zztsj/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:470:28: error: ‘CV_IMWRITE_PNG_STRATEGY_RLE’ was not declared in this scope
     compressionParams[5] = CV_IMWRITE_PNG_STRATEGY_RLE;
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~

查阅资料好像是版本不对应的问题,用oopencv2可以成功,用opencv3的话需要指定安装路径,我的是默认安装的,就出现了一系列没有定义的问题

我的解决方法,没有安装过opencv3,而是改了一种定义方式

将CV_IMWRITE_JPEG_QUALITY;
改为cv::IMWRITE_JPEG_QUALITY;

剩下的改法相同,改完就编译好了,

2.测试

roslaunch kinect2_bridge kinect2_bridge.launch    #运行kinect2自带的launch

rosrun kinect2_viewer kinect2_viewer              #查看运行结果。

 

到此,驱动就安装完成了。 

gazebo仿真时实时循环启动控制器失败问题解决

在进行机械臂仿真时,使用gazebo进行仿真,使用ROS控制器。

在gazebo中启动ros控制器,命令如下

$: roslaunch seven_dof_arm_gazebo seven_dof_arm_gazebo_control.launch

 gazebo中出现了机械臂的的模型,但是有些需要的话题没有生成。不能去控制机械臂,而且在仿真时

出现了以下错误

[FATAL] [1585468475.421218140]: Failed to start controller in realtime loop. This should never happen.

大概的意思是说在实时循环中启动控制器失败。

然后也没有也没有遇到过这个问题,我自己觉得是少了一些ROS控制器,我又从新添加了相应的ROS控制器,还是没有解决,之后查了很多资料,

目前还是尚不清楚真正的原因,但我认为是已安装的软件包过时了,

我从新安装更新后,错误消失了。

解决方法,在终端输入:sudo apt-get --only-upgrade install ros-*

然后就会去下载和配置,配置成功了。

相应的话题也生成了,可以正常的控制机械臂了。

ROS中V-REP安装和编译的问题解决

首先要使用V-REP,就要下载下来,我的系统是ubuntu18.04.

下载命令$;wget http://copperliarobotics.com/files/V-REP_PRO_EDU_V3_4_0_linux.tar.gz

下载完成后,提取存档

命令$:tar -zxvf V-REP_PRO_EDU_V3_4_0_linux.tar.gz

在这里下载可能会遇到下载很慢的问题,可能使用默认的源下载会比较慢,可以选择进行换源,我这里换的是

阿里的源,方法如下:

进入源文件$:vim /etc/apt/sources.list

阿里的源

1 deb http://mirrors.aliyun.com/ubuntu/ bionic main r   estricted universe multiverse                     
 2 deb-src http://mirrors.aliyun.com/ubuntu/ bionic ma   in restricted universe multiverse
 3
 4 deb http://mirrors.aliyun.com/ubuntu/ bionic-securi   ty main restricted universe multiverse
 5 deb-src http://mirrors.aliyun.com/ubuntu/ bionic-se   curity main restricted universe multiverse
 6
 7 deb http://mirrors.aliyun.com/ubuntu/ bionic-update   s main restricted universe multiverse
 8 deb-src http://mirrors.aliyun.com/ubuntu/ bionic-up   dates main restricted universe multiverse
 9
10 deb http://mirrors.aliyun.com/ubuntu/ bionic-propos   ed main restricted universe multiverse
11 deb-src http://mirrors.aliyun.com/ubuntu/ bionic-pr   oposed main restricted universe multiverse
12
13 deb http://mirrors.aliyun.com/ubuntu/ bionic-backpo   rts main restricted universe multiverse
14 deb-src http://mirrors.aliyun.com/ubuntu/ bionic-ba   ckports main restricted universe multiverse

 将上面的源替换源文件里面的默认源

然后在更新一下$:sudo apt-get update  ,就可以了。

接下来我们要给提取出来的文件改一个名字,方便定义环境变量

命令$:mv V-REP_PRO_EDU_V3_4_0_Linux v-rep

为了方便访问V-REP资源,可以设置一个环境变量(VREP_RPPT)指向V-REP的主文件

命令$:echo "export VREP_ROOT = ~/home/qqtsj/v-rep >> ~/.bashrc"   这里需要选择你自己对应的文件路径。

下载两个软件包到工作空间就可以编译了

git clone https://github.com/jocacace/vrep_common.git
git clone https://github.com/jocacace/vrep_plugin.git

 在工作空间使用catkin_make进行编译

快编译成功时却出现以下错误

[100%] Linking CXX shared library /home/qqtsj/catkin_ws/devel/lib/libv_repExtRos.so
/usr/bin/ld: 找不到 -lroslib
/usr/bin/ld: 找不到 -lrosconsole
/usr/bin/ld: 找不到 -lrostime
/usr/bin/ld: 找不到 -lrospack
/usr/bin/ld: 找不到 -lroscpp_serialization
/usr/bin/ld: 找不到 -lroscpp
/usr/bin/ld: 找不到 -ltf
/usr/bin/ld: 找不到 -limage_transport
collect2: error: ld returned 1 exit status
vrep_plugin/CMakeFiles/v_repExtRos.dir/build.make:297: recipe for target '/home/qqtsj/catkin_ws/devel/lib/libv_repExtRos.so' failed
make[2]: *** [/home/qqtsj/catkin_ws/devel/lib/libv_repExtRos.so] Error 1
CMakeFiles/Makefile2:13873: recipe for target 'vrep_plugin/CMakeFiles/v_repExtRos.dir/all' failed
make[1]: *** [vrep_plugin/CMakeFiles/v_repExtRos.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

 经过查阅资料,原因是是因为库没有链接好。

解决方案如下:

例如第一条$:/usr/bin/ld: 找不到 -lroslib

确定该文件的所在目录

命令$:locate libroslib   得到如下:

/opt/ros/melodic/lib/libroslib.so

 然后链接库,输入命令;

sudo ln -s /opt/ros/melodic/lib/libroslib.so /usr/lib/libroslib.so

 下面的库连接的以此类推

就可以解决了。

Moveit+Gazebo联合仿真问题解决

首先配置好moveit!配置软件包和gazebo的接口。

将相应的文件放到对应的软件包,这里就不一一说了,

然后执行命令

$:roslaunch seven_dof_arm_gazebo seven_dof_arm_bringup_moveit.launch

在rviz中启动运动规划,在gazebo中执行运动规划。

如果在启动rviz后,MotionPlanning插件没有默认加载的话,就需要我们手动加载了

步骤:进入rviz——点击Add——选中MotionPlanning——选择确定就可以了

就会显示在moveit中配置好的机械臂了。

但是在gazebo中不执行规划的路径,刚开始觉得是对应的话题节点没有启动,没发过去,查阅了话题,相应的话题都启动了。

然后查阅了资料,好像是Moveit所需的软件包没有下载,然后把对应的软件包插件全部下载了,也方便后面的学习。

命令:

sudo apt-get install ros-melodic-control*
sudo apt-get install ros-melodic-gazebo-ros*
sudo apt-get install ros-melodic-joint-trajectory*

 下载完

Gazebo就可以执行运动规划了

在rviz中设置好运动规划,点击Plan and Excute,就可以将rviz中的运动规划发送到Gazebo上执行了。

 

turtlebot3软件包下载地址

https://github.com/ROBOTIS-GIT/turtlebot3

https://github.com/ROBOTIS-GIT/turtlebot3_msgs

https://github.com/ROBOTIS-GIT/turtlebot3_simulations

https://github.com/ROBOTIS-GIT/turtlebot3_applications

https://github.com/ROBOTIS-GIT/turtlebot3_deliver

Gazebo9的进程死亡问题解决

在使用ROS编写一个基本的关节控制器时,使用Gazebo运行该控制器,

然后我下载了Gazebo9,进行 仿真

运行启动文件后出现以下问题

process has died [pid 18299, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/jove-u18/.ros/log/630c298c-48c4-11ea-8111-000c29fced79/gazebo-2.log]. log file: /home/jove-u18/.ros/log/630c298c-48c4-11ea-8111-000c29fced79/gazebo-2*.log

 意思是说我当前的进程死亡了,我感觉是因为版本不对应的原因,然后更新了Gazebo相应的软件包。

还是没有解决,通过查阅资料,找到了一些方法,

通过命令$: killall gzserver  去杀死同一进程的所有进程,然后从新启动,对于我来说,

还是没有解决我的问题。

我查看了以下Gazebo的信息

如下:symbol lookup error: /usr/lib/x86_64-linux-gnu/libsdformat.so.6: undefined symbol: _ZTIN8ignition4math2v45ColorE

大概的意思是gzserver符号查找错误

解决方法如下

命令$:sudo apt upgrade

运行成功后,重新启动电脑,问题就解决了。

roscore运行报错Unable to contact my own server

 大概几天没有运行ROS了,今天运行一下出现以下错误,在此记录一下

zztsj@tsj:~$ roscore
... logging to /home/zztsj/.ros/log/3455db8a-1536-11eb-9296-9822efa1466f/roslaunch-tsj-8025.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.

RLException: Unable to contact my own server at [http://tsj:40035/].
This usually means that the network is not configured properly.
                                                                                          
A common cause is that the machine cannot ping itself.  Please check                      
for errors by running:                                                                    
                                                                                          
        ping tsj                                                                          
                                                                                          
For more tips, please see                                                                 
                                                                                          
        http://wiki.ros.org/ROS/NetworkSetup                                              
                                                                                          
The traceback for the exception was written to the log file

 

解决方法如下:

进入到配置文件

vim ~/.bashrc

加入以下两段代码

1  export ROS_HOSTNAME=localhost
2 export ROS_MASTER_URI=http://localhost:11311

更新环境变量

source ~/.bashrc

就顺利解决了,再次启动就可以正常的跑起来了。

可到官网去查找方法:http://wiki.ros.org/ROS/NetworkSetup

rosrun rqt_reconfigure rqt_reconfigure时出现PluginManager._load_plugin() could not load plugin

在进行ros动态参数配置过程中,运行rosrun rqt_reconfigure rqt_reconfigure

出现一下问题

PluginManager._load_plugin() could not load plugin "rqt_reconfigure/Param":
Traceback (most recent call last):
  File "/opt/ros/melodic/lib/python2.7/dist-packages/qt_gui/plugin_handler.py", line 102, in load
    self._load()
  File "/opt/ros/melodic/lib/python2.7/dist-packages/qt_gui/plugin_handler_direct.py", line 55, in _load
    self._plugin = self._plugin_provider.load(self._instance_id.plugin_id, self._context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/qt_gui/composite_plugin_provider.py", line 72, in load
    instance = plugin_provider.load(plugin_id, plugin_context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/qt_gui/composite_plugin_provider.py", line 72, in load
    instance = plugin_provider.load(plugin_id, plugin_context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_gui_py/ros_py_plugin_provider.py", line 61, in load
    return super(RosPyPluginProvider, self).load(plugin_id, plugin_context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/qt_gui/composite_plugin_provider.py", line 72, in load
    instance = plugin_provider.load(plugin_id, plugin_context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_gui/ros_plugin_provider.py", line 106, in load
    return class_ref(plugin_context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/param_plugin.py", line 51, in __init__
    self._plugin_widget = ParamWidget(context)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/param_widget.py", line 105, in __init__
    self, rp, self.sig_sysmsg
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/node_selector_widget.py", line 102, in __init__
    self._update_nodetree_pernode()
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/node_selector_widget.py", line 341, in _update_nodetree_pernode
    TreenodeQstdItem.NODE_FULLPATH
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/treenode_qstditem.py", line 94, in __init__
    self._set_param_name(grn_current_treenode)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/treenode_qstditem.py", line 246, in _set_param_name
    self._toplevel_treenode_name = self._list_treenode_names[0]
IndexError: list index out of range

解决办法:

将/opt/ros/melodic/lib/python2.7/dist-packages/rqt_reconfigure/node_selector_widget.py文件中第325行改为if node_name_grn in self._nodeitems or node_name_grn == '':即可

解决rosdep init和rosdep update根本问题

ubuntu18.04安装melodic遇到的问题

针对目前安装ROS时出现的一些指令问题进行解析,主要卡在rosdep init和rosdep update这里,主要是被墙的太严重了。

下面开始解决它

sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

 在进行rosdep init的时候需要联网访问这个网址,然而这个网址无法进入,导致一直卡这报错过不去,目前网上有很多方法,我也都尝试了,可以参考一下

https://blog.csdn.net/u013468614/article/details/102917569

https://www.guyuehome.com/12640

https://zhuanlan.zhihu.com/p/43345574https://link.zhihu.com/?target=https%3A//www.cnblogs.com/liwe1004/p/11795932.htmlhttps://link.zhihu.com/?target=https%3A//blog.csdn.net/maolong2725/article/details/82530722

也可以找到一个文件,加一句话主要看运气,比较玄学,方法如下:

#打开hosts文件
sudo vim /etc/hosts
#在文件末尾添加
151.101.84.133  raw.githubusercontent.com
#保存后退出再尝试<br>或者添加<br>151.101.76.133 raw.githubusercontent.com

解决思路

在进行rosdep init 的时候访问raw.githubusercontent.com,这个其实就是github的用户数据服务器。rosdep 程序下载的就是github.com/ros/rosdistro这个包里的yaml文件。
因此得到一个思路就是:首先下载github.com/ros/rosdistro包,将下列文件里面的默认的进入raw.githubusercontent.com去下载文件的url地址全部改为本地的下载的包的地址。
解决过程

第一步

首先进入www.github.com/ros/rosdistro去把这个包下载下来

包名rosdistro-master应改为rosdistro

也可以从我的网盘下载

链接:https://pan.baidu.com/s/1B4E_spuSJ_E1MANxWVrLfw提取码:ja5d

第二步

修改这个包中rosdep/source.list.d/下的文件20-default.list,将这个文件中指向raw.githubusercontent.com的url地址全部修改为指向本地文件的地址(自己放置该包的地址),也就是该下载好的包的地址:以下是我修改好的样例:

# os-specific listings first
yaml file:///home/xxx/rosdistro/rosdep/osx-homebrew.yaml osx
 
# generic
yaml file:///home/xxx/rosdistro/rosdep/base.yaml
yaml file:///home/xxx/rosdistro/rosdep/python.yaml
yaml file:///home/xxx/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/xxx/rosdistro/releases/fuerte.yaml fuerte
 
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

***注意:***在py语言中:url本地文件地址格式是:file://+文件地址,后面更改其他文件中地址的时候也一样。

第三步

修改/usr/lib/python2.7/dist-packages/rosdep2/main.py中的默认的url的地址,但是经过代码阅读,该文件中并不存在指向raw.githubusercontent.com的代码。而且经过对代码的分析,提示报错的代码就在该文件中

def command_init(options):
    try:
        data = download_default_sources_list()
    except URLError as e:
        print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.' % (DEFAULT_SOURCES_LIST_URL))
        return 4
    except DownloadFailure as e:
        print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.' % (DEFAULT_SOURCES_LIST_URL))

由于其调用了download_default_sources_list()这个函数
而该函数就在/usr/lib/python2.7/dist-packages/rosdep2该文件夹下面的sources_list.py文件里面。而这个文件里面的代码则进行了访问raw.githubusercontent.com的操作,因此修改该默认url即可

# default file to download with 'init' command in order to bootstrap
# rosdep
DEFAULT_SOURCES_LIST_URL = 'file:///home/xxx/rosdistro/rosdep/sources.list.d/20-default.list'
 
# seconds to wait before aborting download of rosdep data

总结:该步实际并不是修改 main.py 文件里面默认url的指向地址,而是修改同文件夹下的sources_list.py文件里面的代码

第四步

修改以下两个文件里面的代码,修改方法类似:

/usr/lib/python2.7/dist-packages/rosdep2/rep3.py
/usr/lib/python2.7/dist-packages/rosdistro/__init__.py

下面是我分别修改后的样例:

修改rep3.py文件

/usr/lib/python2.7/dist-packages/rosdep2/rep3.py文件:
# location of targets file for processing gbpdistro files
REP3_TARGETS_URL = 'file:///home/xxx/rosdistro/releases/targets.yaml'
 
# seconds to wait before aborting download of gbpdistro data

修改__init__.py的文件

/usr/lib/python2.7/dist-packages/rosdistro/__init__.py的文件:

  

# index information
 
DEFAULT_INDEX_URL = 'file:///home/xxx/rosdistro/index-v4.yaml'
 
def get_index_url():

然后进行sudo rosdep init  就没有什么问题了

如果你是ubuntu20.04安装noetic的话,就要更改一些细节了:noetic不是更改/usr/lib/python2.7/dist-packages/了,而是更改/usr/lib/python3/dist-packages/

最后感谢原博主:

https://blog.csdn.net/nanianwochengshui/article/details/105702188