ROS学习笔记(二)ROS by Example 学习笔记

来源:互联网 发布:js中字符串拼接方法 编辑:程序博客网 时间:2024/04/27 13:55

先介绍一下RVIZ
参考网页:http://wiki.ros.org/rviz/UserGuide

安装和检查依赖项

安装:

sudo apt-get install rviz

检查一下安装的依赖项

rosdep install rviz

然后rosmake rviz
运行

source /opt/ros/indigo/setup.bashroscore &rosrun rviz rviz

增加一下显示的选项
这里写图片描述
显示一些属性
这里写图片描述
显示一些状态
这里写图片描述
显示的类型:
Axes 显示坐标轴
Effort 显示一个物体的边缘化
camera 提供一个窗口显示图像
grid 显示2D或者3D的一个栅格
这个参数表示透明度 这里写图片描述
这个参数表示线性这里写图片描述
grid cells 在一个网格中绘制八叉树地图
iamge 用图像创造一个窗口
interactiveMake 允许用箭头来控制
Laser Scan 使用激光雷达进行扫描
Map 显示地图信息
Maker 允许程序员用topic 来控制
path 显示导航的路径
point 绘制出一些小的球
pose 绘制出位姿
ploygon 绘制多边形的轮廓线
Odometry 视觉里程计
range 显示视觉里程及声呐的测距范围
tf 显示tf变换的层次结构
RobotModel 显示机器人


配置

File -> Recent Config 这里可以有最近的配置
这里写图片描述
Orbital camera 轨道摄像机
默认的相机类型
这里写图片描述
FPS(first person camera)


下面开始写一些Ros by Example的东西

动态修改参数

rosrun rqt_reconfigure rqt_reconfigure

能够动态的调整ROS的参数
这里写图片描述
使用这个GUI,你可以直接更改的节点的参数,无需重新启动节点

机器人和计算之间联网

时间同步

在Ubuntu下面来安装chrony

sudo apt-get install chrony

安装chrony 将会自动的让你时间和internet 网络进行同步

使用配置ros网络,SSH

zeroconf,允许机器在同一子网中引用的每个其他使用本地主机名而不是IP地址,如果您的计算机和机器人连接到家庭或办公室网络上的同一路由器,所以你可以使用此方法。(这个比较容易实现)
这个在Ubuntu里面已经配置好了,因此不需要安装
然后hostname来得到主机名
这里写图片描述
然后ping <主机名>.local
这里写图片描述
最后的输出结果
这里写图片描述
我自己PING了一下连在同一个局域网的先锋机器人,但是没有办法ping上,原因未知,大家有类型想法的可以在博客下方留言哈。
中间有一小部分,我给跳过去了,因为直接在机器人上面运行自己的节点,我现在还有这么程序可以用来调试啊。
SSH的使用,这里参考了白巧克力的博客
http://blog.csdn.net/heyijia0327/article/details/42065293
这里写图片描述
https://www.youtube.com/watch?v=rgLCtkbPqKg


玩一些turtlebot的代码

1、安装对应的包
在命令行里面输入,这个过程当中如果遇到依赖项的问题,希望读者自行解决

sudo apt-get install ros-indigo-turtlebot-bringup \ros-indigo-turtlebot-create-desktop ros-indigo-openni-* \ros-indigo-openni2-* ros-indigo-freenect-* ros-indigo-usb-cam \ros-indigo-laser-* ros-indigo-hokuyo-node \ros-indigo-audio-common gstreamer0.10-pocketsphinx \ros-indigo-pocketsphinx ros-indigo-slam-gmapping \ros-indigo-joystick-drivers python-rosinstall \ros-indigo-orocos-kdl ros-indigo-python-orocos-kdl \python-setuptools ros-indigo-dynamixel-motor-* \libopencv-dev python-opencv ros-indigo-vision-opencv \ros-indigo-depthimage-to-laserscan ros-indigo-arbotix-* \ros-indigo-turtlebot-teleop ros-indigo-move-base \ros-indigo-map-server ros-indigo-fake-localization \ros-indigo-amcl git subversion mercurial

2、克隆原书的代码

$ cd ~/catkin_ws/src$ git clone https://github.com/pirobot/rbx1.git$ cd rbx1$ git checkout indigo-devel$ cd ~/catkin_ws$ catkin_make$ source ~/catkin_ws/devel/setup.bash$ rospack profile

说明,git check indigo-devel 这一步至关重要,因为默认的Groovy的分支
如果代码有更新的话,你可以用以下命令来更新你的代码

$ cd ~/catkin_ws/src/rbx1$ git pull$ cd ~/catkin_ws$ catkin_make$ source ~/catkin_ws/devel/setup.bash

安装仿真器

$ sudo apt-get install ros-indigo-arbotix-*

测试你的仿真器

roslaunch rbx1_bringup fake_turtlebot.launch

出现以下信息说明正确
这里写图片描述

在模拟器上运行你自己的机器人
其中这里launch文件及这么写

这个地方是个模板可以记住!!!!!

<launch><!-- Load the URDF/Xacro model of our robot --><arg name="urdf_file" default="$(find xacro)/xacro.py '$(findYOUR_PACKAGE_NAME)/YOUR_URDF_PATH'" />!!!注意这里是要更改的地方,其他都保持不变。<param name="robot_description" command="$(arg urdf_file)" /><node name="arbotix" pkg="arbotix_python" type="arbotix_driver"output="screen"><rosparam file="$(find rbx1_bringup)/config/fake_turtlebot_arbotix.yaml"command="load" /><param name="sim" value="true"/></node><node name="robot_state_publisher" pkg="robot_state_publisher"type="state_publisher"><param name="publish_frequency" type="double" value="20.0" /></node></launch>

ROS中约定俗称的东西:

坐标系和常用度量方法

使用右手坐标系
这里写图片描述
使用的单位是米
线速度总是m/s
角速度是1.0rad/s相当于6秒转一圈
选装的方向也是右手螺旋法则,逆时针方向为正方向。
当你不确定的时候一般保证:线速度在0.2m/s以下

运动控制分层

1、发动机,轮子和编码器
一个编码器每转一圈会触发固定数量的ticks(通常会是几百,到几千可)从而记录对应的轮子转了多少圈。加上预先知道的轮子的直径R和轮子之间的距离d,编码器就可以吧记录到的数据转化成用m来表示的轮子行驶距离,或者用rad来表示的轮子转动的角度,然后再除以测量的时长就可以知道速度
这种收集内部运动的方法叫做测程法odometry(但是值得注意的一点就是:不管你是用多少不同来源来测量数据,测量法提供的数据和显示世界数据都是有偏差的)
2、发动机控制器和驱动程序
先锋机器人是有的。就是ROSARIA
3、ROS基控制器
驱动程序和PID控制器通常都会被整合到同一的叫做基控制器的ROS节点中,基控制器需要在一台与发动机直接相连的计算机上运行,而且启动一个机器人的时候,它通常是第一个被运行载入的节点。基控制器通常在/odom话题下测量数据,并且在/cmd_vel话题下面监听运动指令
4、使用ROS当中的move_base包的基于框架的运动
ROS提供的mov_base包,自动进行路径规划的
5、使用ROS的gmapping包和amcl包的SLAM
使用gmapping 来绘制一张他所在环境的地图
当绘制好地图的时候,那么你就可以用amcl包就可以通过机器人扫描和测量数据自动定位。amcl是自适应蒙特卡罗定位,使用这个包,可以在地图上任意点一个点,然后让自己人自己去寻找路径
6、语意目标
最后运动的目标是通过有语义的句子来表达的,例如“去上师大”ROS当中也有一些包能够完成这些操作smach包


通常我们可以使用Odometry Display 去跟踪机器人的方位,机器人的每一个方位都可以一个箭头来表示

roslaunch rbx1_bringup fake_turtlebot.launch

出现以下信息说明正确
这里写图片描述
打开一个新的终端输入:

 roslaunch rbx1_bringup fake_pi_robot.launch

再打开一个终端,输入

rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz

打开一个终端输入

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y:0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

这里写图片描述

输入这条指令就不动了

rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'

这个地方就是那个箭头,这个KEEP的默认的参数是保存100个


对机器人进行校准测量

安装一些校准测量的包

sudo apt-get install ros-indigo-orocos-kdl ros-indigo-python-orocos-kdl

rbx1_nav包有两个校准脚本,calibrate_linear.py和calibrate_angular.py第一个脚本是通过监听/odom话题,让机器人前进1米,然后当测量到的距离在目标点1厘米的时候让他停下来,你可以通过rqt_reconfigure来调整目标的距离和移动的速度,第二个脚本是通过让机器人选装360度,调整PID参数


roslaunch rbx1_nav interactive_markers.launch
用来出现交互界面
这里写图片描述


使用ROS的包进行导航和路径规划

SLAM 的要求有2点:1、绘制出地图 2、进行导航
使用kinect进行导航的相关的版depthimage_to_laserscan和kinect_2d_scanner
当然也是有turtleBot SLAM的指南
在当中三个主要的包是move_base,gmapping,amcl这三个包
需要渎职自己去阅读
http://wiki.ros.org/navigation/Tutorials


ROS和机器视觉

OpenCV,OpenNI,PCL是ROS机器人视觉系统的三大支柱,opencv被用于2D图像处理和机器学习,openNI 提供了我们使用的一些深度相机的驱动和一些追踪骨架追踪的库,PCL是处理3D点云的
这里简短说一个Ecto,这是一种新的视觉框架,它允许你通过一个接口同时使用opencv和PCL

1 0