ROS学习笔记(二)ROS by Example 学习笔记
先介绍一下RVIZ
参考网页:http://wiki.ros.org/rviz/UserGuide
安装和检查依赖项
安装:
sudo apt-get install rviz
检查一下安装的依赖项
rosdep install rviz
然后rosmake rviz
运行
source /opt/ros/indigo/setup.bash
roscore &
rosrun rviz rviz
增加一下显示的选项

显示一些属性

显示一些状态

显示类型:
Axes用于显示坐标轴
demonstrate an object's edge effects(展示一个物体的边缘化)
a camera提供了一个窗口来显示图像(camera 提供一个窗口显示图像)
display 2D or 3D grids(展示二维或三维的一个栅格)
该参数用于表示透明度(这个参数表示透明度)

这个参数表示线性

Grid Cells 在网格中呈现八叉树地图, Image 开启图形界面窗口, Interactive Make 通过箭头进行操作, Laser Scanning 依赖激光雷达完成扫描, Map 展示地理信息数据, Maker 提供Topic机制供开发者使用, Path 展示导航路径规划, Point 绘制离散点标记, Pose 表示机器人姿态状态, Polygon 制定边界多边形轮廓, Odometry 计算视觉与声呐定位误差, Range 包括视觉和声呐测距显示范围, Transform Frame (TF) 展示坐标系变换层次结构, Robot Model 描述机器人构造与功能
配置
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地址。当您的计算机和机器人通过同一路由器连接到家庭或办公室网络时,则可以采用此方法。(它相对容易设置)

然后ping <主机名>.local

最后的输出结果

我自己尝试 ping 了一下同一个局域网内的先锋机器人但未能成功 ping 上去 原因尚不明确 大家如果有类似的问题也可以在评论区留下看法。
中间有一小部分内容我暂时忽略掉了 因为直接在机器人上运行自己的代码会导致程序崩溃 现在有了更好的方法可以通过编写调试代码来测试系统的稳定性。
SSH 的使用 借鉴了《白巧克力》博客中的相关技术讨论。
<>

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
具体说明如下:这一操作对于修复问题至关重要。由于默认的Groovy的分支git check indigo-devel在代码有更新的情况下可能失效,请参考以下步骤进行操作:
$ 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 '$(find
YOUR_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.0弧度每秒等同于每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话题控制机器人前进一米,并在检测到的目标距离达到设定值的一厘米时使机器人停止。使用rqt_reconfigure界面可调节设定值及移动速度参数。第二个校正脚本则由机器人完成360度的旋转并自动优化PID参数设置。
roslaunch rbx1_nav interactive_markers.launch
用来出现交互界面

使用ROS的包进行导航和路径规划
SLAM 的要求有两个:一是绘制地图;二是实现导航。使用 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点云数据处理解决方案。另外值得一提的是,在 ROS 平台之上构建了一个新兴的视觉框架系统 Ecto ,它允许开发者通过一个统一的接口同时集成并利用 OpenCV 和 PCL 的功能优势
ROS当中的一些概念备忘:
1、URI编码对象在互联网上的唯一标识符(Uniform Resource Identifier),它被用作互联网协议中的标识符角色。
2、MD5算法作为一种128位的密码散列函数,在确保数据完整性方面发挥重要作用。
3、XML是一种支持可扩展标记语言的数据格式。
4、该系统采用栅格地图作为地理数据的基础表示形式。

其中黑色障碍物与白色区域相对应,而灰色区域则代表未知地形。当ROS发布nav_msgs/OccupancyGrid信息时,在数值范围上设定为[0-100]区间,在数值趋近于0时代表可自由移动的空间,在数值接近100时则表示存在障碍的空间,在数值为-1的情况下则标记未定义区域。这些地图信息主要以*.pgm文件格式存储,并伴随一个.yaml文件用于进一步的信息补充


首先,resulution:0.05 说明买个像素意味着 0.05米
然后 地图的左下角是-10m,-10m yaw=0.
