$ 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