
--------------------2026.10.151.1今天學了怎么用話題訂閱接收小海龜?shù)漠斍白鴺宋恢貌⒂嬎闩c目標位置之間的距離通過發(fā)布者發(fā)布速度數(shù)據(jù)讓小海龜走到目標位置。1.1.1遇到問題編譯過程遇到一個問題cmake里節(jié)點文件的路徑添加錯誤沒有將上級文件夾目錄寫入導(dǎo)致找不到文件實際小海龜運動遇到一個問題小海龜不能正確的轉(zhuǎn)向并到達目標位置一直撞墻1.2學習怎么自定義通信接口1.2.1創(chuàng)建步驟只能用cpp版本的功能包創(chuàng)建消息接口默認cmake1.創(chuàng)建ros2工作空間與src文件夾 2.在工作空間的src目錄終端輸出ros2 pkg create《包名》此處可省略ament_cmake --dependencies 《消息接口所需依賴》創(chuàng)建功能包 3.在剛創(chuàng)建的功能包的目錄下創(chuàng)建msg文件夾文件夾名一定要是msg 4.在msg文件夾下創(chuàng)建消息接口文件《駝峰命名法.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節(jié)點調(diào)用時后綴需是.hpp---------------------2026.10.162.1今天學習了怎么在構(gòu)建發(fā)布者功能包中去調(diào)用昨日新建的消息接口依賴來進行消息發(fā)布今天就學了一點散漫了有一點2.2節(jié)點調(diào)用步驟2.2.1和其它消息接口一樣要先聲明頭文件2.3期間遇到的問題一個是一開始添加頭文件找不到路徑后面發(fā)現(xiàn)后綴沒有寫成.hpp并且沒有在c拓展中添加path導(dǎo)致報錯-----------------------2026.10.183.1今天學了怎么用c構(gòu)建client和sercive并且新建請求和響應(yīng)以及怎么調(diào)用然后學習了如何新建一個服務(wù)通信的消息接口文件3.2client如何構(gòu)建--3.3sercive如何構(gòu)建--3.4服務(wù)通信的消息接口如何構(gòu)建--3.5遇到的問題------------------2026.10.194.1今天學習了參數(shù)通信并編寫c程序?qū)崿F(xiàn)小海龜朝目標點巡航并運行添加參數(shù)實時更改回調(diào)函數(shù)的程序--4.2小海龜巡航實現(xiàn)--4.3新建參數(shù)通信函數(shù)并進行實時更改--------------------2026.10.205.1主要是學習了怎么在client客戶端上通過發(fā)送請求來實現(xiàn)對參數(shù)的更新5.1.1--5.2用python來構(gòu)建launch文件并通過launch來同時運行多個節(jié)點和打印,判斷等操作5.2.1如何用python編寫launch文件首先是在一個功能包下新建launch文件夾再在launch文件夾下新建《名字》.launch.py文件。然后再在文件中添加launch與launch ros兩個頭文件-5.2.2在cmakelists里添加復(fù)制的目錄5.2.3如何在終端中運行l(wèi)aunch指令同時啟動多節(jié)點首先先在工作空間中運行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之間的位置關(guān)系為0.10.00.2雷達檢測到坐標0.30.00.0處有障礙物則此時因為base_link是基坐標所以對于他來說障礙物的坐標為雷達坐標?雷達監(jiān)測的障礙物坐標以雷達為基座標6.1.1通過命令行使用TF發(fā)布一個坐標系到另一個坐標系之間的變換例如發(fā)布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到y(tǒng)aw就是兩個坐標系直接的坐標關(guān)系xyz是平移rpy是旋轉(zhuǎn)。frame_id是父坐標就是以他為基坐標child-frame-id是子坐標它是以父親坐標為基的。查看坐標可用ros2 run tf2_ros tf2_echo base_link base_laser然后可以安裝可視化工具來可視化剛剛的坐標sudo apt install mrpt apps安裝完后調(diào)用3d-rotation-converter 可以打開可視化界面若要可視化坐標關(guān)系可以通過ros2 run tf2_tools view_frames 來生成坐標關(guān)系流程圖6.1.2通過c發(fā)送靜態(tài)坐標用于描述不會動的靜態(tài)坐標原理即發(fā)布/tf_static話題首先在功能包構(gòu)建cpp文件然后鏈接頭文件和包含聲明broadcaster_ 共享指針然后調(diào)用publish_tf函數(shù)發(fā)送話題坐標 編寫完成在cmakelists添加一下具體代碼如下6.1.3通過c發(fā)布動態(tài)坐標用于描述會動的動態(tài)坐標原理即發(fā)送/tf話題首先是跟發(fā)送靜態(tài)坐標的流程一樣但是鏈接的頭文件有所區(qū)別靜態(tài)鏈接的是靜態(tài)坐標頭文件動態(tài)鏈接的是動態(tài)坐標頭文件然后聲明定時器定時發(fā)送坐標具體代碼如下6.1.4通過c查詢tf關(guān)系流程跟上述一樣但鏈接頭文件得改成listener監(jiān)聽類再在public聲明兩個變量buffer_和listener_buffer_用于在固定時間接受緩存listener_則取buffer_緩存的數(shù)據(jù)進行監(jiān)聽time_負責定時器啟動然后執(zhí)行回調(diào)函數(shù)具體代碼如下6.2學習了數(shù)據(jù)可視化工具rviz可以在rviz2工具中顯示構(gòu)建的數(shù)據(jù)6.2.1如何打開rviz2工具在終端中輸入rviz2可以打開rviz2工具6.2.2功能介紹可以在左下角add添加需要可視化的數(shù)據(jù)例如tfrobotmodel等-------------2026.10.237.1首先是學習了ros2中的bag工具用于記錄數(shù)據(jù)及播放數(shù)據(jù)比如可以先打開bag開始等待記錄然后啟動小海龜用鍵盤操作他運動bag會記錄數(shù)據(jù)記錄完畢后會生成一個記錄文件后面再調(diào)用這個文件就可以重復(fù)執(zhí)行剛剛小海龜?shù)倪\動軌跡這就是記錄數(shù)據(jù)與播放數(shù)據(jù)7.1.1首先是開啟bag記錄數(shù)據(jù)在工作空間中打開終端然后調(diào)用ros2 bag record 《需要記錄的話題類型》例如我要記錄小海龜?shù)臄?shù)據(jù)那么就是ros2 bag record /turtle/cmd_vel然后就可以開始記錄數(shù)據(jù)了7.1.2查看生成的記錄文件可以調(diào)用ls roa*來查開生成的文件夾和記錄包文件然后可以用cat 《文件夾名》《記錄包名》例如cat 《ros2bag2_2024_10_01-20_19_32_0》《記錄包名》來查看內(nèi)容7.1.3播放記錄的數(shù)據(jù)包可以用ros2 bag play 《文件夾名》來播放數(shù)據(jù)包--7.2進階學習了git版本控制的命令行操作指令7.2.1運用git命令添加保存代碼及回溯更改的代碼可用git diff 查看文件被改內(nèi)容用git diff 《文件名》查看指定文件并標出被改內(nèi)容7.2.2運用git命令撤回更改的代碼若代碼沒有添加到暫存區(qū)只是保存可用git checkout 《文件名》撤銷更改。若添加到暫存區(qū)可用git reset撤銷暫存區(qū)的全部更改再后加文件名即git reset 《文件名》可以撤銷占存區(qū)指定文件的更改。若代碼已經(jīng)提交可先用git log打印出提交日志然后用git reset 《上一輪提交日志》可以撤銷上一輪的提交然后依次可以繼續(xù)撤銷上上輪。7.2.3git分支git的分支就是類似從當前代碼再開出一條git倉庫給他各分支之間的修改互不影響用命令行指令git branch可以查看當前有多少個分支用git branch 《分支名》可以新建一個分支并且可以用git checkout 《分支名》來切換到指定分支若一個分支修改了代碼比較好而另一個分支還沒有修改可以通過分支合并來將沒修改好的分支變成修改好的分支可在需要合并其它分支的分支下調(diào)用git merge 《要與其合并的分支名》來進行合并。但是如果兩個分支都修改了相同的代碼則會出現(xiàn)代碼沖突這需要一步步的細心去修改代碼。最后可以用git branch -D 《分支名字》來刪除分支--8.1仿真--使用URDF創(chuàng)建機器人URDF使用xml可拓展標記語言來描述機器人的幾何結(jié)構(gòu),傳感器,和執(zhí)行器等信息 下面是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構(gòu)建一個機器人首先先構(gòu)建一個功能包然后在功能包下新建個urdf文件夾再在urdf文件夾里構(gòu)建.urdf文件。接著就是按照上面的格式來補充完整機器人的身體結(jié)構(gòu)等屬性8.1.2使用工具構(gòu)建urdf文件在終端通過urdf_to_graphviz 《urdf文件》例如urdf_to_graphviz first_robot來構(gòu)建出.pdf和.gv文件其中.pdf文件可以輸出可視化的結(jié)構(gòu)圖8.2在Rviz中顯示機器人可以在rviz2數(shù)據(jù)可視化工具中顯示出剛剛構(gòu)建的機器人的實物3D圖8.2.1通過文件在rviz2中顯示首先在終端輸入rviz2打開工具然后在左下角的add里添加robotmodel打開后在..source中可選擇是通過topic傳遞數(shù)據(jù)還是文件傳輸因為目前還沒有構(gòu)建話題所以選擇打開剛剛編寫好的urdf文件就可以看到可視化的數(shù)據(jù)模型了其中在左上方的Fixed Frame可以選擇固定框架比如選擇base_link但是不會自動加載部件的關(guān)系8.2.2通過launch發(fā)送節(jié)點話題加載tf關(guān)系首先是在剛剛的功能包下構(gòu)建launch文件夾在launch文件夾下構(gòu)建.launch.py文件然后在launch里提供urdf文件的路徑并將其轉(zhuǎn)換為urdf文件的內(nèi)容再轉(zhuǎn)換為參數(shù)值內(nèi)容然后將文件內(nèi)容傳遞給robot_state_publisher節(jié)點該節(jié)點的作用是將urdf文件轉(zhuǎn)換為tf2消息。依次再新建一個發(fā)布節(jié)點將urdf文件轉(zhuǎn)換為joint_state消息。再新建一個發(fā)布節(jié)點將joint_state消息發(fā)布到rviz2。最后編譯構(gòu)建無誤后在當前工作空間通過ros2 launch 《功能包名》《.launch.py文件名》來打開rviz2打開后source默認是topic在下方可以選擇是來自哪個功能包。----------2026.10.249.1使用xacro簡化urdfxacro是基于xml的宏語言用于簡化urdf文件的創(chuàng)建和維護可以用他將部件定義為宏需要時調(diào)用即可9.1.1創(chuàng)建xacro文件及編寫要素在urdf文件夾下新建一個.xacro文件然后可以將urdf文件編寫的內(nèi)容復(fù)制到.xacro文件下修改。首先先在總標簽添加xacro的鏈接robot xmlns:xacrohttp://www.ros.org/wiki/xacro namefirst_robot然后xacro宏的編寫規(guī)則是在一對xacro:macro namebase_link params參數(shù)1 參數(shù)2內(nèi)容參數(shù)格式為${參數(shù)}/xacromacro/robot中編寫宏其中name為這個宏的名字有且只能有一個然后params則為包含的內(nèi)容的可修改參數(shù)可直接調(diào)用宏填寫9.1.2xacro宏的調(diào)用在robot內(nèi)容robot里填寫調(diào)用格式為xacro:base_link 參數(shù)1“” 參數(shù)2“”/其中因為宏名只能有一個所以要是要調(diào)用多個相同部件可以將部件的名字設(shè)置為參數(shù)9.1.3xacro指令的使用可以在終端使用xacro 《.xacro文件的路徑》來將.xacro文件解析成urdf文件同理則可以在launch文件中將“cat ”替換成“xacro ”這樣就可以將路徑的文件直接解析成urdf文件然后通過命令行ros2 launch 包名 《launch文件名》model:《需解析的xacro文件路徑》就可以解析成urdf文件并打開rviz2進行可視化展示了--9.2創(chuàng)建機器人及傳感器部件將機器人的各個部件都分成一個xacro文件每個xacro文件復(fù)制一個部件隨后再通過一個總的xacro文件鏈接其它部件的文件路徑統(tǒng)一發(fā)送9.2.1如何構(gòu)建部件的xacro文件首先先在urdf中新建一個.xacro文件然后在文件中寫上?xml version1.0?robot xmlns:xacrohttp://www.ros.org/wiki/xacro link部件信息/linkjoint加入關(guān)系/joint/xacromacro/robot這個結(jié)構(gòu)其中這個和一起打包的區(qū)別在于robot后不用寫name9.2.2如何鏈接和發(fā)送各個部件.xacro文件首先新建一個總的.xacro文件然后添加robot xmlns:xacrohttp://www.ros.org/wiki/xacro namefirst_robot/xacromacro/robot結(jié)構(gòu)在這個結(jié)構(gòu)里進行鏈接和調(diào)用。然后是鏈接剛剛的部件文件形式為xacro:include filename$(功能包名)/urdf/部件文件的路徑/部件的.xacro文件依次鏈接所需要包含和調(diào)用的部件然后再通過xacro:base_name 參數(shù)1 參數(shù)2的形式進行調(diào)用即可9.2.3通過launch來發(fā)送和打開rviz2顯示然后現(xiàn)在是調(diào)用我們之前寫的launch文件來將urdf顯示在rviz2上ros2 launch 包名 .launch.py文件 model:剛剛那個總.xacro文件的文件路徑運行即可在rviz2中打開并顯示構(gòu)建的機器人9.2.4給機器人添加虛擬部件虛擬部件就是相當于給機器人能有一個視覺地的現(xiàn)象因為正常來說顯示的平面是以機器人的中心為基準。操作就是在機器人主體部件的link上加多一個link namebase_footprint/即可然后在rviz2頁面固定框架選擇這個虛擬部件即可9.2.5防撞屬性防撞屬性就是讓機器人能有在碰到物體時能感應(yīng)到碰撞。添加防撞屬性操作即在每個部件的/visual下添加一組collision直接復(fù)制visual的內(nèi)容/collision即可然后在rviz2上勾選collision enable即可打開防撞屬性9.2.6質(zhì)量與慣性質(zhì)量與慣性就是給機器人的部件加上質(zhì)量屬性讓它有物理層面的效應(yīng)。操作先在總xacro文件同級目錄下添加common_inertia.xacro文件再在里面填寫以下內(nèi)容然后在每一個需要添加質(zhì)量與慣性屬性的部件文件中的robot下方添加 xacro:include filename$(包名)/common_inertia.xacro文件路徑/ 。 然后再在link下調(diào)用xacro:box_inertia m 參數(shù)1“”/ 其中box為此部件的形狀 參數(shù)則填部件的外形參數(shù) m為質(zhì)量。然后打開rviz2中可以在Mass Properties下勾選質(zhì)量或慣性的啟動-----------2026.10.25