# ros
# ROS 发展
# ros 核心概念
# 节点与节点管理器
节点 (node)—— 执行单元
节点管理器 (ROS Master)—— 控制中心
![wode]()
# 话题通讯
话题 (Topic)—— 异步通讯机制
消息 (Message)—— 话题数据
![wode]()
# 服务通讯
服务 (Service)—— 同步通讯机制
![wode]()
# 参数
参数 (Parameter)—— 全局共享字典
![wode]()
# 文件系统
功能包 (Package)
功能包清单 (Package manifest)
元功能包 (Meta Packages)
![wode]()
# ROS 命令行工具使用
# 常用命令
# 运行小海龟
- roscore
- rosrun turtlesim 双击 tab
- rosrun turtlesim turtlesim_node
- rosrun turtlesim turtle_teleop_key
# 命令行控制小海龟
rqt_graph
rosnode
rosnode info /turtlesim
rostopic
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist (双击 tab)
海龟绕 z 轴转
rosmsg show geometry_msgs/Twist
rosservice
rosservice call /spawn (双击 tab,新加一只海龟)
rosbag record -a -O cmd_record (保存运行数据)
rosbag play cmd_record.bag (按上次数据运行)
![wode]()
![wode]()
![wode]()
![wode]()
![wode]()
![wode]()
![wode]()
# 创建工作空间与功能包
# 功能空间
src (代码空间)
build (编译空间)
devel (开发空间)
install (安装空间)
![wode]()
# 创建工作空间
# 创建工作空间
- mkdir -p ~/catkin_ws/src
- cd ~/catkin_ws/src
- catkin_init_workspace
# 编译工作空间
- cd ~/catkin_ws/
- catkin_make
# 设置环境变量
- source devel/setup.bash
# 检查环境变量
- echo $ROS_PACKAGE_PATH
# 创建功能包
# 创建功能包
- cd ~/catkin_ws/src
- catkin_create_pkg test_pkg std_msgs roscpp rospy
![wode]()
# 编译功能包
- cd ~catkin_ws
- catkin_make
- source ~/catkin_ws/devel/setup.bash
# 发布者 Publisher 的编程实现
创建功能包
在功能包的 src 中创建文档,输入代码 (touch 文档名)
配置发布者代码编译规则 (插入到 CM。。。.txt 中 Install 前)
add_executable(velocity
_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
回到工作空间根目录进行 ——catkin_make
设置环境变量 ——source delel/setup.bash (ctrl+h, 找到隐藏文件,固定)
重启终端,启动 ros,海龟,第三个终端 ——rosrun 功能包名
# 订阅者 Subscriber 的编程实现
在功能包的 src 中创建文档,输入代码
配置发布者代码编译规则 (插入到 CM。。。.txt 中 Install 前)
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})回到工作空间根目录进行 ——catkin_make
设置环境变量 ——source delel/setup.bash (发布者过程以固定,可忽略)
重启终端,启动 ros,海龟,第三个终端 ——rosrun 功能包名 文档名
# 话题消息的定义与使用
# 自定义话题消息
# 定义 msg 文件
touch Person.msg
数据接口的定义
string name
uint8 sex
uint8 ageuint8 unknown = 0
uint8 male = 1
uint8 female = 2
# 在 package.xml 中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
# 在 CMakeLists.txt 添加编译选项
find_package( …… message_generation)
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)catkin_package(…… message_runtime)
# 编译生成相关语言文件
# 配置代码编译规则
*/add_executable(person_publisher src/person_publisher.cpp)
*/target_link_libraries(person_publisher ${catkin_LIBRARIES})
*/add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)
*/add_executable(person_subscriber src/person_subscriber.cpp)
*/target_link_libraries(person_subscriber ${catkin_LIBRARIES})
*/add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

# 客户端 Client 的编程实现
# 创建功能包
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
# 创建客户端代码
# 配置客户端代码编译规则 (c++)
add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})
# 运行

# 服务端 Service 的编程实现
# 创建代码并配置编译规则
add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})
# 编译并运行服务器


# 服务数据的定义与使用

# 自定义服务数据
# 定义 srv 文件
# 在 package.xml 中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
# 在 CMakeLists.txt 添加编译选项
find_package(...... message_generation)
add_service_files(FILES Person.srv)
generates_message(DEPENDENCIES std_msgs)catkin_package(...... message_runtime)
# 编译

# 创建服务端代码
# 创建客户端代码
# 配置编译规则
add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)
add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)


# 参数的使用与编程方法
# 参数模型

# 创建功能包
catkin_create_pkg learning_parameter roscpp rospy std_srvs
# 参数命令行使用
# rosparam
列出当前多有参数
$ rosparam list
显示某个参数值
$ rosparam get param_key
设置某个参数值
$ rosparam set param_key param_value
保存参数到文件
$ rosparam dumo file_name
从文件读取参数
$ rosparam delete param_key
![wode]()
![wode]()
# 编程方法
# 配置代码编译规则
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LISRARAIES})
















