在webots中搭建雙輪差速機器人
注意:
- 再學習本系列教程時,應該已經安裝過ROS了并且需要有一些ROS的基本知識
webots版本:2020b rev1
ros版本:melodic
webots官方參考資料:
- https://cyberbotics.com/doc/guide
模型如下圖所示:
1.jpg
1.新世界
- 打開webots後,選擇
,建立一個新的地圖。 2.jpg檔案->新世界
- 點一下場景樹中的worldinfo,激活
3.jpg
按鈕。
- 點選
3.jpg
按鈕用于添加節點或對象,會有如下視窗,并且找到
,添加這兩個節點到仿真環境中。 4.jpgPROTO nodes(Webots Projects)->objects->backgrounds
- 添加完場景後添加floor,找到
,添加PROTO nodes(Webots Projects)->objects->floors
節點。 5.jpgRectangleArena(solid)
- 我們可以看到左邊的場景樹中有很多屬性,這些屬性都是可以修改的。
比如我們可以修改一下floorsize的大小,輕按兩下floorsize改成x=5m y=5m 可以看到地圖變大了。
6.jpg
2.模型建立
2.1 body
- 在場景樹中添加Robot節點
- 輕按兩下
節點,建立Robot->children
節點Base_nodes->Shape
- 在場景樹中單擊
,下面會彈出一個DEF框,添加定義為body 7.jpgRobot->children->Shape
- 輕按兩下appearance 添加顔色紋理
,輕按兩下geometry 添加形狀Base_nodes->Appearance
。Base_nodes->Box
- 輕按兩下
添加金屬屬性,可以修改其節點下的appearance->material
屬性更改顔色。diffusecolor
- 并在geometry節點添加幾何屬性,設定車體大小,我這裡設定(x=0.5 y=0.15 z=0.5)m,将其在y上坐标設定高一些,友善後面加輪子。
- 現在我們得到這樣一個物體: 8.jpg
- 在
節點下給輪子增加碰撞屬性Robot
及重力屬性boundingObject
physics
- 碰撞屬性boundingObject:因為上面DEF了body,直接use body即可 14.jpg
- 重力屬性physics:隻要建立一個physics子節點即可2.2 動輪
- 在
下建立一個Robot->children
節點,DEF為left_wheel,該節點下會出現三個節點Base_nodes->HingeJoint
jointParameters、device和endPoint
- 在
節點下建立子節點HingeJoint->jointParameters
,該節點将定義旋轉原點(anchor)以及旋轉軸(axis)。HingeJointParameters
- axis是表示電機旋轉軸的平行向量
- anchor表示旋轉軸相對于父節點的坐标偏移量
- 點選
或者同時按下檢視–>可選顯示–>show joint Axes
,可以顯示出旋轉軸,友善我們調整旋轉軸及旋轉原點。ctrl+F5
- 在
節點下添加電機HingeJoint->device
,Rotatioal Motor
命名為Rotatioal Motor->name
left_motor
- 在
節點下,增加HingeJoint->endPoint
節點,該節點主要是設定電機模型以及其他功能參數,之後在Base_nodes->soild
節點下建立一個shape節點,在shape節點下設定輪子的形狀為soild->children
。Cylinder
- 通過調整
和translation
,将輪子設定到合适的位置,輪子大小設定為rotation
如圖: 9.jpg(height=0.08 radius=0.12)
- 接下來通過調整
和axis
,将電機旋轉軸調整到正确位置,比如我這裡電機的位置相對于車體anchor
,于是我将旋轉軸相對于父節點(body)的位置通過(x=0.31,y=0,z=0)
調整至此,并且修改anchor
的各個值觀察到我的輪子是繞axis
軸旋轉,是以将x
設定為axis
。可以看到,輪子處有一個黑線,表示旋轉軸在這裡,黑線表示的就是電機旋轉軸的位置和方向。筆者在這裡設定的(1 0 0)
和(axis=2 0 0)m
10.jpg(anchor=0.31 0 0)m
- 最後,在
節點下給輪子增加碰撞屬性HingeJoint->endPoint
及重力屬性boundingObject
physics
- 碰撞屬性boundingObject:設定和輪子大小一緻即可
- 重力屬性physics:隻要建立一個physics子節點即可
- 接下來複制出另一個輪子,按照上面的方法調整
和axis
,并且更改電機name為anchor
如下圖所示: 11.jpgright_motor
2.3 導輪
- 在
下建立一個Robot->children
節點。Base_nodes->HingeJoint
- 向上面的教程一樣建立
節點和jointParameters
節點,唯一和上面不同的是,導輪不需要電機,他是被動的。endpoint
- 對于導輪,筆者使用的是圓球
,因為比較好操作。sphere
- 位置如圖所示:
- axis設定為(0 1 0)
- anchor設定為(0 -0.09 0.23) 12.jpg
- 在
節點下給輪子增加碰撞屬性HingeJoint->endPoint
及重力屬性boundingObject
physics
- 碰撞屬性boundingObject:設定和導輪大小一緻即可
- 重力屬性physics:隻要建立一個physics子節點即可
- 接下來複制出另一個導輪置另一邊,按照上面的方法調整
和axis
如下圖所示:anchor
13.jpg
2.4 運作測試按下運作按鈕可以看到機器人平穩的降落到了地面上。
1.gif
2.5 儲存地圖在建立完機器人後一定要記得儲存地圖啊!!!!
搭建地圖很浪費時間的!!
在這裡我們儲存為
總結本文也是基于筆者的學習和使用經驗總結的,主觀性較強,如果有哪些不對的地方或者不明白的地方,歡迎評論區留言交流~webots_map.wbt
下一節通過ros控制小機器人吧。
✌Bye
reference:https://blog.csdn.net/weixin_44508381/article/details/105669173