参考链接 已取得作者本人同意: 鱼香ROS2 .
参考链接:ros2 dashing版本 官方教程
系统版本:ubuntu18.04+ros2-dashing
相关知识
调试工具 rqt_graph
topic 命令 | 作用 |
---|---|
list | 返回系统中当前活动的所有主题的列表 |
list -t | 增加消息类型 |
echo | 打印实时话题内容 |
info | 查看主题信息 |
interface show | 查看消息类型 dashing无 foxy有 |
pub arg | 手动发布命令 |
ros2 topic echo /chatter
ros2 interface show std_msgs/msg/String
ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'
ros2 topic pub /chatter std_msgs/msg/String "{data: '123'}"
ros2 pkg create <package-name> --build-type {cmake,ament_cmake,ament_python} --dependencies <依赖名字>
功能包类型 | 用法 |
---|---|
ament_python | 适用于python程序 |
cmake | 适用于C++ |
ament_cmake | 适用于C++程序,是cmake的增强版 是默认的创建类型 |
功能包相关指令 | 含义 |
---|---|
create | 创建一个新的 ROS2 包 |
executables | 输出包特定可执行文件的列表 |
list | 输出可用包的列表 |
prefix | 输出包的前缀路径 |
xml | 输出包清单或特定标签的 XML dashing版本沒有此功能 |
ros2 pkg executables // 列出所有功能包的可执行文件
ros2 pkg executables turtlesim // 列出某个功能包的可执行文件
rosdep install --from-paths src --ignore-src -rosdistro=dashing -y
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
// 只编译一个包
colcon build --packages-select YOUR_PKG_NAME
// 不编译测试单元
colcon build --packages-select YOUR_PKG_NAME --cmake-args -DBUILD_TESTING=0
// 每次调整 python 脚本时都不必重新build了
colcon build --symlink-install
在ROS的API的实现层级中,最下面的是第三方的DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,有了rclc,我们就可以实现各个语言的库,大家都知道C语言是各个语言的鼻祖(汇编除外)所以基于rclc,ROS2官方实现了rclpy和rclcpp
实践创建文件
创建文件
// 建立工作空间和功能包
mkdir -p ~/test-ros2-launch/src
cd ~/test-ros2-launch/src
ros2 pkg create fishbot_description --build-type ament_python
// 建立URDF文件
cd fishbot_description && mkdir urdf
cd urdf
touch fishbot_base.urdf
cd ../
mkdir launch
cd launch
touch display_rviz2.launch.py
colcon build
source install/setup.bash
ros2 launch fishbot_description display_rviz2.launch.py
查看信息的命令
// | grep 过滤命令
ros2 pkg list | grep vill*
// 打印节点的发布与接受信息
ros2 node info /li4
实际的topic代码
编程思想
OOP编程就是面向对象编程
非OOP就是面向过程的编程方法 也就是POP
函数式思想,是FP
对象 = 属性+行为
报错解决
对‘rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_message_type_support_handle<std_msgs::msg::String_<std::allocator<void> > >()’未定义的引用
原因 用C++编写功能包的时候,没有在 CMakeLists.txt中添加依赖
// 我使用了std_msgs,所以添加std_msgs 如果使用别的 就添加别的
find_package(std_msgs REQUIRED)