关于虚拟机、或者用户自己的 ubuntu 系统 ROS 键盘控制、SLAM、导航功能异常解决方法
1.虚拟机端(或者非小车主控端的 ubuntu)打开一个终端
hosname -I (大写 i)出来的,跟我这样只有 IP 地址的 , (直接忽略以下步骤)好好看指导视频 网络配置及移动控制。
2.hosname -I 出来的 IP 地址后面 一堆数字和字母的。继续往下看步骤 3。
3.打开虚拟机端(或者非小车主控端的 ubuntu)的~/.bashrc 文件。
vim ~/.bashrc 进入编辑模式,不会编辑的百度 linux 下如何编辑文本
翻到最底部,把这两行:
改成红色框框的两行:
直接 cope,以下代码复制粘贴。
export ROS_IP=`hostname -I | awk '{print $1}'`
export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
以上操作,请确保小车主控和虚拟机(虚拟机桥接模式),或者自己的 ubuntu 连接在同一网段的同一个局域网(非校园网、大公司局域网)内进行,并且操作正确。
Ubuntu ip :172.18.109.199
小车: 172.18.109.166
校准ium
-
ubunutu连接ros小车
ssh [email protected]小车IP地址
退出使用: exit
另一种方法(但是小车的ip地址会变化):打开sudo gedit /etc/hosts 将机器人IP地址和名字输入到其中,打开终端连接 ssh [email protected](刚刚输入的名字)
Imu校准
-
(小车)roslaunch xrrobot bringup.launch
Bringup是连接驱动的程序
在ubuntu下的终端中输入:gedit ~/.bashrc
修改IP地址 Export ros_master_uri=自己小车的IP地址
source ~/.bashrc
两个窗口,不同的主人
在ubuntu中输入:rostopic list(查看主题)
在ros中启动roscd xrrobot/param/imu/
查看imu数据:rostopic echo /imu/data(imu斜杠之前是要有空格的)
Ctr+c 退出
需要先启动:bringup
校准imu: rosrun imu_calib do_calib
从x+开始校准
校准结束后要按ctrl+c 结束掉bringup,然后再开启
校准角速度步骤:
注意一个问题:ros_master的url地址的问题,注意如果小车的IP地址如果换了那要
修改IP地址 Export ros_master_uri=自己小车的IP地址
连接上ros小车系统:ssh [email protected]小车的IP地址
启动前:在ros小车系统中进入roscd xrrobot/launch
vim bringup.launch
找到角速度(线速度也要改),将参数value修改为1,一定要基于1来校准
-
在小车ros系统下启动bringup: roslaunch xrrobot bringup.launch
-
在小车ros系统下输入: rosrun xrrobot_nav calibrate_angular.py
-
在ubuntu下运行:rosrun rqt_reconfigure rqt_reconfigure
在打开的rqt工具中,调节odom_angular_scale_correction后边的数值
得到小车转一圈的数值之后,ctrl+c结束bringup的工作,
此时是这样的
在这个目录下输入:vim bringup.launch 修改角速度angular_scale的value值
Esc推出,:wq保存,那之后就是按照这个角速度来运行了
PS:
网站地址:
http://www.xiao-r.com/index.php/Study/catalog/cid/38www.dh960.com/?00809
校准线速度(运动直线校准)
-
连接上ros小车系统:ssh [email protected]小车的IP地址
-
在ros小车系统中进入: roscd xrrobot/launch
vim bringup.launch
将linear-scale的数值修改为1
-
在机器人小车系统上启动bringup.launch: roslaunch xrrobot bringup.launch
-
在机器人小车系统上:rosrun xrrobot_nav calibrate_linear.py
-
在ubuntu下运行:rosrun rqt_reconfigure rqt_reconfigure
视屏传输
-
连接ros小车
-
在小车ros下:roslaunch xrrobot camera.launch
-
在ubuntu上: rosrun rqt_image_view rqt_image_view
-
在ubuntu上:rosrun rviz rviz
-
接下来就打开了rviz,点击add添加一个image的窗口,然后点击imageTopic添加话题,显示画面。
键盘建立图像
-
连接小车
-
运行launch文件:roslaunch xrrobot bringup.launch
-
在新的终端上重新连接小车启动雷达文件(小车ros上):
roslaunch xrrobot lidar_slam.launch
-
Ubuntu上:rosrun rviz rviz
-
设置rviz中的东西:file->找到代码中的slam.rviz文件运行
即显示出地图
-
在新的终端中(ubuntu)运行键盘控制脚本:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
Ps:安装了teleop_twist_keyboard
巡线
-
连接小车:ssh [email protected]
-
小车上启动bringup文件: roslaunch xrrobot bringup.launch
-
小车上启动照相机:roslaunch xrrobot camera.launch
-
在ubuntu的工作空间catkin_ws上:roslaunch riki_line_follower riki_line.launch
-
成功
-
注意:
-
高速过弯为什么不会甩出去?六轴陀螺仪与三轴磁力机,互补滤波与PID
-
视觉是以FPGA为平台吗?stm32+fpga
-
激光雷达也可以巡线 什么重建
-
摄像头加opencv
-
树莓派的处理速度有这么快?摄像头的分辨率要多低帧数要多高?
树莓派5ms一次处理,stm32+fpga输出兆hz的频率给电机
-
用了什么算法吗?当时问过学长用一个忘记叫啥的算法补偿了惯性后好了一点,但是还是做不到这样的速度?互补滤波,你也可以用卡尔曼
-
基于opencv的图像处理,hsv算法
-
陀螺仪,滤波与pid没调好
-
运动控制采用的stm32加fpga,互补滤波陀螺仪加pid,巡线用的是图像处理,基于opencv
巡线资料
ssh连接小车,启动控制底盘的launch,然后再启动camera.launch,然后再启动机器人的节点---roslaunch riki_line_follower riki_line.launch
这个camera.launch自己分析一下,
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://172.18.109.229:45717/
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.14
NODES
/
Velocity (riki_line_follower/navig)
detection (riki_line_follower/detect)
ROS_MASTER_URI=http://192.168.1.102:11311
ERROR: cannot launch node of type [riki_line_follower/detect]: can't locate node [detect] in package [riki_line_follower]
ERROR: cannot launch node of type [riki_line_follower/navig]: can't locate node [navig] in package [riki_line_follower]
No processes to monitor
shutting down processing monitor...
... shutting down processing monitor complete
linedetect.hpp思路
如果重心在图像中心的左侧减去公差,则向左转
如果重心在图像中心的右侧加上公差,则向右转
如果重心在图像中心附近,请直走
关于巡线遇到的问题以及学习到知识
-
导入其他人写的功能包之后,输入命令roslaunch filename-pkg filename.launch
出现这个文件夹不是file的name,原因可能是没有编译这包
-
关于编译包:
-
可以只编译一个包,所以就不会出现那种编译整个空间一堆错误的情况
-
单独编译一个包的命令:
catkin_make -DCATKIN_WHITELIST_PACKAGES="需要单独编译的包名"
取消单独编译:第一步设置了编译参数CATKIN_WHITELIST_PACKAGES,可能导 致接下来其他的编译工作紊乱,需要重新调整该参数:
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
-
编译全部:进入catkin_ws 中catkin_make
-
当一个编译空间中搞不出来的时候,去新建一个编译空间试一试
<!--
<rosparam file="$(find rbx1_nav)/config/myfake/dwa_local_planner_params.yaml" command="load" />
<rosparam file="$(find rbx1_nav)/config/myfake/move_base_params.yaml" command="load" />
<rosparam file="$(find rbx1_nav)/config/myfake/global_planner_params.yaml" command="load" />
-->
创建工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
大概的思路:
-
在include中初始定义了类LINEDETECT,RIKIROBOT
-
在src中具体定义类中的函数,同时调用完成功能
-
Detect.cpp :订阅图像信息,将ros图像信息转化为opencv数据格式的进行处理,先调用高斯滤波处理函数,然后再调用方向函数,最终将方向发布。
当下载某个功能包到自己的空间,在编译时,出现依赖项有问题,解决如下:
$roscd package_name
$rosdep package_name
rosdep即可安装缺少的依赖项
安装cv_bridge
ROS知识(12)----cv_bridge依赖opencv版本的问题
cv_bridge默认依赖的oencv版本是2.4.8,如果安装了新的opencv版本,比如2.4.11,那么在编译cv_bridge时候会提示无法找到opencv 2.4.8.so的库。
为解决这个问题,必须要先把旧版本的cv_bridge卸载掉:
sudo apt-get remove ros-indigo-cv-bridge
然后下载新版本的cv_bridge:
git clone https://github.com/ros-perception/vision_opencv.git
将里面的cv_bridge包拿出来,放到工作空间中,重新编译:
catkin_make --pkg cv_bridge
机器人基本结构:
-
在xrrobot中的urdf中的rikirobot.urdf文件描述的是机器人的身体组成
-
Param(参数)-》ekf(
将ros环境修改为本地连接:
###为了使用本地连接把下面的注释掉了,如果要是使用远程连接的话放开注释内容
source ~/ros_ws/catkin_ws/devel/setup.bash
#export ROS_IP=`hostname -I | awk '{print $1}'`
#export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
#export ROS_MASTER_URI=http://192.168.1.101:11311
#为了ros环境将下面的给注释掉了
# added by Anaconda3 4.2.0 installer
#export PATH="/home/tree/anaconda3/bin:$PATH"
#export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
#export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#export CUDA_HOME=$CUDA_HOME:/usr/local/cuda8.0
#export PYTHONPATH="/home/tree/anaconda3/envs/tf-gpu/lib/python3.5/site-packages:$PYTHONPATH"
#下边的三行是为了本地连接写的
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
运行rviz
打开一个linux终端,输入:
roscore
再打开一个linux终端(一直不明白为什么要打开两个终端或者多个终端,难道在一个终端内不可以?试了下,一个终端确实不可以,但不懂为什么),输入:
rosrun rviz rviz