机器人操作系统ROS_典型功能实现方法详解(2)

2019-03-28 12:01

$ rosmsg show beginner_tutorials/Num. 应该输出int64 num 但但提示找不到该消息??????

使用查找命令$ rosmsg show Num, 应该输出[beginner_tutorials/Num]:int64 num. 但还是找不到???????????????????

3.1创建一个srv 1. 创建一个srv

a) $ roscd beginner_tutorials//输入这行命令后, 提升找不到 beginner_tutorials文件夹呢.

//只能手动进入该文件夹了 b) $ mkdir srv //创建一个srv文件夹

c) $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv把ROS系统文件中的

rospy_tutorials包复制文件到srv文件夹下

2. 对beginner_tutorials中的CMakeList.txt做如下修改:

a) 在原有的find_package(xxx)中加入“message_generation”(在创建msg过程中已

添加)

b) 取消add_serivce_files( )的注释, 并修改为add_serivce_files(FILES AddtwoInts.srv)

3.2使用rossrv:

使用命令:$ rossrv show beginner_tutorials/AddTwoInts. 应该输出int64 a int64 b --- int64 sum. 但提示找不到该消息??????

使用查找命令 $ rossrv show AddTwoInts, 也只能查找到[rospy_tutorials/AddTwoInts]中的, 找不到[beginner_tutorials/AddTwoInts]中的. ???????????

4.msg与srv共同的下一步

在CMakeList.txt中, 取消generate_messages(DEPENDENCIES std_msgs)的注释(创建msg阶段已经完成)

在catkin_ws工作空间下输入命令: $ catkin_make

结果是生成了针对不同语言的头文件: msg的C++头文件在 ~/catkin_ws/devel/include/beginner_tutorials/. Python脚本在 ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg. 列表处理语言文件在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/. 对于.srv, 生成的结果也类似. 生成成功!

1.1.11 cc Writing a Simple Publisher and Subscriber (C++) 上接1.1.4,不需要经过生成msg与srv的过程 1.0 进入包cd ~/catkin_ws/src/beginner_tutorials

1.1 创建Publisher Node:src/listener.cpp 文件(在该包的src文件夹下) 2.1 创建Subscriber Node:src/talker.cpp 文件(在该包的src文件夹下) 3.1 Building your nodes 生成可执行文件

a) 在CMakeLists.txt文件中(包的目录下面的)最后面加入(CMakeLists.txt已经在之前msg&srv中生成并处理了, 若没经过上面的msg&srv阶段的处理, 也能正常编译生成)

add_executable(talker src/talker.cpp)//生成可执行文件 target_link_libraries(talker ${catkin_LIBRARIES})

add_dependencies(talker beginner_tutorials_generate_messages_cpp)//包的名错了也没关系

//若是在catkin_ws_wmr的工作空间下, 该行命令可以改为add_dependencies(talker wmrcontrol_generate_messages_cpp)

add_executable(listener src/listener.cpp)//对于listener文件 target_link_libraries(listener ${catkin_LIBRARIES})

add_dependencies(listener beginner_tutorials_generate_messages_cpp)

6

//若是在catkin_ws_wmr的工作空间下, 该行命令可以改为add_dependencies(listener wmrcontrol_generate_messages_cpp)

b) 在工作空间目录下, 输入命令$ catkin_make. 该过程使用了CMakeList.txt. 生成的结果为在:devel/lib/beginner_tutorials下有talker与listener节点(可执行文件). 并有提示:[100%] Built target talker;[100%] Built target listener

1.1.13 cc Examining the Simple Publisher and Subscriber

1. 打开ros服务:roscore 2. 运行talker

a. 另开一个terminal,进入$ cd ~/catkin_ws,

b. 再执行命令$ source ./devel/setup.bash . 该命令等效于 source ~/catkin_ws(工作空间

名)/devel/setup.bash?。该命令很快即执行完毕

c. $ rosrun beginner_tutorials(包的名称) talker : 运行Publisher. (不需要在工作空间目

录下) 之后会看到如下类似消息: [INFO] [WallTime: 1314931831.774057] hello world 1314931831.77.

3. 运行listener

a. 进入$ cd ~/catkin_ws,

b. 再执行命令$ source ./devel/setup.bash

c. $ rosrun beginner_tutorials(包的名称) listener : 运行Subscriber. (不需要在工作空间

目录下) 之后会看到如下类似消息:[INFO] [WallTime: 1314931969.258941] /listener_17657_1314931968795I heard hello world 1314931969.26

1.1.14 cc Writing a Simple Service and Client (C++)

需要在1.1.10 Creating a ROS msg and srv的基础上来编写, 因为需要加入头文件#include \

1. 写一个服务器节点: 进入文件夹cd ~/catkin_ws/src/beginner_tutorials, 编写

src/add_two_ints_server.cpp

2. 写一个客户端节点: 进入文件夹cd ~/catkin_ws/src/beginner_tutorials编写

src/add_two_ints_client.cpp 3. Build节点

a) 在~/catkin_ws/src/beginner_tutorials/CMakeLists.txt中加入如下几行: //把之前生成talker与listener的相关部分注释掉

add_executable(add_two_ints_server src/add_two_ints_server.cpp)//编译成可执行文件 target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})//添加动态链接库 add_dependencies(add_two_ints_server beginner_tutorials_gencpp)//包的名+gencpp? add_executable(add_two_ints_client src/add_two_ints_client.cpp)//client target_link_libraries(add_two_ints_client ${catkin_LIBRARIES}) add_dependencies(add_two_ints_client beginner_tutorials_gencpp)

b) 再进行: cd ~/catkin_ws -> catkin_make : 结果是在devel/lib/beginner_tutorials下生成了两个可执行文件

1.1.16 cc Examining the Simple Service and Client 1. 打开ros服务:roscore 2. 运行服务器端:

a) 还需要再进入$ cd ~/catkin_ws, 再执行命令$ source ./devel/setup.bash

b) 运行add_two_ints_server :输入$ rosrun beginner_tutorials add_two_ints_server. 之后

会看到如下类似消息:[ INFO] [1394710514.388776396]: Ready to add two ints

3. 运行客户端

a) 还需要再进入$ cd ~/catkin_ws, 再执行命令$ source ./devel/setup.bash

b) 运行add_two_ints_server :输入$ rosrun beginner_tutorials add_two_ints_client 1 3. 之

后会看到如下类似消息:[ INFO] [1394710671.682839350]: Sum: 4. 在客户端terminal中可以看到信息[ INFO] [1394710671.682255841]: request: x=1, y=3;[ INFO]

7

[1394710671.682339580]: sending back response: [4]

进一步的服务器客户端例程:https://github.com/fairlight1337/ros_service_examples/

1.1.17 Recording and playing back data ??????????

http://wiki.ros.org/ROS/Tutorials/Recording and playing back data

P3-AT/DX

ROSARIA配置与运行

网站主页 http://wiki.ros.org/ROSARIA

How to use ROSARIA:

http://wiki.ros.org/ROSARIA/Tutorials/How to use ROSARIA

1.2创建ROS工作空间

之前若没有加入启动命令. /opt/ros/hydro/setup.bash的话, 则加入.

为了创建一个关于ROSARIA的工作空间, 将学习ROS基础阶段的catkin_ws文件夹重命名为catkin_ws_Base, 再新建一个工作空间catkin_ws: mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src

catkin_init_workspace// cd ~/catkin_ws

catkin_make//build //这后几步是需要做的,因为在1。4中要运行devel/setup。dash

1.3下载ROSARIA到该工作空间中. 首先进入src文件夹, 之后运行命令git clone https://github.com/amor-ros-pkg/rosaria.git //这次使用github网站就没有问题, 结果是在src文件夹下得到了rosaria包. 包中包含RosAria.cpp文件

在安装ARIA后再下载该包应该也可以??

1.4 安装ARIA以及Build ROSARIA 1. source ~/catkin_ws/devel/setup.bash

a) //在当前bash环境下执行文件~/catkin_ws/devel/setup.bash中的命令.

b) 或者把这项添加到.bashrc文件中再执行.bashrc文件:{echo \

~/catkin_ws/devel/setup.bash\

2. 得到包之后, 编译它们:

a) rosdep update//更新

b) rosdep install rosaria//运行完提示ARIA has been installed in /usr/local/Aria,

installation successful, 再等会,就有 All required rosdeps installed successfully i. 这个应该与1.3中的rosaria包没有关系, 应该是从ROS网站上安装rosaria ii. 看看是不是安装在了/usr/local/Aria中?? iii. 重装系统后再次安装时,出现问题:apt: command [sudo apt-get install

checkinstall] failed。 运行sudo apt-get update时出现问题Some index files failed to download. They have been ignored, or old ones used instead. 解决方法:sudo rm /var/lib/apt/lists/* -vf 删除相应文件

c) catkin_make//与上次的catkin_make显示出不同的结果;//该命令要在该工作空间中//

8

i. 对于包来讲, 名称不区分大小写, 比如当有两个包rosaria与ROSARIA时, 会有如下提示:Multiple packages found with the same name \rosaria- ROSARIA” ii. 当在catkin_ws文件夹下使用命令catkin_make时, 会用到文件src/rosaria/CMakeList.txt iii. 是这一步在devel/lib下生成了rosaria可执行文件??

关于CMakeList.txt文件(不用改): add_executable(RosAria RosAria.cpp)

add_dependencies(RosAria rosaria_gencfg) add_dependencies(RosAria rosaria_gencpp)

target_link_libraries(RosAria ${catkin_LIBRARIES} ${Boost_LIBRARIES} Aria pthread dl rt) set_target_properties(RosAria PROPERTIES COMPILE_FLAGS \

generate_messages( DEPENDENCIES geometry_msgs std_msgs)//要包括geometry_msgs

1.5 运行roscore: 运行roscore

1.6 运行RosAria节点

1. source ~/RosAria/devel/setup.bash. 若不在第一步运行该命令,则会报错[rospack] Error:

stack/package rosaria not found

2. 运行启动该节点的命令: rosrun rosaria RosAria

a) 不需要到catkin_ws文件夹下.

b) 命令rosrun 允许直接运行一个包里面的节点(可执行程序): rosrun [package_name]

[node_name].

c) 节点的位置为\\catkin_ws\\devel\\lib\\rosaria\\RosAria

3. (从运行下面4可知不需要这一步)设置网络地址export ROS_IP=172.22.243.177. 4. 配置好USB转串口后就可以连接了, 连接成功时输出的提示信息为(退出连接的话, 直

接Ctrl+C就可以了.):

[ INFO] [1394765069.684460124]: RosAria: using port: [/dev/ttyUSB0]

Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0. Syncing 0 Syncing 1 Syncing 2

Connected to robot.

Name: RoboticsWorld_4129 Type: Pioneer Subtype: p3at-sh

ArConfig: Config version: 2.0

Loaded robot parameters from p3at-sh.p

ArRobotConnector: Connecting to MTX batteries (if neccesary)... ArRobotConnector: Connecting to MTX sonar (if neccesary)...

[ INFO] [1394765070.477106453]: Setting TicksMM from robot EEPROM: 138 [ INFO] [1394765070.480042783]: Setting DriftFactor from robot EEPROM: 0 [ INFO] [1394765070.483254729]: Setting RevCount from robot EEPROM: 32550 [ INFO] [1394765070.526489547]: RosAria: publishing new recharge state 0. [ INFO] [1394765070.526596408]: RosAria: publishing new motors state 0. [ INFO] [1394765072.184292718]: RosAria: publishing new motors state 1.

说明:

1. 一问题的解决:在运行后面连接Android时, 再回头运行此命令, 则就去src/rosaria找该

可执行文件了, 因此从路径上就错了, 不知是那一步影响了该命令的执行. 不过用1.4中的catkin_make命令重新编译一下就又能正常连接了.

2. 若USB转串口没有配置好, 则会出现下方的错误提示, 配置方法请见下方的USB转串口

配置.

[ INFO] [1394760211.482514856]: RosAria: using port: [/dev/ttyUSB0] //这说明使用的COM编号为ttyUSB0

Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.

ArSerialConnection::open: Could not open serial port '/dev/ttyUSB0' | ErrorFromOSNum: 2 ErrorFromOSString:

9

No such file or directory

Could not connect, because open on the device connection failed. Failed to connect to robot.

[ERROR] [1394760211.511075792]: RosAria: ARIA could not connect to robot! (Check ~port parameter is correct, and permissions on port device.)

[FATAL] [1394760211.511173101]: RosAria: ROS node setup failed...

1.9 Topics and Commands

1. 获得姿态: rostopic echo /RosAria/pose // 可以在另一terminal的根命令

a) /RosAria/pose为Topic名称 b) .echo 应该是请求输出的命令 c) 运行结果:

2. 线速度控制量的设置(0.1m/s):

rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'

a) /RosAria/cmd_vel 指话题名字 Topic, 不能是/cmd_vel 或者cmd_vel b) geometry_msgs/Twist 为数据类型 Message

c) '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}' 合成一个消息

d) 运行结果:机器人做相应运动并提升publishing and latching message for 3.0 seconds 。以及[ INFO] [1395025704.461141760]: new speed: [100.00,-0.30](1395025704.461)

3. 角速度控制量的设置(0.1rad/s?):

rostopic pub -1 /RosAria/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.1}}' 4. 也可以把2,3合成起来.

5. 其他的? sonar, bumpers, acceleration parameters?如何用?更多ROS API请见:

http://wiki.ros.org/ROSARIA

ROSARIA键盘控制:

1. mkdir -p ~/RosAriaKeyboard/src

2. 创建包catkin_create_pkg RosAriaKeyboard std_msgs rospy roscpp

编写程序:

3. 编写rosaria_teleop_key.cpp文件

在CMakeList.txt文件夹下加入如下几行命令(Bluks给我的程序是用rosbuild编译方法。需要做相应借鉴并修改) 1.

find_package(PkgConfig REQUIRED)//若无此 ncurses相关编译命令, 会报错 initscr未定义 pkg_check_modules ( ncurses++ REQUIRED ncurses++)//ncurses相关

add_executable(rosaria_teleop_key src/rosaria_teleop_key.cpp) target_link_libraries(rosaria_teleop_key ${catkin_LIBRARIES})

target_link_libraries(rosaria_teleop_key ${ncurses++_LIBRARIES})//ncurses相关 add_dependencies(rosaria_teleop_key wmrcontrol_generate_messages_cpp)

3. 运行命令catkin_make: 结果是在devel/lib/wmrcontrol下生成了一个rosaria_teleop_key的

可执行文件

10


机器人操作系统ROS_典型功能实现方法详解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:微积分实验报告2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: