资讯动态

ros2的学习

发布时间:2026/10/27 10:16:44 来源:尧图企业网站定制
--------------------2026.10.151.1今天学了怎么用话题订阅接收小海龟的当前坐标位置并计算与目标位置之间的距离通过发布者发布速度数据让小海龟走到目标位置。1.1.1遇到问题编译过程遇到一个问题cmake里节点文件的路径添加错误没有将上级文件夹目录写入导致找不到文件实际小海龟运动遇到一个问题小海龟不能正确的转向并到达目标位置一直撞墙1.2学习怎么自定义通信接口1.2.1创建步骤只能用cpp版本的功能包创建消息接口默认cmake1.创建ros2工作空间与src文件夹 2.在工作空间的src目录终端输出ros2 pkg create《包名》此处可省略ament_cmake --dependencies 《消息接口所需依赖》创建功能包 3.在刚创建的功能包的目录下创建msg文件夹文件夹名一定要是msg 4.在msg文件夹下创建消息接口文件《驼峰命名法.msg》 5.在《驼峰命名法.msg》文件下编写消息接口插眼放图1.2.2文件如何编写1.所需依赖其中msg可不写可在终端用ros2 inteface list | grep Time我找的是时间戳的依赖查看 自己想定义的接口名 2.cpp类型定义的接口名插眼放图1.2.3在cmakelists里添加依赖与在.xml文件添加插眼放图1.2.4遇到的问题插眼放图1.3节点调用时后缀需是.hpp---------------------2026.10.162.1今天学习了怎么在构建发布者功能包中去调用昨日新建的消息接口依赖来进行消息发布今天就学了一点散漫了有一点2.2节点调用步骤2.2.1和其它消息接口一样要先声明头文件2.3期间遇到的问题一个是一开始添加头文件找不到路径后面发现后缀没有写成.hpp并且没有在c拓展中添加path导致报错-----------------------2026.10.183.1今天学了怎么用c构建client和sercive并且新建请求和响应以及怎么调用然后学习了如何新建一个服务通信的消息接口文件3.2client如何构建--3.3sercive如何构建--3.4服务通信的消息接口如何构建--3.5遇到的问题------------------2026.10.194.1今天学习了参数通信并编写c程序实现小海龟朝目标点巡航并运行添加参数实时更改回调函数的程序--4.2小海龟巡航实现--4.3新建参数通信函数并进行实时更改--------------------2026.10.205.1主要是学习了怎么在client客户端上通过发送请求来实现对参数的更新5.1.1--5.2用python来构建launch文件并通过launch来同时运行多个节点和打印,判断等操作5.2.1如何用python编写launch文件首先是在一个功能包下新建launch文件夹再在launch文件夹下新建《名字》.launch.py文件。然后再在文件中添加launch与launch ros两个头文件-5.2.2在cmakelists里添加复制的目录5.2.3如何在终端中运行launch指令同时启动多节点首先先在工作空间中运行colcon buildsource install/setup.bash等指令然后输入ros2 launch 《包名》 《launch文件名》其中也可以直接在launch文件夹打开终端输入ros2 launch 《launch文件名》 便可运行5.2.4launch的进阶用法及运行5.2.5遇到的问题------------2026.10.226.1主要是学习了坐标变换工具tf和rqt可视化工具的使用比如已知机器人基坐标系base_link和雷达坐标系base_laser之间的位置关系为0.10.00.2雷达检测到坐标0.30.00.0处有障碍物则此时因为base_link是基坐标所以对于他来说障碍物的坐标为雷达坐标➕雷达监测的障碍物坐标以雷达为基座标6.1.1通过命令行使用TF发布一个坐标系到另一个坐标系之间的变换例如发布base_link到base_laser之间的变换ros2 run tf2_ros static_transform_publisher --x 0.1 --y 0.0 --z 0.2 --roll 0.0 --pitch 0.0 --yaw 0.0 --frame_id base_link --child-frame-id base_laser其中从x到yaw就是两个坐标系直接的坐标关系xyz是平移rpy是旋转。frame_id是父坐标就是以他为基坐标child-frame-id是子坐标它是以父亲坐标为基的。查看坐标可用ros2 run tf2_ros tf2_echo base_link base_laser然后可以安装可视化工具来可视化刚刚的坐标sudo apt install mrpt apps安装完后调用3d-rotation-converter 可以打开可视化界面若要可视化坐标关系可以通过ros2 run tf2_tools view_frames 来生成坐标关系流程图6.1.2通过c发送静态坐标用于描述不会动的静态坐标原理即发布/tf_static话题首先在功能包构建cpp文件然后链接头文件和包含声明broadcaster_ 共享指针然后调用publish_tf函数发送话题坐标 编写完成在cmakelists添加一下具体代码如下6.1.3通过c发布动态坐标用于描述会动的动态坐标原理即发送/tf话题首先是跟发送静态坐标的流程一样但是链接的头文件有所区别静态链接的是静态坐标头文件动态链接的是动态坐标头文件然后声明定时器定时发送坐标具体代码如下6.1.4通过c查询tf关系流程跟上述一样但链接头文件得改成listener监听类再在public声明两个变量buffer_和listener_buffer_用于在固定时间接受缓存listener_则取buffer_缓存的数据进行监听time_负责定时器启动然后执行回调函数具体代码如下6.2学习了数据可视化工具rviz可以在rviz2工具中显示构建的数据6.2.1如何打开rviz2工具在终端中输入rviz2可以打开rviz2工具6.2.2功能介绍可以在左下角add添加需要可视化的数据例如tfrobotmodel等-------------2026.10.237.1首先是学习了ros2中的bag工具用于记录数据及播放数据比如可以先打开bag开始等待记录然后启动小海龟用键盘操作他运动bag会记录数据记录完毕后会生成一个记录文件后面再调用这个文件就可以重复执行刚刚小海龟的运动轨迹这就是记录数据与播放数据7.1.1首先是开启bag记录数据在工作空间中打开终端然后调用ros2 bag record 《需要记录的话题类型》例如我要记录小海龟的数据那么就是ros2 bag record /turtle/cmd_vel然后就可以开始记录数据了7.1.2查看生成的记录文件可以调用ls roa*来查开生成的文件夹和记录包文件然后可以用cat 《文件夹名》《记录包名》例如cat 《ros2bag2_2024_10_01-20_19_32_0》《记录包名》来查看内容7.1.3播放记录的数据包可以用ros2 bag play 《文件夹名》来播放数据包--7.2进阶学习了git版本控制的命令行操作指令7.2.1运用git命令添加保存代码及回溯更改的代码可用git diff 查看文件被改内容用git diff 《文件名》查看指定文件并标出被改内容7.2.2运用git命令撤回更改的代码若代码没有添加到暂存区只是保存可用git checkout 《文件名》撤销更改。若添加到暂存区可用git reset撤销暂存区的全部更改再后加文件名即git reset 《文件名》可以撤销占存区指定文件的更改。若代码已经提交可先用git log打印出提交日志然后用git reset 《上一轮提交日志》可以撤销上一轮的提交然后依次可以继续撤销上上轮。7.2.3git分支git的分支就是类似从当前代码再开出一条git仓库给他各分支之间的修改互不影响用命令行指令git branch可以查看当前有多少个分支用git branch 《分支名》可以新建一个分支并且可以用git checkout 《分支名》来切换到指定分支若一个分支修改了代码比较好而另一个分支还没有修改可以通过分支合并来将没修改好的分支变成修改好的分支可在需要合并其它分支的分支下调用git merge 《要与其合并的分支名》来进行合并。但是如果两个分支都修改了相同的代码则会出现代码冲突这需要一步步的细心去修改代码。最后可以用git branch -D 《分支名字》来删除分支--8.1仿真--使用URDF创建机器人URDF使用xml可拓展标记语言来描述机器人的几何结构,传感器,和执行器等信息 下面是urdf文件的编写格式《?xml version“1.0”? 是xml的版本号robot name“first_robot robot是标签 name是它的属性!-- XML 注释 -- xml的注释格式link namebase_link/link link是robot下的子标签/robot》8.1.1如何通过URDF构建一个机器人首先先构建一个功能包然后在功能包下新建个urdf文件夹再在urdf文件夹里构建.urdf文件。接着就是按照上面的格式来补充完整机器人的身体结构等属性8.1.2使用工具构建urdf文件在终端通过urdf_to_graphviz 《urdf文件》例如urdf_to_graphviz first_robot来构建出.pdf和.gv文件其中.pdf文件可以输出可视化的结构图8.2在Rviz中显示机器人可以在rviz2数据可视化工具中显示出刚刚构建的机器人的实物3D图8.2.1通过文件在rviz2中显示首先在终端输入rviz2打开工具然后在左下角的add里添加robotmodel打开后在..source中可选择是通过topic传递数据还是文件传输因为目前还没有构建话题所以选择打开刚刚编写好的urdf文件就可以看到可视化的数据模型了其中在左上方的Fixed Frame可以选择固定框架比如选择base_link但是不会自动加载部件的关系8.2.2通过launch发送节点话题加载tf关系首先是在刚刚的功能包下构建launch文件夹在launch文件夹下构建.launch.py文件然后在launch里提供urdf文件的路径并将其转换为urdf文件的内容再转换为参数值内容然后将文件内容传递给robot_state_publisher节点该节点的作用是将urdf文件转换为tf2消息。依次再新建一个发布节点将urdf文件转换为joint_state消息。再新建一个发布节点将joint_state消息发布到rviz2。最后编译构建无误后在当前工作空间通过ros2 launch 《功能包名》《.launch.py文件名》来打开rviz2打开后source默认是topic在下方可以选择是来自哪个功能包。----------2026.10.249.1使用xacro简化urdfxacro是基于xml的宏语言用于简化urdf文件的创建和维护可以用他将部件定义为宏需要时调用即可9.1.1创建xacro文件及编写要素在urdf文件夹下新建一个.xacro文件然后可以将urdf文件编写的内容复制到.xacro文件下修改。首先先在总标签添加xacro的链接robot xmlns:xacrohttp://www.ros.org/wiki/xacro namefirst_robot然后xacro宏的编写规则是在一对xacro:macro namebase_link params参数1 参数2内容参数格式为${参数}/xacromacro/robot中编写宏其中name为这个宏的名字有且只能有一个然后params则为包含的内容的可修改参数可直接调用宏填写9.1.2xacro宏的调用在robot内容robot里填写调用格式为xacro:base_link 参数1“” 参数2“”/其中因为宏名只能有一个所以要是要调用多个相同部件可以将部件的名字设置为参数9.1.3xacro指令的使用可以在终端使用xacro 《.xacro文件的路径》来将.xacro文件解析成urdf文件同理则可以在launch文件中将“cat ”替换成“xacro ”这样就可以将路径的文件直接解析成urdf文件然后通过命令行ros2 launch 包名 《launch文件名》model:《需解析的xacro文件路径》就可以解析成urdf文件并打开rviz2进行可视化展示了--9.2创建机器人及传感器部件将机器人的各个部件都分成一个xacro文件每个xacro文件复制一个部件随后再通过一个总的xacro文件链接其它部件的文件路径统一发送9.2.1如何构建部件的xacro文件首先先在urdf中新建一个.xacro文件然后在文件中写上?xml version1.0?robot xmlns:xacrohttp://www.ros.org/wiki/xacro link部件信息/linkjoint加入关系/joint/xacromacro/robot这个结构其中这个和一起打包的区别在于robot后不用写name9.2.2如何链接和发送各个部件.xacro文件首先新建一个总的.xacro文件然后添加robot xmlns:xacrohttp://www.ros.org/wiki/xacro namefirst_robot/xacromacro/robot结构在这个结构里进行链接和调用。然后是链接刚刚的部件文件形式为xacro:include filename$(功能包名)/urdf/部件文件的路径/部件的.xacro文件依次链接所需要包含和调用的部件然后再通过xacro:base_name 参数1 参数2的形式进行调用即可9.2.3通过launch来发送和打开rviz2显示然后现在是调用我们之前写的launch文件来将urdf显示在rviz2上ros2 launch 包名 .launch.py文件 model:刚刚那个总.xacro文件的文件路径运行即可在rviz2中打开并显示构建的机器人9.2.4给机器人添加虚拟部件虚拟部件就是相当于给机器人能有一个视觉地的现象因为正常来说显示的平面是以机器人的中心为基准。操作就是在机器人主体部件的link上加多一个link namebase_footprint/即可然后在rviz2页面固定框架选择这个虚拟部件即可9.2.5防撞属性防撞属性就是让机器人能有在碰到物体时能感应到碰撞。添加防撞属性操作即在每个部件的/visual下添加一组collision直接复制visual的内容/collision即可然后在rviz2上勾选collision enable即可打开防撞属性9.2.6质量与惯性质量与惯性就是给机器人的部件加上质量属性让它有物理层面的效应。操作先在总xacro文件同级目录下添加common_inertia.xacro文件再在里面填写以下内容然后在每一个需要添加质量与惯性属性的部件文件中的robot下方添加 xacro:include filename$(包名)/common_inertia.xacro文件路径/ 。 然后再在link下调用xacro:box_inertia m 参数1“”/ 其中box为此部件的形状 参数则填部件的外形参数 m为质量。然后打开rviz2中可以在Mass Properties下勾选质量或惯性的启动-----------2026.10.25

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑