ROS_Robot_Programming 学习笔记

597 阅读1分钟

第三章搭建ROS开发环境

3.2. 搭建ROS开发环境

3.2.1. ROS配置

gedit ~/.bashrc

在最后面添加如下代码,保存退出。

# Set ROS Kinetic
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
# Set ROS Network
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'

3.2.2. 集成开发环境(IDE)

我 认为在进行轻量级的工作时Visual Studio Code比较合适,而进行GUI界面开发的时候 QtCreator最合适。尤其是考虑到ROS的开发、调试,以及视觉工具rqt和RViz都是用Qt 开发的;并且可以用Qt插件开发ROS工具的插件,因此可以说QtCreator非常有用。

即使不将Qt作为IDE,它也具有足够的通用编辑器功能,使用catkin_make非常方 便,因为用户可以直接通过CMakeLists.txt加载项目。

3.2.3. 小乌龟仿真测试

$ rqt_graph

rqt_graph节点以GUI形式显示关于当前正在运行的节点的信息。圆圈表示节点,正 方形表示话题。从图3-7可以看到,箭头从/teleop_turtle节点开始,通往/turtlesim。 这 表示两个节点正在运行并且这两个节点之间正在发生消息通信。 并且/turtle1/cmd_vel是turtle1话题的子话题,是两个节点之间的话题的名称,意味 着在teleop_turtle节点中通过键盘输进来的速度命令通过话题将消息发送给turtlesim。

换句话说,使用先前执行的两个节点,将键盘命令传送到机器人仿真器

第4章ROS的重要概念

4.1. ROS术语

本节总结了常用的ROS术语,所以读者可以用作ROS术语词典。

主节点:主节点(master) 负责节点到节点的连接和消息通信,roscore是它的运行命令;节点只有在需要注册自己的信息向其他节点发送请求信息时才能访问 主节点并获取信息

节点:(node)可以把它看作一个可执行程序,在ROS中,建议为一个目的创建一个节点

功能包:(package),是一个有完整功能的程序,里面有多个节点负责不同的小功能,一起构成完整的大功能

元功能包:元功能包(metapackage) 是一个具有共同目的的功能包的集合。例如,导航元功 能包包含AMCL、DWA、EKF和map_server等10余个功能包。

metapackage包含package包含node; master在最上面控制全体

话题:(topic)一封信

消息:(message)信里面的内容,整型、字符串、浮点数

发布者和订阅者:通过一次的连接,发送和接收连续的消息,所以它经常被用于必须连续发送消 息的传感器数据

服务器和客户端:是一种共同使用请求和响应的同步消息交换方 案,是一次性的消息通信,需要双向请求,当服务的 请求和响应完成时,两个节点的连接被断开。

动作:动作(action) 是在需要像服务那样的双向请求的情况下使用的消息通信方式,不 同点是在处理请求之后需要很长的响应,并且需要中途反馈值

动作服务器和动作客户端:和一般的服务器客服端相比服务器发送相应,完成服务外,还需要多发送一个反馈值

rosrun:运行一个节点

roslaunch:运行多个节点

状态图rqt_graph

4.2 消息通信

话题topic:用来连续实时传输机器人测位数据的消息通信

服务service:在某个时间点需要机器人做一次简单的操作,发送一次性的服务消息通信

动作action:在某个时间点需要机器人做一套复杂的操作,需要在中途服务器连续发送反馈值说明任务执行情况,一段时间过去后,再把结果值发送给客户端

第七章ROS编程基础

7.2发布者节点和订阅者节点的创建和运行

package.xml

语法格式:<功能>正文</功能>

第十章TurtleBot3

TurtleBot3的ROS功能包的介绍以及安装

TurtleBot3的ROS功能包包括turtlebot3、turtlebot3_msgs、turtlebot3_simulations 和turtlebot3_applications。其中,turtlebot3功能包包括TurtleBot3的机器人模型、 SLAM和导航功能包、遥控功能包以及与行驶相关的bringup功能包。另外,TurtleBot3的 消息文件的集合turtlebot3_msgs、仿真功能包的集合turtlebot3_simulations以及应用程 序的集合turtlebot3_applications构成了TurtleBot3的ROS功能包。

TurtleBot3的开发环境可以分为远程PC(运行远程控制、SLAM和导 航功能包)和TurtleBot PC(控制实际机器人且搜集传感器信息)。

首先创建并初始化工作目录catkin:

  • ROS使用一个名为catkin的ROS专用构建系统
  • catkin内有三个目录src build devel
  • catkin的构建系统的相关文件保存在build目录中,构建后的可执 行文件保存在devel目录中

安装依赖包的方法 [Remote PC]:

$ sudo apt-get install ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-
keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-
kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-
rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-
move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-
rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation

安装 TurtleBot3 功能包 [Remote PC]:

$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws && catkin_make

作为参考,TurtleBot3将用户的个人台式机和笔记本 电脑称为远程PC,这台PC将担任运行roscore的主节点,会负责远程控制、SLAM、导 航等上层控制。与此PC配对的TurtleBot3配备了SBC,负责机器人行驶和传感器信息采 集。

10.6.2. 可视化TurtleBot3

export TURTLEBOT3_MODEL=burger #当前的TurtleBot3的型号指定为Burger
roslaunch turtlebot3_bringup turtlebot3_remote.launch 
rosrun rviz rviz -d `rospack find turtlebot3_description`/rviz/model.

10.8. 使用RViz 仿真 TurtleBot3

有两种方法可以做到这一点,一种是使用ROS的3D可视化 工具RViz,另一种是使用3D机器人仿真器Gazebo

10.9. 利用Gazebo仿真TurtleBot3

burger和waffle 是两种类型的机器人

roscore
export TURTLEBOT3_MODEL=waffle #启动虚拟机器人
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch #打开gazebo,创建一个空的世界和turtlebot3机器人

export TURTLEBOT3_MODEL=waffle 
roslaunch turtlebot3_gazebo turtlebot3_world.launch #加载模型和机器人
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch #键盘操控机器人

export TURTLEBOT3_MODEL=waffle 
roslaunch turtlebot3_gazebo turtlebot3_simulation.launch #自动避障机器人


运行人工势场编队代码(H师兄改过的)potential_simulation

roscore
potential_simulation/scripts$ export TURTLEBOT3_MODEL=burger
potential_simulation/scripts$ roslaunch potential_simulation my_simple_formation.launch #运行人工势场编队代码
#再打开一个终端
potential_simulation/scripts$ python multiRobotMain.py 

运行python_for_Formation

roscore
/scripts$ export TURTLEBOT3_MODEL=burger
/scripts$ roslaunch turtlebot3_gazebo multi_turtlebot3.launch

#使用amcl
$ ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_navigation amcl.launch set_base_frame:=tb3_0/base_footprint set_odom_frame:=tb3_0/odom set_map_frame:=tb3_0/map
$ ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_navigation amcl.launch set_base_frame:=tb3_1/base_footprint set_odom_frame:=tb3_1/odom set_map_frame:=tb3_1/map
$ ROS_NAMESPACE=tb3_2 roslaunch turtlebot3_navigation amcl.launch set_base_frame:=tb3_2/base_footprint set_odom_frame:=tb3_2/odom set_map_frame:=tb3_2/map

/scripts$ python multiRobotMain.py