需求描述:編碼實現烏龜運動控制,讓小烏龜做圓周運動。
結果演示:
實現分析:
烏龜運動控制實現,關鍵節點有兩個,乙個是烏龜運動顯示節點 turtlesim_node,另乙個是控制節點,二者是訂閱發布模式實現通訊的,烏龜運動顯示節點直接呼叫即可,運動控制節點之前是使用的 turtle_teleop_key通過鍵盤 控制,現在需要自定義控制節點。
控制節點自實現時,首先需要了解控制節點與顯示節點通訊使用的話題與訊息,可以使用ros命令結合計算圖來獲取。
了解了話題與訊息之後,通過 c++ 或 python 編寫運動控制節點,通過指定的話題,按照一定的邏輯發布訊息即可。
實現流程:
通過計算圖結合ros命令獲取話題與訊息資訊。
編碼實現運動控制節點。
啟動 roscore、turtlesim_node 以及自定義的控制節點,檢視執行結果。
準備:先啟動鍵盤控制烏龜運動案例。
獲取話題:/turtle1/cmd_vel
通過計算圖檢視話題,啟動計算圖:
rqt_graph
或者通過 rostopic 列出話題:
rostopic list
**獲取訊息型別:**geometry_msgs/twist
rostopic type /turtle1/cmd_vel
獲取訊息格式:
rosmsg info geometry_msgs/twist
響應結果:
geometry_msgs/vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/vector3 angular
float64 x
float64 y
float64 z
linear(線速度) 下的xyz分別對應在x、y和z方向上的速度(單位是 m/s);
angular(角速度)下的xyz分別對應x軸上的翻滾、y軸上俯仰和z軸上偏航的速度(單位是rad/s)。
建立功能包需要依賴的功能包: roscpp rospy std_msgs geometry_msgs
實現方案a:c++
/*
編寫 ros 節點,控制小烏龜畫圓
準備工作:
1.獲取topic(已知: /turtle1/cmd_vel)
2.獲取訊息型別(已知: geometry_msgs/twist)
3.執行前,注意先啟動 turtlesim_node 節點
實現流程:
1.包含標頭檔案
2.初始化 ros 節點
3.建立發布者物件
4.迴圈發布運動控制訊息
*/#include "ros/ros.h"
#include "geometry_msgs/twist.h"
int main(int argc, char *ar**)
return 0;
}
配置檔案此處略
實現方案b:python
#! /usr/bin/env python
""" 編寫 ros 節點,控制小烏龜畫圓
準備工作:
1.獲取topic(已知: /turtle1/cmd_vel)
2.獲取訊息型別(已知: geometry_msgs/twist)
3.執行前,注意先啟動 turtlesim_node 節點
實現流程:
1.導包
2.初始化 ros 節點
3.建立發布者物件
4.迴圈發布運動控制訊息
"""import rospy
from geometry_msgs.msg import twist
if __name__ == "__main__":
# 2.初始化 ros 節點
rospy.init_node("control_circle_p")
# 3.建立發布者物件
pub = rospy.publisher("/turtle1/cmd_vel",twist,queue_size=1000)
# 4.迴圈發布運動控制訊息
rate = rospy.rate(10)
msg = twist()
msg.linear.x = 1.0
msg.linear.y = 0.0
msg.linear.z = 0.0
msg.angular.x = 0.0
msg.angular.y = 0.0
msg.angular.z = 0.5
while not rospy.is_shutdown():
pub.publish(msg)
rate.sleep()
許可權設定以及配置檔案此處略
首先,啟動 roscore;
然後啟動烏龜顯示節點;
最後執行運動控制節點;
最終執行結果與演示結果類似。
補充資料1:
弧度:單位弧度定義為圓弧長度等於半徑時的圓心角。
**補充資料2:**偏航、翻滾與俯仰
座標系**:
偏航:俯仰:
翻滾:
Flink 專案案例實操01
專案詳情 基於實時計算,您可以輕鬆完成實時欺詐檢測系統。實時欺詐檢測系統能夠及時發現使用者高危行為並採取措施,降低損失。實時欺詐檢測 風控 系統流程如下 實時計算訂閱訊息佇列,過濾出感興趣的行為,比如 購買 領券 瀏覽等。實時計算計算把這個行為特徵化。實時計算通過udf呼叫外部乙個風險模型,判斷這次...
mysql分割槽實操
分成2步 2.將原表資料插入新錶 insert into 目標表 select from 表 create table met shopv2 order copy1 id int 11 not null auto increment,orderid varchar 20 character set ...
redis備份實操
終於發布了個人的第乙個課程 redis備份實操,位址 1 不能搞出問題 虛擬機器測試環境不擔心這個啊 2 任務得在夜間進行 白天業務高峰期,不適合做維護 3 必須考慮可用性,得把資料備份到其他的系統上。我的搞法是 1 準備乙個資料校驗環境,安裝上redis,用於備份檔案匯入。通過對比生產環境redi...