grid_map(6):grid-mapping-in-ROS编译运行

目录

0 前言

1 下载编译

1.1 下载

1.2 编译

2  从点云数据包创建栅格地图

2.1 ImportError: cannot import name perf_counter

ImportError: dynamic module does not define module export function (PyInit__tf2)

2.2 目录不对

2.3 缺包

2.4 NameError: name 'reload' is not defined

2.5 运行效果


0 前言

        github仓地址:https://github.com/lukovicaleksa/grid-mapping-in-ROS

        grid-mapping-in-ROS用python写的,用cmake编译配置了ros接口

         本次使用环境:ubuntu18.04,python2.7

1 下载编译

1.1 下载

mkdir -p grid_mapping_in_ros_ws/src
cd grid_mapping_in_ros_ws/src
git clone https://github.com/lukovicaleksa/grid-mapping-in-ROS.git

1.2 编译

        到工作空间目录下grid_mapping_in_ros_ws。

catkin_make

        因为是python文件,一般编译不会报错

2  从点云数据包创建栅格地图

        python文件地址:/home/meng/Desktop/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/scripts/create_from_rosbag.py

cd /home/meng/Desktop/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/scripts
python create_from_rosbag.py

        下面按顺序记录报错及解决办法

2.1 ImportError: cannot import name perf_counter

        报错原因:python2.7(ubuntu16和ubuntu18自带的python版本)的time这个模块没有perf_counter这个函数。

        解决办法:用time.clock()函数替换time.perf_counter()函数;具体两个函数区别,大家可以查一查

#注:time.clock()这个函数好像在python3.4之后被弃用了

        替换create_from_rosbag.py文件对应位置如下:

# from time import perf_counter  8行
from time import time


		# Init time  75行
		t_start = time()
		# t_start = perf_counter()


			t_step = time() #190多行
			# t_step = perf_counter()

------------------------------------------------------------------------------------------------------------------------

        !!!此外 python3.6、python3.7版本的time模块会有这个perf_counter()函数,但这里不要替换python版本;我试着替换为python3.7版本,这个报错没有了,但后面因为需要使用ros,而ros与python2.7版本紧密结合,会让系统出现多个python版本,引发下面的错误

ImportError: dynamic module does not define module export function (PyInit__tf2)

--报错原因是系统出现了多个python版本

Failed to load Python extension for LZ4 support. LZ4 compression will not be available.
Traceback (most recent call last):
  File "create_from_rosbag.py", line 25, in <module>
    from utils import *
  File "/home/meng/ideas/auto_resolution_map/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/scripts/utils.py", line 5, in <module>
    from tf.transformations import euler_from_quaternion, quaternion_from_euler
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
    from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 38, in <module>
    from tf2_py import *
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_py/__init__.py", line 38, in <module>
    from ._tf2 import *
ImportError: dynamic module does not define module export function (PyInit__tf2)

在下面博客得到系统有多个版本这个信息

https://blog.csdn.net/pangweijian/article/details/104915171

 ------------------------------------------------------------------------------------------------------------------------

2.2 目录不对

        修改目录为自己的目录,示例如下:

# SCRIPTS_PATH = '/home/maestro/catkin_ws/src/grid_mapping/scripts'
# BAG_FILE_PATH = '/home/maestro/catkin_ws/src/grid_mapping/bagfiles'
# MAPS_PATH = '/home/maestro/catkin_ws/src/grid_mapping/maps'

SCRIPTS_PATH = '/home/meng/Desktop/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/scripts'
BAG_FILE_PATH = '/home/meng/Desktop/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/bagfiles'
MAPS_PATH = '/home/meng/Desktop/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/maps'

2.3 缺包

        见python(4):ModuleNotFoundError: No module named ‘*‘_biter0088的博客-CSDN博客

的1 rosbag相关

2.4 NameError: name 'reload' is not defined

        如果遇到这个错误,修改这个报错里面最后一个文件,修改参考如下:

meng@meng:~/ideas/auto_resolution_map/grid_mapping_in_ros_ws/src/grid-mapping-in-ROS/scripts$ python create_from_rosbag.py 
Traceback (most recent call last):
  File "create_from_rosbag.py", line 3, in <module>
    import rospy
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
    from .client import spin, myargv, init_node, \
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
    import roslib
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 53, in <module>
    import roslib.stacks  # noqa: F401, I100
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/stacks.py", line 45, in <module>
    import roslib.packages
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/packages.py", line 44, in <module>
    reload(sys)
NameError: name 'reload' is not defined
sudo gedit /opt/ros/melodic/lib/python2.7/dist-packages/roslib/packages.py

        注释掉原来的import(sys),加上python2.x对应的import sys的方式即可

####hxz   python 2.x
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
####hxz

import os
import stat
#import sys  #hxz
from subprocess import PIPE
from subprocess import Popen

参考链接:https://blog.csdn.net/lxw1844912514/article/details/100029431

2.5 运行效果

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析下面的ebtables规则 # ebtables -L Bridge table: filter Bridge chain: INPUT, entries: 2, policy: ACCEPT -j br_wan -j portmapping_igmp Bridge chain: FORWARD, entries: 6, policy: DROP -j disBCMC -j br_wan_forward -j wlan_block -j wlan_map_block -j macfilter -j portmapping Bridge chain: OUTPUT, entries: 2, policy: ACCEPT -j br_wan_out -j br_lan_out Bridge chain: br_lan_out, entries: 2, policy: ACCEPT -p IPv6 -o eth0.4 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j DROP -p IPv6 -o eth0.5 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j DROP Bridge chain: br_wan_forward, entries: 3, policy: RETURN -p IPv6 -o nas0_5 -j ACCEPT -p PPP_SES -o nas0_5 -j ACCEPT -o nas0_5 -j DROP Bridge chain: wlan_block, entries: 0, policy: RETURN Bridge chain: wlan_map_block, entries: 0, policy: RETURN Bridge chain: disBCMC, entries: 2, policy: RETURN -d Broadcast -j DROP -d Multicast -j DROP Bridge chain: br_wan, entries: 1, policy: RETURN -i nas0_5 -j DROP Bridge chain: br_wan_out, entries: 1, policy: RETURN -o nas0_5 -j DROP Bridge chain: portmapping_igmp, entries: 2, policy: RETURN -p IPv4 -i eth0.4 --ip-proto igmp -j DROP -p IPv4 -i eth0.5 --ip-proto igmp -j DROP Bridge chain: macfilter, entries: 0, policy: ACCEPT Bridge chain: portmapping, entries: 31, policy: ACCEPT -i nas0_5 -o wlan1-vap3 -j RETURN -i wlan1-vap3 -o nas0_5 -j RETURN -i nas0_5 -o wlan1-vap2 -j RETURN -i wlan1-vap2 -o nas0_5 -j RETURN -i nas0_5 -o wlan1-vap1 -j RETURN -i wlan1-vap1 -o nas0_5 -j RETURN -i nas0_5 -o wlan1-vap0 -j RETURN -i wlan1-vap0 -o nas0_5 -j RETURN -i nas0_5 -o wlan1 -j RETURN -i wlan1 -o nas0_5 -j RETURN -i nas0_5 -o wlan0-vap3 -j RETURN -i wlan0-vap3 -o nas0_5 -j RETURN -i nas0_5 -o wlan0-vap2 -j RETURN -i wlan0-vap2 -o nas0_5 -j RETURN -i nas0_5 -o wlan0-vap1 -j RETURN -i wlan0-vap1 -o nas0_5 -j RETURN -i nas0_5 -o wlan0-vap0 -j RETURN -i wlan0-vap0 -o nas0_5 -j RETURN -i nas0_5 -o wlan0 -j RETURN -i wlan0 -o nas0_5 -j RETURN -i nas0_5 -o eth0.5 -j RETURN -i eth0.5 -o nas0_5 -j RETURN -i nas0_5 -o eth0.4 -j RETURN -i eth0.4 -o nas0_5 -j RETURN -i eth+ -o eth+ -j RETURN -i eth+ -o wlan+ -j RETURN -i wlan+ -o eth+ -j RETURN -i wlan+ -o wlan+ -j RETURN -i eth0+ -j DROP -i wlan+ -j DROP -i nas0_5 -j DROP
07-08
这是一组ebtables规则,用于过滤和控制网络流量。以下是每个链和规则的简要解释: 1. INPUT链:用于处理桥接的输入流量。有两个规则,目标是将流量转发到"br_wan"和"portmapping_igmp"链。 2. FORWARD链:用于处理桥接的转发流量。有个规则,目标是将流量转发到"disBCMC"、"br_wan_forward"、"wlan_block"、"wlan_map_block"、"macfilter"和"portmapping"链。策略为丢弃。 3. OUTPUT链:用于处理桥接的输出流量。有两个规则,目标是将流量转发到"br_wan_out"和"br_lan_out"链。 4. br_lan_out链:用于处理桥接到局域网的输出流量。有两个规则,目标是丢弃传输IPv6 ICMP协议类型为路由广告的流量。 5. br_wan_forward链:用于处理从WAN端口到桥接的转发流量。有三个规则,目标是接受传输IPv6协议和PPP_SES协议的流量,并丢弃其他所有流量。 6. wlan_block链和wlan_map_block链:这两个链没有规则,策略为返回。 7. disBCMC链:用于处理广播和多播流量。有两个规则,目标是丢弃广播和多播流量。 8. br_wan链:用于处理从WAN端口到桥接的流量。有一个规则,目标是丢弃从"nas0_5"接口进入的流量。 9. br_wan_out链:用于处理从桥接到WAN端口的输出流量。有一个规则,目标是丢弃传输到"nas0_5"接口的流量。 10. portmapping_igmp链:用于处理IGMP流量。有两个规则,目标是丢弃传输IPv4协议和IGMP协议的流量。 11. macfilter链:这个链没有规则,策略为接受所有流量。 12. portmapping链:用于处理端口映射流量。有31个规则,用于配置不同接口之间的流量转发。 请注意,这只是对规则的简要解释,具体的含义和功能取决于网络配置和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值