Locomotion Detail

Planner-free Whole-Body Locomotion Framework for Quadruped Robots

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

STANCE: Locomotion Adaptation over Soft Terrain

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

Feasible Wrench Polytope (FWP) and the Feasible Region

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

Whole-body Control for Quadruped Robots

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

Visual Foothold Adaptations Using Machine Learning

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

Omni-directional Bounding Gait

Omni-directional Bounding Gait

We present the steps that allowed us to realize real outdoor experiments of HyQ bounding at different speeds and performing omni-directional maneuvers. The strategy is composed of two parts: the first one is an offline optimization that finds a stable periodic limit cycle which represents the base-line bounding gait; the second part is a speed controller that adjusts online the main gait parameters based on the high-level speed commands coming from the external operator. In the tests HyQ reached a forward speed of 2.5m/s, lateral speed of 1m/s and angular speed of 50 deg/s in simulation and, respectively, 1 m/s, 0.5m/s and 30deg/s on the hardware experiments.

Reactive Controller Framework

Reactive Controller Framework

While there is a lot of work addressing single aspects of the overall locomotion gait planning and control problem, solutions that take all these elements together in a systematic and coherent fashion are rare. In this contribution we present a reactive gait generation and control framework for a quadruped robot that has the following main goals:

  • Creation of stable omni-directional periodic gait
  • Robustness against disturbances from uneven ground and external forces on the trunk
  • Foot slip avoidance
  • Reduction of impact forces at the feet

To achieve these goals we make extensive use of kinematic and dynamic models of our hydraulic quadruped robot HyQ and exploit the high performance torque-control available at all the joints. The resulting control framework exhibits the following features (Barasuol, 2013):

  • Avoid trajectories that would penetrate the ground (avoid high ground reaction forces – GRF);
  • Avoid weak contact or loss of contact (avoid slippage);
  • Avoid undesired leg internal forces (avoid slippage and waste of energy);
  • Reduce disturbances between joint position and trunk attitude controllers;
  • Reduce disturbances at the trunk due to poor state estimation (avoid excessive GRF);
  • Increase the locomotion robustness with respect to unexpected terrain irregularities (avoid excessive GRF).

Crawl on Rough Terrain

Crawl on Rough Terrain

We present a heuristic-based planning approach for rough terrain locomotion. The terrain adaptation and the mitigation of tracking errors is achieved through a 1-step online replanning strategy, which can work either blindly or with visual feedback. We show real experiments where HyQ is able to successfully negotiate different types of terrain templates (ramps, debris, stairs, steps), some of them with a significant roughness. The size of the stones are up to 12 cm (diameter) that is about 26% the retractable leg length. We also applied this strategy, with little variations, to the task of climbing up and down industrial-size stairs, also performing 90deg turns while climbing the stairs.

Momentum Based Disturbance Observer

Momentum Based Disturbance Observer

A significant source of errors can come from unmodeled disturbances, such as an external push. If a proper identification is carried out offline, the updated model can then used for a more accurate inversion of the dynamics. Even though this approach is effective to detect constant payload changes, it is not convenient to estimate time-varying unknown external forces, which might change both in direction and intensity. Indeed, this kind of disturbances can dramatically increase the tracking errors and jeopardize the locomotion, unless they are compensated online. We developed a Momentum Based Disturbance Observer, capable of estimating both linear and angular components of an external disturbance wrench of variable amplitude applied on the robot during the execution of a walk. The identified wrench is compensated during the locomotion, improving the tracking accuracy and locomotion stability of HyQ that is climbing a ramp while pulling a wheel barrow (27kg load).

Simultaneous Contact and Motion Planning

An error occurred while processing the template.
No compatible overloaded variation was found; wrong number of arguments.
The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), string (wrapper: f.t.SimpleScalar), Null, extended_hash+string (Locale wrapped into f.e.b.StringModel), extended_hash+string (com.liferay.portal.kernel.theme.ThemeDisplay wrapped into f.e.b.StringModel).
The matching overload was searched among these members:
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, double, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(com.liferay.journal.model.JournalArticle, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay),
    com.sun.proxy.$Proxy1111.getArticleContent(long, String, String, String, String, com.liferay.portal.kernel.portlet.PortletRequestModel, com.liferay.portal.kernel.theme.ThemeDisplay)

----
FTL stack trace ("~" means nesting-related):
	- Failed at: article_content = JournalArticleLocal...  [in template "20101#20127#394442" at line 15, column 13]
----
1<#assign  
2    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
3    themeDisplay = serviceContext.getThemeDisplay() 
4    group_id = themeDisplay.getScopeGroupId()                     
5    JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")     
6
7<#assign article_content = ""> 
8<#if GenericContent.WContent.getData()?has_content> 
9    <#assign cur_webContent_map = GenericContent.WContent.getData()?eval > 
10    <#if cur_webContent_map?? && cur_webContent_map?has_content> 
11        <#assign  
12            cur_webContent_classPK = cur_webContent_map.classPK 
13            article = JournalArticleLocalService.getLatestArticle(cur_webContent_classPK?number) 
14            article_id = article.articleId 
15            article_content = JournalArticleLocalService.getArticleContent(group_id, article_id, null, locale, themeDisplay) 
16
17    </#if> 
18</#if> 
19<div class="col-12"> 
20    <div class="row base-content"> 
21      <div class="col-12 col-md-12"> 
22        <div class="titlebox"> 
23          <#if TextContent.Title.getData()?has_content> 
24              <#if TextContent.HeadingLevel.getData()?has_content> 
25                <${TextContent.HeadingLevel.getData()}>${TextContent.Title.getData()}</${TextContent.HeadingLevel.getData()}> 
26              <#else> 
27                <h1>${TextContent.Title.getData()}</h1> 
28              </#if> 
29          </#if> 
30          <#if TextContent.Subtitle.getData()?has_content && TextContent.Subtitle.getData() != ""> 
31            <span class="subtitle">${TextContent.Subtitle.getData()}</span> 
32          </#if> 
33        </div> 
34      </div> 
35    </div> 
36    <div class="row base-content"> 
37      <#if MediaContent.Imageh31j.getData()?? && MediaContent.Imageh31j.getData() != ""> 
38        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
39          <div class="col-12 col-md-12"> 
40            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
41            ${TextContent.Content.getData()} 
42            <div class="row">${article_content}</div> 
43          </div> 
44        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
45          <div class="col-3 col-md-3"> 
46            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
47          </div> 
48          <div class="col-9 col-md-9"> 
49            ${TextContent.Content.getData()} 
50            <div class="row">${article_content}</div> 
51          </div> 
52        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
53          <div class="col-9 col-md-9"> 
54            ${TextContent.Content.getData()} 
55            <div class="row">${article_content}</div> 
56          </div> 
57          <div class="col-3 col-md-3"> 
58            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
59          </div> 
60        <#else> 
61          ${TextContent.Content.getData()} 
62          <div class="row">${article_content}</div> 
63          <div class="col-12 col-md-12"> 
64            <img alt="${MediaContent.Imageh31j.getAttribute("alt")}" data-fileentryid="${MediaContent.Imageh31j.getAttribute("fileEntryId")}" src="${MediaContent.Imageh31j.getData()}" /> 
65          </div> 
66        </#if> 
67      <#elseif MediaContent.MediaID.getData()?? && MediaContent.MediaID.getData() != "" && MediaContent.MediaSource.getData()?? && MediaContent.MediaSource.getData() != ""> 
68        <#if MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "a"> 
69          <div class="col-12 col-md-12"> 
70            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
71              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
72            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
73              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
74            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
75            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
76            </#if> 
77            ${TextContent.Content.getData()} 
78            <div class="row">${article_content}</div> 
79          </div> 
80        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "l"> 
81          <div class="col-3 col-md-3"> 
82            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
83              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
84            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
85              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
86            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
87            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
88            </#if> 
89          </div> 
90          <div class="col-9 col-md-9"> 
91            ${TextContent.Content.getData()} 
92            <div class="row">${article_content}</div> 
93          </div> 
94        <#elseif MediaContent.MediaAlign.getData()?has_content && MediaContent.MediaAlign.getData() == "r"> 
95          <div class="col-9 col-md-9"> 
96            ${TextContent.Content.getData()} 
97            <div class="row">${article_content}</div> 
98          </div> 
99          <div class="col-3 col-md-3"> 
100            <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
101              <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
102            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
103              <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
104            <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
105            <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
106            </#if> 
107          </div> 
108        <#else> 
109          <div class="col-12 col-md-12"> 
110              ${TextContent.Content.getData()} 
111              <div class="row">${article_content}</div> 
112              <#if MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "yt"> 
113                <iframe src="https://www.youtube-nocookie.com/embed/${MediaContent.MediaID.getData()}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"></iframe> 
114              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "vimeo"> 
115                <iframe src="https://player.vimeo.com/video/${MediaContent.MediaID.getData()}?color=ffffff&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe> 
116              <#elseif MediaContent.MediaSource.getData()?has_content && MediaContent.MediaSource.getData() == "sh"> 
117              <iframe src="//www.slideshare.net/slideshow/embed_code/key/${MediaContent.MediaID.getData()}" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> 
118              </#if> 
119          </div> 
120        </#if> 
121      <#else> 
122        <div class="col-12 col-md-12"> 
123          ${TextContent.Content.getData()} 
124          <div class="row">${article_content}</div> 
125        </div> 
126      </#if> 
127    </div> 
128</div> 

Online Payload Identification

Online Payload Identification

The identification of inertial parameters is crucial to achieve high-performance model-based control of legged robots. The inertial parameters of the legs are typically not altered during expeditions and therefore are best identified offline. On the other hand, the trunk parameters depend on the modules mounted on the robot. We proposed multiple original techniques to identify online the parameters of the trunk of the robot. This is meant to improve the accuracy of the dynamic model and ensure locomotion stability, whenever a change in the load is detected. We show experiments of HyQ walking on flat and rough terrain while we add a weight on its trunk. The robot detects the payload change, performs the online identification and continues to walk with the updated parameters.

The Height Reflex

The Height Reflex

The height reflex is a motion generation strategy for all the robot’s feet. It redistributes the swing motion onto the stance legs, with the final effect of “lowering” the trunk to assist the foothold searching motion. The height reflex is useful when the robot is facing consid- erable changes in the terrain elevation (e.g., stepping down from a high platform). In such situations, the swing leg can lose mobility, causing issues during the subsequent steps (e.g., walking with excessively stretched legs). For this reasons the height reflex is most likely to be activated when stepping down.

The Step Reflex

The Step Reflex

The step reflex is a local elevator recovery strategy, triggered in cases of frontal impacts with an obstacle during the swing up phase. This reflex is key in cases of visual deprivation (e.g., smoky areas or thick vegetation): it allows the robot to overcome an obstacle and establish a stable foothold at the same time, without stumbling. If a frontal impact is detected in the swing down phase, the reflex is not triggered immediately, but it is scheduled for the beginning of the next swing phase. Even if the swing leg stumbles against the step, the robot is still able to climb the stairs, thanks to the step reflex.

The Chimney Climb

The Chimney Climb

Research into legged robotics is primarily motivated by the prospects of building machines that are able to navigate in challenging and complex environments that are predominantly non-flat. In this context, control of contact forces is fundamental to ensure stable contacts and equilibrium of the robot. In this paper we propose a planning/control framework for quasi-static walking of quadrupedal robots, implemented for a demanding application in which regulation of ground reaction forces is crucial. We show experimental results where HyQ is able to walk inside two high-slope (50◦) V-shaped walls; an achievement that to the authors’ best knowledge has never been pre-sented before. The robot distributes its weight among the stance legs so as to optimize user-defined criteria.

De-coupled Planned walking over rough terrain

De-coupled Planned walking over rough terrain

  • Α framework for quadrupedal locomotion over highly challenging terrain where the choice of appropriate footholds is crucial for the success of the behavior.
  • we developed a path planning approach that evaluates the geometry of the environment, computes desired body trajectories and selects locally optimal footholds along the planned path.
  • We exploit the active compliance of our system to smoothly interact with the environment, even when this is inaccurately perceived or dynamically changing, and update the planned path on-the-fly.
  • We leverage the full set of benefits that a high performance torque controlled quadruped robot can provide and demonstrate the flexibility and robustness of our approach on a set of experimental trials of increasing difficulty.
  • A. Winkler, C. Mastalli, I. Havoutis, M. Focchi, D. G. Caldwell, C. Semini, Planning and Execution of Dynamic Whole-Body Locomotion for a Hydraulic Quadruped on Challenging Terrain, IEEE International Conference on Robotics and Automation (ICRA), 2015 [full article]
  • C. Mastalli, A. Winkler, I. Havoutis, D. G. Caldwell, C. Semini, On-line and On-board Planning and Perception for Quadrupedal Locomotion, 2015 IEEE International Conference on Technologies for Practical Robot Applications (TEPRA), 2015 [full article]
  • A. Winkler, I. Havoutis, S. Bazeille, J. Ortiz, M. Focchi, R. Dillmann, D. G. Caldwell, C. Semini, "Path Planning with Force-Based Foothold Adaptation and Virtual Model Control for Torque Controlled Quadruped Robots," IEEE International Conference on Robotics and Automation (ICRA), 2014. [full article]