伙伴分享|如何快速開發一個AppCube標準頁面
1038
2025-04-01
越來越多的ROS內容在云端混合展開,并全面支持ROS2,關于ROS官網有如下建議:
對于支持ROS1和ROS2的項目,什么時候把GitHub的默認分支從ROS1移到ROS2是合適的。考慮到Noetic即將發布,而且最后一個ROS1版本也即將發布,現在是考慮將所有的默認行為遷移到ROS2的好時機。這既是出于實用的原因,因為大多數新的開發可能都應該在ROS2中進行,同時也是為了突出早期的朋友們在將包遷移到ROS2中所做的偉大工作。將默認的分支作為ROS2的LTS發行版來發布,是一個信號,表明這個項目可以在ROS2中工作。如果很多項目都這樣做了,他們會認為這是一個運動,而事實就是如此。
所以建議,對于所有的 ros-* 倉庫或更大的項目,與其把默認的分支從 melodic-devel -> noetic-devel 改成 foxy-devel,不如把它們遷移到 foxy-devel。有段時間以來,我已經讓我所有的非ros-*版本的項目都這樣做了,但現在看來,Foxy似乎是時候把所有的項目都遷移到foxy版本了。
關于命名:
隨著《ROS 2 Foxy Fitzroy》的發售日期越來越近,需要開始為《ROS 2 G海龜》的發售名稱進行頭腦風暴。
現有的ROS 2名稱和代號:
Ardent Apalone - ardent
Bouncy Bolson - bouncy
Crystal Clemmys - crystal
Dashing Diademata - dashing LTS 推薦學習
Eloquent Elusor - eloquent
Foxy Fitzroy - foxy LTS 即將發布
現有的ROS 1名稱和代號:
Boxturtle - boxturtle
C Turtle - cturtle
Diamondback - diamondback
Electric Emys - electric
Fuerte - fuerte
Groovy Galapagos - groovy
Hydro Medusa - hydro
Indigo Igloo - indigo LTS
Jade Turtle - jade
Kinetic Kame - kinetic LTS
Lunar Loggerhead - lunar
Melodic Morenia - melodic LTS 推薦學習
Noetic Ninjemys - noetic LTS 即將發布
ROS2適合商用,并且很多收費項目非常贊!!!比如:
Link ROS,這是一套可以在世界任何地方通過任何網絡連接(防火墻、手機連接、WiFI、登錄屏幕...........)查看來自ROS的數據和控制機器人的工具。剛剛在Product Hunt上上線,使用促銷代碼PRODUCTHUNT免費贈送一個機器人一年。
之前在做大型11DOF清潔服務機器人的時候,在WiFi連接不好的地方工作過。體會那種坐在現場機器人旁邊,拿著屏幕、鍵盤、鼠標插在機器人上,試圖重現已經發生過幾次的BUG。知道第一手資料是多么難。
獲得一個穩定的ssh連接,甚至是設置好它,尤其是在部署地點的現場。
在你的數據包中獲取正確的數據,將其共享到另一臺計算機上,并將其可視化。
當你的機器人出現問題時,遠程控制你的機器人。
見過一次又一次地解決了這些問題,但很少有人能正確地解決。目標是一勞永逸地解決這個問題。支持ROS開箱即用,單線安裝。擁有所有的數據。有一個前端應用,但是先做API,所以你可以把你的應用也掛到它上面。
安裝文檔 - 單行安裝
日志設置文檔 - 監控教程
帶寬調整 - 調整到低速連接或千兆以太網上運行
ROS連接
ROS 1和2需要零代碼!
現在,您已經安裝了代理,每次運行ROS并開始將數據上傳到Freedom時,ROS Shadow節點都會打開。
ROS 1和ROS 2
Freedom同時支持ROS 1和ROS2。在設備上安裝代理程序時,在運行安裝腳本之前,請打開ADVANCED菜單并選擇適當的ROS版本。
如果要使用啟動腳本,播放ROS程序包或運行ROS節點,則無需執行其他任何操作。您的數據將自動開始上傳到云端!在這里,我們將通過一個最小的示例向您展示更多有關其工作原理的信息。
沒有ROS嗎?
如果你想測試出ROS的例子,并沒有安裝ROS(或使用的是Mac),運行以下命令來訪問自由泊塢游樂場:docker run -it frdmrobotics/playground bash。您需要apt-get install nano(或您最喜歡的編輯器)。
開始上傳數據
Freedom自動旋轉一個節點(名為link_ros)以自省使用ROS發布的主題。啟動某些內容并開始發布以進行檢查-ROS袋也可以工作!
數據將顯示在STREAM儀表板的Freedom App中。
ROS2:
# Launch your own nodes and the Agent will automatically
# start a node (link_ros) that listens to what is published.
# Make sure to source your ROS workspace before launching.
ros2 launch my_package my_launch.launch
ROS2 Bag:
# Not many good quality ROS2 bags exist yet - here we show a
# workaround with a ROS1 bag run in ROS2
# Make sure you have installed ros2 bag packages
apt-get update
sudo apt-get install ros-dashing-ros2bag-* ros-dashing-rosbag2*
# Source ROS1 workspace first
source /opt/ros/melodic/setup.bash
# Now source ROS2 workspace
source /opt/ros/dashing/setup.bash
# Download a ROS bag to play, saving it as rosbag-example.bag
curl -L -o rosbag-example.bag https://bit.ly/freedom-rosbag-example-car
# Play the ROS bag and the Agent will listen to the topics it publishes
ros2 bag play -s rosbag_v2 rosbag-example.bag
發送和接收消息
我們將通過一個示例演示ROS節點如何既可以將消息發送到Freedom,又可以響應從Freedom API發送的命令。
創建一個名為的文件,demo_node.py并復制下面的代碼。
ROS2:
#!/usr/bin/env python
# Please note that there are no references to Freedom in this ROS node.
# The ROS Shadow node will automatically interact with this node and
# stream the data.
import time
import rclpy
import rclpy.logging
from std_msgs.msg import String
from sensor_msgs.msg import NavSatFix
logger = rclpy.logging.get_logger('node_logger')
# Create a callback to handle this topic
def callback(data):
logger.info("I heard {}".format(data.data))
if data.data == "mission":
logger.info("Running mission...")
elif data.data == "shutdown":
logger.info("Received shutdown command")
rclpy.shutdown()
# There is nothing you need to do. The ROS Shadow node
# will automatically start when this starts
if __name__ == '__main__':
rclpy.init()
node = rclpy.create_node('node_name')
subscription = node.create_subscription(String, 'commands', callback, 10)
# Create our satellite GPS location topic
pub_nav = node.create_publisher(NavSatFix, 'location', 10)
nav_msg = NavSatFix(latitude=37.778454, longitude=-122.389171)
rclpy.spin(node)
while rclpy.ok():
pub_nav.publish(nav_msg)
time.sleep(1)
# Destroy the node explicitly
# (optional - otherwise it will be done automatically
# when the garbage collector destroys the node object)
node.destroy_node()
rclpy.shutdown()
使用以下命令啟動節點。
# Source ROS2 workspace
source /opt/ros/dashing/setup.bash
# Execute created script with python3 (mandatory for ROS2)
python3 demo_node.py
您的機器人現在正在報告其位置,同時耐心等待遠程命令!您可以在STREAM儀表板的地圖上查看其位置。
本示例旨在向您展示使用ROS與Freedom連接的基礎知識。通常,您應該構建一個ROS程序包,使用Catkin或Colcon進行編譯,并使用ros2 run或ros2 launch,而不是如上所述地獨立運行ROS節點。
測試回調
為了檢查回調是否有效,我們將使用Freedom的REST API將命令發送到您的設備。
首先,在Freedom App中選擇設備,然后導航至SETTINGS→DEVICE。在“?接口”部分中,選擇ROS(對于ROS1)或ROS2。
接下來,如果您尚未登錄,請單擊此頁面右上角的“?登錄”,以便在此示例中,我們可以填充您的令牌,密碼,帳戶和設備的值。登錄后,運行以下命令:
ROS2:
TOKEN="MY_TOKEN"
SECRET="MY_SECRET"
ACCOUNT="MY_ACCOUNT"
DEVICE="MY_DEVICE"
HEADERS="-H content-type:application/json -H mc_token:$TOKEN -H mc_secret:$SECRET"
DATA="[{
\"platform\": \"ros\",
\"utc_time\": `date +%s`,
\"topic\": \"/commands\",
\"type\": \"std_msgs/msg/String\",
\"expiration_secs\": 10,
\"message\": {\"data\":\"mission\"}
}]"
curl -v $HEADERS -d "$DATA" -X PUT "https://api.freedomrobotics.ai/accounts/$ACCOUNT/devices/$DEVICE/commands"
該消息將在您設置的回調中接收。一旦您的機器人接收到該命令,它將記錄日志Running mission...。
更改mission為shutdown并發送新命令。您的應用程序現在將遠程關閉。
成功!您現在知道了如何使用Freedom通過云上傳數據并與您的機器人通信。
機器人
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。