航天智慧物流比赛过程问题记录
- 保存建好的地图
- 激光扫描和地图产生偏移
- 检测是否到达目标点不准,退不出导航点
- 标定
- odom坐标系和map坐标系偏差
- 自定义消息时候,python导入模块时出现报错
- ros使用python时,导入其他功能包的消息或服务
- roslaunch报错
- 安装teb_local_planner
- 通过程序发布目标点时候,小车没有反应
- 诡异问题,排查后是自己傻逼
- 玄学问题1
- 安装pip
- 安装opencv
- 安装opencv-contrib-python报错
- nano切换python3之后,Illegal instruction(cpre dumped)报错
- 无法打开CSI摄像头
- python 和sudo python
- PIP3不能安装numpy,也不能安装opencv-python
- 在一个功能包中引用另一个功能包
- ros.sleep的一个问题
- 编译报错
- 编译teb出现报错
- /usr/bin/env: "python\r": 没有那个文件或目录
保存建好的地图
rosrun map_server map_saver -f filename
科大讯飞提供的步骤,还没搞懂参数
rosrun map_server map_saver --occ 70 --free 30 -f mapname
激光扫描和地图产生偏移
误差产生会主要来自于,里程计累计误差,ros的amcl会对这个误差进行一定修正,如果前面误差过大、amcl修正不到位,就会导致这个问题
误差来源:
里程计原数据不准
imu原数据不准
robot_pos_ekf融合不好
amcl定位不太好
检测是否到达目标点不准,退不出导航点
原因:我在吧dwa改成teb时候,仅仅修改了参数文件下载路径,忘记修改上面的节点配置了,座椅导致了这个问题
标定
odom坐标系和map坐标系偏差
根本原因就是amcl修正不对,因为odom坐标实际上时通各种里程数据推算出来的,长时间累加后出现偏差很正常,amcl中则会通过蒙特卡洛定位算法,对这个偏差进行修正,这里效果差,就是它修正不对
自定义消息时候,python导入模块时出现报错
ImportError: No module named ×××.msg
ros使用python时,导入其他功能包的消息或服务
直接
from 功能包名.msg import ××.msg
例如
from qingzhou_pc_connect.msg import pub_data
vscode里面会报错,别管他,但是千万记得弄完之后 ,source一下
roslaunch报错
RLException: [saidao.launch] is neither a launch file in package [qingzhou_saidao] nor is [qingzhou_saidao] a launch file name
安装teb_local_planner
sudo apt-get install ros-melodic-teb-local-planner
rosdep install teb_local_planner
通过程序发布目标点时候,小车没有反应
原因:注册发布者和action之后,需要延时一秒左右
set_pose_pub = rospy.Publisher('/initialpose', PoseWithCovarianceStamped, queue_size=5)
move_base = actionlib.SimpleActionClient("move_base", MoveBaseAction)
move_base.wait_for_server(rospy.Duration(60))
诡异问题,排查后是自己傻逼
stop_line = [6.95,4.9,0.00]
slow_line = [8.55,2.1,-90.00]
def stop_line(self):
if self.mission_state[2] == 0:
print("stop line")
self.goto(self.stop_line)
self.mission_state[2] = 1
def slow_line(self):
if self.mission_state[3] == 0:
print("slow line")
self.goto(self.slow_line)
self.mission_state[3] =1
我的目标点名称和我的函数名称重复了
玄学问题1
那个自己导入stl到gazebo的功能包,我仅仅改了下stl文件,突然就不好使了,然后重启它好了,连着按个bringup使用tab不出来的问题也要了
安装pip
sudo apt-get install python-pip
更新pip
pip install --upgrade pip
安装opencv
pip install opencv-python
安装opencv-contrib-python报错
pip install opencv-contrib-python
报错:
ERROR: Could not find a version that satisfies the requirement opencv-contrib-python (from versions: none)
ERROR: No matching distribution found for opencv-contrib-python
反正实验了无数方法,各种花样报错,隔了几天,我再测试,用常规安装,从阿里云安装,没有报错了,出现了下面
Requirement already satisfied: opencv-contrib-python in ./.local/lib/python3.6/site-packages (4.5.2.54)
Requirement already satisfied: numpy>=1.19.3 in ./.local/lib/python3.6/site-packages (from opencv-contrib-python) (1.19.5)
仔细一看,他好想是检测出在python3下面安装好了,但是python3下面我本来我就顺利安装的,非常莫名奇妙
nano切换python3之后,Illegal instruction(cpre dumped)报错
可能是跟nano硬件架构有关,解决:
export OPENBLAS_CORETYPE=ARMV8
若要一劳永逸,那就加到.bashrc 里面
无法打开CSI摄像头
使用csi摄像头检测命令可以打开,没有问题:
测试1:
DISPLAY=:0.0 gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)20/1' ! nvoverlaysink -e
测试2:
nvgstcapture
(1)但是使用python3就打不开,用python2是可以打开的
(2)测试发现,使用python3时候,加上sudo,是可以打开的,原来,加上sudo之后,会变成调用python2解释器
(3)再换USB摄像头,发现python3也可以正常打开显示
python 和sudo python
我现在有python2.7和python3.6,把默认配置成3.6时候,我用python调用的就是3.6,如果用sudo python,调用的就是2.7
简直玄学
PIP3不能安装numpy,也不能安装opencv-python
解决,更新pip3
python3 -m pip install --upgrade pip
在一个功能包中引用另一个功能包
在需要引用的功能包的pakage.xml中加入:
<build_depend> pakage_name </build_depend>
<build_export_depend> pakage_name </build_export_depend>
<exec_depend> pakage_name </exec_depend>
在需要引用的功能包的CMakeLists.txt中加入:
find_package(catkin REQUIRED COMPONENTS
pakage_name
)
ros.sleep的一个问题
这种写法,写出来程序打印不正常
ros::Rate r(10);
while(ros::ok())
{
r.sleep();
printf("loop_main \n");
}
这样写才正常
ros::Rate r(10);
while(ros::ok())
{
printf("loop_main \n");
r.sleep();
}
编译报错
-- Could NOT find cmake_modules (missing: cmake_modules_DIR)
-- Could not find the required component 'cmake_modules'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "cmake_modules"
with any of the following names:
cmake_modulesConfig.cmake
cmake_modules-config.cmake
Add the installation prefix of "cmake_modules" to CMAKE_PREFIX_PATH or set
"cmake_modules_DIR" to a directory containing one of the above files. If
"cmake_modules" provides a separate development package or SDK, be sure it
has been installed.
解决:
sudo apt-get install ros-melodic-cmake-modules
编译teb出现报错
unable to find SuiteSparse
解决:
sudo apt-get install libsuitesparse-dev
报错:
could not find libg2o
解决:
sudo apt-get install ros-melodic-libg2o
/usr/bin/env: “python\r”: 没有那个文件或目录
1…异常原因分析:
一开始以为是sublime的格式设置问题,以为win10和ubuntu里面的缩进格式设置的不一样(TAB和空格),这个问题也曾经困扰过我。后来发现不是这个问题。在百度了该异常代码后发现是DOS系统下和Linux系统下对于换行键的表示不同。
在windows下,用连续的’\r’和’\n’两个字符进行换行。’\r’为回车符,’\n’为换行符,比如原来的’aaabbb’更改为’aaa \n bbb’后输出的结果为:aaa 换行 bbb。
!/usr/bin/env python\r\n
在Linux下,用’\n’进行换行。
!/usr/bin/env python\n
所以windows下的程序会认为#!/usr/bin/env python是一行,而linux会认为#!/usr/bin/env python\r是一行。
2.异常解决
看了很多网上的教程,说用VIM编辑器进行修改,由于我不是很常用VIM编辑器,尝试了几次并没有成功。后来发现可以用dos2unix这个包进行转换。
首先通过apt-get命令安装dos2unix的包,然后通过dos2unix这个命令即可完成转换。
sudo apt-get install dos2unix
用法:
dos2unix filename