ros学习
ros在使用之前要先输入roscore命令,然后在新打开的终端里进行相关操作
ros工作空间的创建
mkdir -p ~/ros_workspace/src
cd ~/ros_workspace/src catkin_init_workspace
cd ..
catkin_make source ./devel/setup.bash
ros功能包的创建(创建功能包hello)
cd ~/ros_workspace/src
catkin_create_pkg hello std_mags rospy roscpp cd ..
catkin_make
source ./devel/setup.bash //也可以是 . devel/setup.bash
ros工作空间覆盖问题
新创建的工作空间路径在ROS_PACKAGE_PATH中会放到最前面
不同空间中的同名功能包,ROS_PACKAGE_PATH前面的会覆盖后面的
ros的文件系统工具(以功能包roscpp为例)
rospack find roscpp //查找功能包所在路径
roscd roscpp //切换到功能包目录 rosls roscpp //显示功能包目录
roscd log //切换到日志文件目录
roscd和rosls具有命令补全功能
rospack depends1 roscpp //查找功能包的直接依赖项
rospack depends roscpp //查找功能包的所有依赖项
ros节点(以turtlesim功能包,及其中的turtlesim_node节点为例)
rosnode list //列出正在运行的节点(e.g./turtlesim)
rosnode info /rosout //列出节点信息
rosrun turtlesim turtlesim_node //运行tuetlesim_node节点
rosrun turtlesim turtlesim_node __name:my_turtle //改变节点名字
rqt_graph //绘制节点关系图
ros话题
rostopic bw //显示话题带宽 rostopic echo [topic_name] // 在屏幕上显示话题信息
rostopic list //打印激活话题的信息
//默认列出所有话题订阅者和发布者
-v //列出详细信息
-p //列出发布者
-s //列出订阅者 rostopic type [topic_name] //打印话题的消息类型
//可以用rostopic type [topic_name] | rosmsg show 来查询类型详细信息 rostopic pub //向话题发布数据
//习惯用法:rostopic pub [topic] [msg_type] [args]
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
-1:发布一次消息,然后退出
-r 1:设定消息的发布频率
-1和-r 1只能出现一个
后面的参数遵循YAML的语法
rostopic hz [topic_name] //显示话题的发布频率
rqt_plot //画出发布在话题上的数据,随时间的变化图
ros服务和ros参数
rosservice list //列出所有激活状态的服务 rosservice type [service_name] //显示服务的类型
rosservice type [service_name] | rossrv show //显示服务类型的具体信息
rosservice call [service_name] ([parameters]) //调用服务
rosparam list //列出所有激活状态的参数
rosparam get [parameter_name] //获取参数值
rosparam get / //获取所有的参数值
rosparam set [parameter_name] [parameter_vaule] //设置参数值
rosparam dump [***.yaml] ([namespace]) //把参数写到.yaml文件里
rosparam load [***.yaml] [namespace] //把.yaml文件加载到新的命名空间里
ros调试
rqt_console //显示节点的输出信息
rqt_logger_level //更改激活状态节点的日志信息级别
日志级别(按重要性排序):Fatal/Error/Warn/Info/Debug
通过设定级别,可以获得相应级别和更高级别的信息
roslaunch [package_name] [***.launch] //启动.launch文件
ros文件编辑
export EDITOR='gedit -w' //设定以何种编辑器打开文件,当前终端有效,默认使用vim
rosed [package_name] [file_name] //直接编辑文件,无需cd到指定路径
rosed [package_name] <Tab> <Tab> //显示功能包中的可编辑文件
ros msg和srv文件创建(以hello功能包为例)
msg文件:自定义与语言无关的消息类型,位于msg文件夹,描述ros消息字段
srv文件:自定义服务数据,位于srv文件夹,描述服务,包括请求和应答两个部分
roscd hello
mkdir msg
echo "int64 num" > msg/Num.msg
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend> find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
) catkin_package(
...
CATKIN_DEPEND message_runtime ...
...) add_message_files(
FILES
Num.msg
) generate_messages(
DEPENDENCIES
std_msgs
) rosmsg show [message_type] //确认ros可以看到这个消息
rosmsg show hello/Num roscd hello
mkdir srv
roscp [ros_package] ***.srv srv/***.srv
add_service_files(
FILES
***.srv
) rossrv show [service_type] //确认ros可以看到这个服务
rossrv show hello/*** cd ~/catkin_ws
catkin_make install //重新编译
用C++写一个简单的publisher和subscriber
src/talker.cpp src/listener.cpp
cmake_minimum_required(VERSION 2.8.3)
project(hello)
## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
## Declare ROS messages and services
add_message_files(FILES Num.msg)
add_service_files(FILES ***.srv)
## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)
## Declare a catkin package
catkin_package()
## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp) add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener ${PROJECT_NAME}_generate_messages_cpp)
cd ~/catkin_ws
catkin_make source ./devel/setup.bash
roscore rosrun hello talker
rosrun hello listener
用C++写一个简单的Service和Client
hello/src/server.cpp hello/src/client.cpp
add_executable(server src/server.cpp)
target_link_libraries(server ${catkin_LIBRARIES})
add_dependencies(server ${PROJECT_NAME}_gencpp) add_executable(client src/client.cpp)
target_link_libraries(client ${catkin_LIBRARIES})
add_dependencies(client ${PROJECT_NAME}_gencpp)
ros的分布式多机通讯
<1>查询两台机器的IP地址,确保他们处于同一个网络当中
<2>分别在两个机器中的/etc/hosts文件中加入对方的IP地址和机器名字
<3>在从机中设置ROS_MASTER_URI
export ROS_MASTER_URI=http://lihan:11311 //当前终端有效
echo "export ROS_MASTER_URI=http://lihan:11311" >> ~/.bzshrc //所有终端有效rosbag数据记录与回放
mkdir ~/bag_files
cd ~/bag_files rosbag record -a //开始记录ros信息,-a(all)指记录所有的信息
//在数据运行的终端上,按下“ctrl+c”终止数据记录 rosbag info [***.bag] //记录的ros信息简介
rosbag paly [***.bag] //回放.bag文件中记录的ros信息