1、机器人操作系统ROS典型功能实现方法详解 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】机器人操作系统ROS典型功能实现方法详解机器人操作系统ROS: 典型功能实现方法详解李宝全 ROS体系版本:Hydro 2013-09-04Groovy 2012-12-31Fuerte 2012-04-23ElectricDiamondbackROS是一种分布式的处理框架。文件系统: 在硬盘上查看的ROS源代码的组织形式包 Package:含有 或比如下文中的turtlebot_teleop,turtlebot_bringup。堆:Stac
2、k包的集合含有编译方法:catkin:Groovy及以后版本rosbuild:用于Fuerte及以前版本常用命令: rostopic list;列出系统中的所有Topicrosdep: 安装依赖包, 例如 rosdep install rosaria安装时, 需要先建一个工作空间,然后把gitgub网站上相应的包下载到src文件夹下,再执行该语句。具体见 “ROSARIA配置与运行”一节。环境变量设置:export例如:export ROS_HOSTNAME=marvinexport ROS_MASTER_URI= Bulks给的一些有用的命令rosnode info /rosaria_tel
3、eop_key_1 rosrun rqt_robot_steering rqt_robot_steering rosrun rqt_gui rqt_guirostopic helprosnode helprosnode info /RosAriarosnode info /rosaria_teleop_key_1rosnode listecho $ROS_HOSTNAMEROS安装安装教程: 安装keys 安装使Debian包为最新:sudo apt-get updateFull安装:sudo apt-get install ros-hydro-desktop-full会出现一个界面,利用Ta
4、b选择Yes即可成功则提示:ldconfig deferred processing now taking place找到可以使用的包:apt-cache search ros-hydro初始化rosdepsudo rosdep initrosdep update 环境设置echo source /opt/ros/hydro/ /.bashrcsource /.bashrc得到rosintallsudo apt-get install python-rosinstallTurtleBot 配置与运行介绍TurtleBot的主页面(安装&运行): TurtleBot包(Package)的安装过程
5、安装(/ ):按照Debs Installation按照方法来安装:1.首先安装: sudo apt-get install ros-hydro-turtlebot ros-hydro-turtlebot-apps ros-hydro-turtlebot-viz ros-hydro-turtlebot-simulator ros-hydro-kobuki-ftdi2.之后加入sourse的bash中: . /opt/ros/hydro/. 说明:a)在终端中输入这一行后很快就结束. b)效果是在.bashrc(Home中的隐藏文件)的最后一行加入了source /opt/ros/hydro/,
6、 c)效果等效于命令 echo source /opt/ros/hydro/ /.bashrc. 这样的话就不用每次启动都输入命令“source /opt/ros/hydro/”了. d)这个好像在安装ROS时已经执行过了,不需要再执行一次吧3.之后加入kobuki的udev规则: rosrun kobuki_ftdi create_udev_rules安装完之后还需要加入网络时间控制(/ ), 否则与kokuki无法通讯. 1.首先安装chrony:sudo apt-get install chrony问题: 我重装系统后再安装turtlebot后,连接不上kokuki,但能正常连接Kine
7、ct。在命令行中,提示到bad callback, 因此说明有很多件没有安装成功。需要将其卸载重装,可以网上搜索Uninstall turtlebot来卸载并重装。运行:a.首先打开机器人核心服务程序:打开一个终端:键入: roscore 2.应用视觉传感器kinect并启动rviz界面: a.New Terminal: roslaunch turtlebot_bringup ; 3.SLAM: 与之前的两项无关. 需要重新开始, 否则就报错了. a.New Terminal: 开启ROS服务: roscoreb.New Terminal: 启动kobuki:roslaunch turtleb
8、ot_bringup c.New Terminal: 运行gmapping Demo:roslaunch turtlebot_navigation d.启动RVIZ的navigation:New Terminal: roslaunch turtlebot_rviz_launchers e.保存建图的结果:rosrun map_server map_saver -f /tmp/my_mapf.说明: 该例程只用到kobuki, 没有用到Kinect. 4.退出:ctrl+cROS基础的学习ROS Tutorials: Installing and Configuring Your ROS Env
9、ironment创建: $ mkdir -p /catkin_ws/src . package_n/ - file for package_n - Package manifest for package_n Navigating the ROS Filesystem1.查找某一包(package): 使用命令(例如)$ rospack find roscpp. 则会返回路径: /opt/ros/hydro/share/roscpp2.利用命令$ roscd roscpp, 则直接进入/opt/ros/hydro/share/roscpp文件夹.1.$ pwd $ catkin_create_
10、pkg beginner_tutorials std_msgs rospy roscpp:创建包a.beginner_tutorials为产生的包的名称, b.std_msgs, roscpp, rospy为依赖项(dependencies) Building a ROS Package1.上接 cd /catkin_ws/ : 首先返回工作空间文件夹.2.$ ls src: 查看src文件夹中的内容, a)结果为beginner_tutorials . b)链接一直存在c)命令ls为列出当前文件夹下的东西$ catkin_make. a ROS msg and srv产生一个消息:1.创建一
11、个消息a)cd /catkin_ws/src/beginner_tutorials首先进入文件夹. b)再创建一个文件夹$ mkdir msg. c)$ echo int64 num msg/: 创建一文件, 并写入一行话int64 num, 当然还可以多加入几行. 2.对(beginner_tutorials中的)添加下面两行: a)message_generationb)message_runtime3.对(beginner_tutorials中的)做如下修改 :a)在原有的find_package(xxx)中加入“message_generation”b)在catkin_package(
12、)中添加CATKIN_DEPENDS message_runtimec)取消add_message_files()的注释, 并修改为add_message_files(FILES d)取消generate_messages(DEPENDENCIES std_msgs)的注释使用rosmsg$ rosmsg show beginner_tutorials/Num. 应该输出int64 num但但提示找不到该消息使用查找命令$ rosmsg show Num, 应该输出beginner_tutorials/Num:int64 num. 但还是找不到创建一个srv1.创建一个srv$ roscd b
13、eginner_tutorials应该输出int64 a int64 b - int64 sum. 但提示找不到该消息使用查找命令 $ rossrv show AddTwoInts, 也只能查找到rospy_tutorials/AddTwoInts中的, 找不到beginner_tutorials/AddTwoInts中的. 与srv共同的下一步在中, 取消generate_messages(DEPENDENCIES std_msgs)的注释(创建msg阶段已经完成)在catkin_ws工作空间下输入命令: $ catkin_make结果是生成了针对不同语言的头文件: msg的C+头文件在 /
14、catkin_ws/devel/include/beginner_tutorials/. Python脚本在 /catkin_ws/devel/lib/dist-packages/beginner_tutorials/msg. 列表处理语言文件在 /catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/. 对于.srv, 生成的结果也类似. 生成成功!上接,不需要经过生成msg与srv的过程 进入包cd /catkin_ws/src/beginner_tutorials1.1创建Publisher Node:src/ 文件(在
15、该包的src文件夹下)2.1创建Subscriber Node:src/ 文件(在该包的src文件夹下)3.1Building your nodes 生成可执行文件a)在文件中(包的目录下面的)最后面加入(已经在之前msg&srv中生成并处理了, 若没经过上面的msg&srv阶段的处理, 也能正常编译生成)b)add_executable(talker src该过程使用了. 生成的结果为在:devel/lib/beginner_tutorials下有talker与listener节点(可执行文件). 并有提示:100% Built target talker;100% Built target
16、 listener1.打开ros服务:roscore2.运行talkera.另开一个terminal,进入$ cd /catkin_ws, b.再执行命令$ source ./devel/ . 该命令等效于 source /catkin_ws(工作空间名)/devel/。该命令很快即执行完毕c.$ rosrun beginner_tutorials(包的名称) talker : 运行Publisher. (不需要在工作空间目录下) 之后会看到如下类似消息: 3.运行listenera.进入$ cd /catkin_ws, b.再执行命令$ source ./devel/ c.$ rosrun
17、beginner_tutorials(包的名称) 因为需要加入头文件#include beginner_tutorials/1.写一个服务器节点: 进入文件夹cd /catkin_ws/src/beginner_tutorials, 编写src/ 2.写一个客户端节点: 进入文件夹cd /catkin_ws/src/beginner_tutorials编写src/ 3.Build节点a)在/catkin_ws/src/beginner_tutorials/中加入如下几行: devel/ b)2.运行客户端a)还需要再进入$ cd /catkin_ws, 再执行命令$ source ./deve
18、l/ b)运行add_two_ints_server :输入$ rosrun beginner_tutorials add_two_ints_client 1 3. 之后会看到如下类似消息:. 在客户端terminal中可以看到信息k response: 4进一步的服务器客户端例程: P3-AT/DXROSARIA配置与运行网站主页 How to use ROSARIA:创建ROS工作空间之前若没有加入启动命令. /opt/ros/hydro/的话, 则加入. 为了创建一个关于ROSARIA的工作空间, 将学习ROS基础阶段的catkin_ws文件夹重命名为catkin_ws_Base, 再新
19、建一个工作空间catkin_ws:mkdir -p /catkin_ws/srccd /catkin_ws/srccatkin_init_workspace首先进入src文件夹, 之后运行命令git clone 包中包含文件 在安装ARIA后再下载该包应该也可以 安装ARIA以及Build ROSARIA1.source /catkin_ws/devel/a)b)或者把这项添加到.bashrc文件中再执行.bashrc文件:echo source /catkin_ws/devel/ /.bashrc - source /.bashrc2.得到包之后, 编译它们:i.rosdep updateT
20、hey have been ignored, or old ones used instead. 解决方法:sudo rm /var/lib/apt/lists/* -vf 删除相应文件1.catkin_make若不在第一步运行该命令,则会报错rospack Error: stack/package rosaria not found2.运行启动该节点的命令: rosrun rosaria RosAriaa)不需要到catkin_ws文件夹下. b)命令rosrun 允许直接运行一个包里面的节点(可执行程序): rosrun package_name node_name.c)节点的位置为cat
21、kin_wsdevellibrosariaRosAria3.(从运行下面4可知不需要这一步)设置网络地址 4.配置好USB转串口后就可以连接了, 连接成功时输出的提示信息为(退出连接的话, 直接Ctrl+C就可以了.):Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.Syncing 0Syncing 1Syncing 2Connected to robot.Name: RoboticsWorld_4129Type: PioneerSubtype: p3at-shArConf
22、ig: Config version: Loaded robot parameters from ArRobotConnector: Connecting to MTX batteries (if neccesary).ArRobotConnector: Connecting to MTX sonar (if neccesary).om robot EEPROM: 32550说明:1.一问题的解决:在运行后面连接Android时, 再回头运行此命令, 则就去src/rosaria找该可执行文件了, 因此从路径上就错了, 不知是那一步影响了该命令的执行. 不过用中的catkin_make命令重新
23、编译一下就又能正常连接了. 2.若USB转串口没有配置好, 则会出现下方的错误提示, 配置方法请见下方的USB转串口配置. ArSerialConnection:open: Could not open serial port /dev/ttyUSB0 | ErrorFromOSNum: 2 ErrorFromOSString: No such file or directoryCould not connect, because open on the device connection failed.Failed to connect to robot.d. Topics and Comm
24、andsa)获得姿态: rostopic echo /RosAria/pose cho 应该是请求输出的命令b)运行结果:2.线速度控制量的设置(s):rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: a)/RosAria/cmd_vel 指话题名字 Topic, 不能是/cmd_vel 或者cmd_velb)geometry_msgs/Twist 为数据类型 Messagec)linear: x: , y: , z: , angular: x: ,
25、 y: , z: 合成一个消息d)运行结果:机器人做相应运动并提升publishing and latching message for seconds3.角速度控制量的设置(s):rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: 4.也可以把2,3合成起来. 5.其他的 sonar, bumpers, acceleration parameters如何用更多ROS API请见: ROSARIA键盘控制:1. mkdir -p /RosAriaKey
26、board/src2. 创建包catkin_create_pkg RosAriaKeyboard std_msgs rospy roscpp编写程序:3. 编写文件在文件夹下加入如下几行命令(Bluks给我的程序是用rosbuild编译方法。需要做相应借鉴并修改)1.find_package(PkgConfig REQUIRED)新建工程mkdir -p /RosAriaCode/src2.创建包: catkin_create_pkg RosAriaCode std_msgs rospy roscpp3.处理CMakeListadd_executable(rosaria_teleop_code
27、 src/target_link_libraries(rosaria_teleop_code $catkin_LIBRARIES)add_dependencies(rosaria_teleop_code RosAriaCode_generate_messages_cpp)4. catkin_make一下。5. 执行:source devel/rosrun wmrcontrol rosaria_teleop_codeAndroid遥控Android Teleoperate Pioneer 3at Robot. 见网站:/ /Connecting to a ROS Master进入之前下载的ROS
28、ARIA包的文件夹中cd /catkin_ws/src/rosaria 网页上是不是写错了没有ROSARIA. 只能自己写命令git clone , 结果还可以, 结果是在src文件夹中得到了ROSARIA文件夹. rosaria与ROSARIA文件夹一样大小, 是不是就是一样的 Step2使用命令:Path_from_Home/ROSARIA$ rosmake但是在rosaria中使用rosmake 就可以, 结果为Built 52 packages with 0 failures., 但在ROSARIA下就报错. 网站上是不是写错了 Step3进入文件夹, 网站上写的命令$ roscd R
29、OSARIA, 但进入不了, 只能手动进入rosaria了, 好像roscd也不能使用. 创建一个文件:命令:gedit & 把网站上的代码粘贴进去再保存. Step4编辑rosaria文件夹下的CMakeList. txt文件. 在最后一行添加rosbuild_add_executable(android_teleop 在rosaria下输入命令:rosmake. 不起作用呢提示错误信息: rosmake rosmake starting. rosmake No package or stack specified. And current directory catkin_ws is no
30、t a package name or stack name. rosmake Packages requested are: rosmake Expanded args to: rosmake ERROR: No arguments could be parsed into valid package or stack names.从pubulisher节点中学习如何编译并运行NodeTurtleBot的键盘控制:控制命令以Terminal端键入方式:TurtleBot与p3dx应该很像,那么能不能在p3dx的terminal命令的基础上修改得到呢,大胆尝试后,竟然对了!TurtleBot端的命令为:(当然需要先启动机器人)rostopic pub -1 cmd_vel_mux/input/teleop geometry_msgs/Twist linear: x: , y: , z: , angular: x: , y: , z: 原因是,观察到中含有如下一句话:那么很有可能Top
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2